diff --git a/HOMELAB_ARCHITECTURE_MASTER_V2.md b/HOMELAB_ARCHITECTURE_MASTER_V2.md index 1ad27a0..f55f67e 100644 --- a/HOMELAB_ARCHITECTURE_MASTER_V2.md +++ b/HOMELAB_ARCHITECTURE_MASTER_V2.md @@ -92,6 +92,7 @@ Jeder produktive Container nutzt `restart: unless-stopped`, außer eine Ausnahme | `nextcloud_internal` | bridge, `internal: true` | internes Netz nur fuer `nextcloud` + `nextcloud-postgres` + `nextcloud-redis` | ✅ vorbereitet | | `monitoring_net` | Compose-intern, bridge | zentraler Observability-Stack fuer Prometheus, Loki, Grafana, Promtail, Exporter und InfluxDB | Zielzustand | | `monitoring_influx_lan` | Compose-intern, bridge | nicht-oeffentliches Zusatznetz nur fuer Docker Host-Port-Publishing von InfluxDB 8181 | Zielzustand | +| `glance_socket_net` | Compose-intern, `internal: true` | interner Zugriff von Glance auf den Docker-Socket-Proxy | vorbereitet | | `grafana_influx_internal` | Compose-intern, `internal: true` | alte Grafana-zu-InfluxDB-Kommunikation | abgeloester Altstand | | `grafana_influx_lan` | Compose-intern, bridge | altes Docker Host-Port-Publishing von InfluxDB 8181 | abgeloester Altstand | | `host` | host | nur für echte Sonderfälle | begründet | @@ -105,7 +106,7 @@ traefik (80/443) │ └── frontend_net ├── öffentliche Apps (vaultwarden, mealie, paperless, immich, gitea, ntfy, mail-archiver, nextcloud) - ├── geschützte UIs mit Middleware (homepage, paperless-gpt, uptime-kuma, filebrowser, scrutiny, code-server, borg-ui, glances, speedtest, bentopdf, grafana) + ├── geschützte UIs mit Middleware (homepage, glance, paperless-gpt, uptime-kuma, filebrowser, scrutiny, code-server, borg-ui, glances, speedtest, bentopdf, grafana) ├── Admin-UI mit nativer Auth (komodo) └── Dienste mit Internetbedarf ohne öffentliche UI (ddns-updater) @@ -159,6 +160,7 @@ Diese Dienste sind **keine Public Apps**: - `code-server` — Traefik + Middleware - `borg-ui` — borg.kaleschke.info (Middleware) - `homepage` — home.kaleschke.info (Middleware) +- `glance` — glance.kaleschke.info (Middleware) - `paperless-gpt` — paperless-gpt.kaleschke.info (Middleware) - `mail-archiver` — mail.kaleschke.info (Middleware + App-Auth) - `glances` — glances.kaleschke.info (Middleware) @@ -295,6 +297,7 @@ Legende Status: | Container | Status | Soll-Netz(e) | Finaler Zugang | Finaler Sollzustand | Offene Punkte | |---|---|---|---|---|---| | `UptimeKuma` | ✅ | `frontend_net` | Traefik + Middleware | aktiv via `uptime.kaleschke.info` | — | +| `glance` | vorbereitet | `frontend_net`, `glance_socket_net` | Traefik + Middleware | Homelab-Uebersicht via `glance.kaleschke.info`; Docker-Status nur ueber internen Socket-Proxy | Deploy und fachliche Abnahme offen | | `glances` | ✅ | `frontend_net` | Traefik + Middleware | aktiv via `glances.kaleschke.info` | — | | `scrutiny` | ✅ | `frontend_net` | Traefik + Middleware | aktiv via `scrutiny.kaleschke.info`, Git-Stack | `privileged` später prüfen | | `speedtest-tracker` | ✅ | `frontend_net` | Traefik + Middleware | aktiv via `speedtest.kaleschke.info` | — | @@ -394,6 +397,7 @@ Für den laufenden Betrieb gilt stattdessen: | `Plex-Media-Server` | `host` | Discovery / mDNS / Plex GDM | | `scrutiny` | `privileged: true` | SMART-Datenzugriff auf Laufwerke | | `Komodo` | Docker-Socket Zugriff | Stack-Deployments benötigen Socket | +| `glance-docker-socket-proxy` | Docker-Socket read-only | Glance benoetigt Containerstatus; Zugriff wird ueber einen internen Socket-Proxy auf lesende Docker-API-Endpunkte begrenzt und nicht ins `frontend_net` gelegt | | `Komodo` | keine pauschale zentrale Middleware | Webhooks (`/listener`), API und Periphery-WebSocket (`/ws/periphery`) sollen nicht durch vorgeschaltete ForwardAuth gebrochen werden | | `gitea` | SSH-Port 222 direkt gebunden | Git-SSH-Zugang; kein HTTP-Proxy für SSH möglich | | `ddns-updater` | bleibt in `frontend_net` statt `backend_net` | braucht Cloudflare-API-Zugang; `backend_net` ist `internal: true` | diff --git a/docs/MIGRATION_LOG.md b/docs/MIGRATION_LOG.md index 9d9f512..fceaad0 100644 --- a/docs/MIGRATION_LOG.md +++ b/docs/MIGRATION_LOG.md @@ -16,6 +16,13 @@ Dieses Dokument ist nur noch ein historischer Verlauf. Der aktuelle operative Ab ## Historische Meilensteine +### 2026-05-17 - Glance Homelab-Dashboard vorbereitet + +- `ops/glance` als geschuetztes Homelab-Dashboard unter `glance.kaleschke.info` vorbereitet. +- Glance zeigt HTTP-Monitore fuer Core, Apps und Ops, Docker-Containergruppen, AdGuard DNS-Stats, Host-Snapshot, Bookmarks und relevante Upstream-Releases. +- Docker-Status laeuft nicht ueber einen direkten Socket-Mount in Glance, sondern ueber `glance-docker-socket-proxy` auf einem internen `glance_socket_net`. +- AdGuard-Zugangsdaten fuer das DNS-Stats-Widget bleiben als Komodo Stack Environment Variables ausserhalb des Repos. + ### 2026-05-17 - Monitoring-Zielstack konsolidiert - `monitoring/` als zentraler Observability-Zielstack fuer Prometheus, Loki, Promtail, Grafana, node-exporter, cAdvisor und InfluxDB 3 Core vorbereitet. diff --git a/docs/REPO_MAP.md b/docs/REPO_MAP.md index 6d4edf2..e0205a0 100644 --- a/docs/REPO_MAP.md +++ b/docs/REPO_MAP.md @@ -54,6 +54,7 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | `monitoring/loki/loki-config.yml` | Loki Filesystem/Retention-Konfiguration fuer dedizierten Monitoring-Stack | | `monitoring/promtail/promtail-config.yml` | Promtail Docker-Socket-Discovery fuer dedizierten Monitoring-Stack | | `monitoring/grafana/provisioning/*` | Grafana Datasource-/Dashboard-Provisioning fuer Prometheus und Loki | +| `ops/glance/config/glance.yml` | Glance Dashboard-Konfiguration fuer Homelab-Monitore, Docker-Containergruppen, DNS-Stats und Bookmarks | | `ops/borg-ui/scripts/pre-backup-dumps.sh` | Host-seitiges Dump-Skript fuer PostgreSQL, SQLite-Container-Dumps und Komodo Mongo | | `services/posture-check/posture-check.sh` | Host-seitiger Posture-Check fuer Filesystem, Mover-Drift, NVMe-SMART, Fuellstand und ntfy-Alarmierung | | `services/posture-check/docker-critical-events.sh` | Host-seitiger Docker-Event-Watcher fuer kritische ntfy-Alarme | @@ -107,6 +108,7 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | Borg UI | `ops/borg-ui/docker-compose.yml` | `borg-ui` -> `ainullcode/borg-ui:latest@sha256:...` | `borg.kaleschke.info` | `frontend_net` | keine | Borg repo, Dump-Scope, Restore-Ziel | | code-server | `ops/code-server/docker-compose.yml` | `code-server` -> `lscr.io/linuxserver/code-server:4.116.0@sha256:...` | `code.kaleschke.info` | `frontend_net` | keine | Passwort-Datei, Workspace-Mounts | | Filebrowser | `ops/filebrowser/docker-compose.yml` | `filebrowser` -> `filebrowser/filebrowser:v2.63.2@sha256:...` | `files.kaleschke.info` | `frontend_net` | keine | Documents/Photos/Projekte-Mounts, Admin-UI hinter Authelia | +| Glance | `ops/glance/docker-compose.yml` | `glance` -> `glanceapp/glance:v0.8.4`, `glance-docker-socket-proxy` -> `tecnativa/docker-socket-proxy:0.4.2` | `glance.kaleschke.info` | `frontend_net`, `glance_socket_net` | keine | Homelab-Dashboard mit Monitor-, Docker-, DNS-, Server-Stats- und Release-Widgets; Docker-API nur ueber internen Socket-Proxy | | Glances | `ops/glances/docker-compose.yml` | `glances` -> `nicolargo/glances:latest-full@sha256:...` | `glances.kaleschke.info` | `frontend_net` | keine | Rootfs/Docker-Socket fuer Monitoring | | Grafana/InfluxDB | `ops/grafana-influxdb/docker-compose.yml` | `grafana`, `influxdb3-core` | `grafana.kaleschke.info` | `frontend_net`, `grafana_influx_internal`, `grafana_influx_lan` | `influxdb3-core`: `${INFLUXDB_BIND_IP:-127.0.0.1}:8181:8181` | abgeloester Altstand; nach erfolgreicher Migration durch `monitoring/` ersetzen | | Loki/Alloy | `ops/loki/docker-compose.yml` | `loki`, `alloy` | keine | `backend_net` | keine | abgeloester Altstand; nach erfolgreicher Migration durch `monitoring-loki`/`monitoring-promtail` ersetzen | @@ -133,6 +135,7 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | `code.kaleschke.info` | code-server | Traefik + Authelia | | `files.kaleschke.info` | Filebrowser | Traefik + Authelia | | `git.kaleschke.info` | Gitea Web | Traefik | +| `glance.kaleschke.info` | Glance | Traefik + Authelia | | `glances.kaleschke.info` | Glances | Traefik + Authelia | | `grafana.kaleschke.info` | Grafana | Traefik + Authelia | | `hermes.kaleschke.info` | Hermes Dashboard | Traefik + Authelia | @@ -166,6 +169,7 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | `grafana_influx_lan` | Compose-intern bridge | InfluxDB Host-Port-Publishing fuer LAN Writer | | `monitoring_net` | Compose-/Stack-Netz bridge | Prometheus, Loki, Promtail, Monitoring-Grafana, node-exporter, cAdvisor; Traefik fuer Metrics-Scrape | | `monitoring_influx_lan` | Compose-intern bridge | InfluxDB Host-Port-Publishing fuer LAN Writer im zentralen Monitoring-Stack | +| `glance_socket_net` | Compose-intern, `internal: true` | Glance und `glance-docker-socket-proxy`; keine Traefik-Anbindung | | `komodo_net` | Compose-intern, `internal: true` | Komodo Core, Mongo, Periphery | | `hermes_net` | Compose-intern bridge | Hermes Gateway/Dashboard | | `host` | Host-Netz | Tailscale; Plex historisch ausserhalb Repo | @@ -193,6 +197,7 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | Borg UI | `/mnt/user/appdata/borg-ui/data`, `/mnt/user/appdata/borg-ui/cache`, `/mnt/user/backups/borg/dumps`, selected restore/source mounts | | code-server | `/mnt/user/appdata/code-server`, `/mnt/user/services/dev`, Homepage production mount | | Filebrowser | `/mnt/user/documents`, `/mnt/user/photos`, `/mnt/user/projekte`, Filebrowser database/config paths | +| Glance | Repo-Konfiguration unter `ops/glance/config/glance.yml`; keine produktive Datenpersistenz; Docker-Socket nur am internen Proxy | | Glances | `/`, Docker socket, `/etc/os-release` | | Scrutiny | `/mnt/user/appdata/scrutiny/*`, `/run/udev`, selected `/dev/...` disks | | Speedtest | `/mnt/user/appdata/speedtest-tracker/config` | @@ -216,6 +221,7 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | Immich | `IMMICH_DB_PASSWORD` Stack ENV; `immich_postgres_password.txt` fuer Postgres | | Mail Archiver | `MAILARCHIVER_DB_CONNECTION`, `MAILARCHIVER_AUTH_PASSWORD` als Stack ENV | | Homepage | viele `HOMEPAGE_VAR_*` Stack ENV Keys fuer Tokens/Logins | +| Glance | `GLANCE_ADGUARD_USERNAME`, `GLANCE_ADGUARD_PASSWORD` als Stack ENV fuer AdGuard DNS-Stats | | Speedtest | `APP_KEY`, `ADMIN_PASSWORD` als Stack ENV | | Nextcloud | Admin User, Admin Password, Postgres Password via Secret-Dateien | | Komodo | `KOMODO_SECRET_KEY`, `KOMODO_WEBHOOK_SECRET`, `KOMODO_JWT_SECRET`, `KOMODO_MONGO_PASSWORD`, `KOMODO_PERIPHERY_PASSKEY`; Mongo Passwort-Datei | diff --git a/docs/ROLLBACK.md b/docs/ROLLBACK.md index 58dde83..bbe94f3 100644 --- a/docs/ROLLBACK.md +++ b/docs/ROLLBACK.md @@ -105,6 +105,18 @@ Der Zielzustand ist `monitoring/` als einziger Observability-Stack. Bei Probleme 5. Home Assistant Writer erst wieder umstellen, wenn `curl -i http://192.168.178.58:8181/` erwartbar `401 Unauthorized` liefert 6. Grafana-Datasources `Prometheus`, `Loki` und `InfluxDB 3 Core` testen +## Glance Dashboard Rollback + +Vor dem ersten produktiven Einsatz reicht es, den vorbereiteten Stack `ops/glance` nicht zu deployen oder per Ruecknahme-Commit aus dem Repo zu entfernen. + +Nach einem Deploy: + +1. `glance` in Komodo stoppen oder auf den letzten funktionierenden Commit zurueckgehen +2. keine Produktivdaten loeschen; Glance nutzt nur Repo-Konfiguration und Stack-ENV +3. Stack-ENV `GLANCE_ADGUARD_USERNAME` und `GLANCE_ADGUARD_PASSWORD` nur nach bewusstem Entscheid entfernen +4. pruefen, ob `https://glance.kaleschke.info` nicht mehr geroutet wird oder wieder den erwarteten Stand zeigt +5. der `glance-docker-socket-proxy` darf nicht separat als Dauercontainer laufen bleiben + --- ## Daten-Rollback diff --git a/docs/SECRETS_MAP.md b/docs/SECRETS_MAP.md index 93f3594..3c98462 100644 --- a/docs/SECRETS_MAP.md +++ b/docs/SECRETS_MAP.md @@ -39,6 +39,7 @@ Dieses Dokument listet sensible Daten, deren Ablageorte und die vorgesehene Einb | Komodo Mongo | Root Password | `/mnt/user/appdata/secrets/komodo_mongo_password.txt` -> `MONGO_INITDB_ROOT_PASSWORD_FILE` | aktiv | | Komodo Core | App Secrets | Stack ENV `${KOMODO_SECRET_KEY}`, `${KOMODO_WEBHOOK_SECRET}`, `${KOMODO_JWT_SECRET}`, `${KOMODO_MONGO_PASSWORD}`, `${KOMODO_PERIPHERY_PASSKEY}` | aktiv | | Homepage | API Tokens / Zugangsdaten | Stack ENV `HOMEPAGE_VAR_*` | aktiv | +| Glance | AdGuard API Login fuer DNS-Stats | Stack ENV `${GLANCE_ADGUARD_USERNAME}`, `${GLANCE_ADGUARD_PASSWORD}` | vorbereitet | | speedtest-tracker | App Key / Admin-Zugang | Stack ENV `${APP_KEY}`, `${ADMIN_PASSWORD}` | aktiv | | Nextcloud | Admin User | `/mnt/user/appdata/secrets/nextcloud_admin_user.txt` -> `NEXTCLOUD_ADMIN_USER_FILE` | neu | | Nextcloud | Admin Password | `/mnt/user/appdata/secrets/nextcloud_admin_password.txt` -> `NEXTCLOUD_ADMIN_PASSWORD_FILE` | neu | diff --git a/docs/SERVICE_CATALOG.md b/docs/SERVICE_CATALOG.md index 59aacfb..3eae2fe 100644 --- a/docs/SERVICE_CATALOG.md +++ b/docs/SERVICE_CATALOG.md @@ -55,6 +55,7 @@ Secret-Werte sind nicht enthalten. Es werden nur Secret-Namen, Env-Key-Namen und | Service | Zweck | Autoritativer Pfad | URL / Zugang | Abhaengigkeiten | Datenpfade | Backup / Restore | Traefik | Besonderheiten / TODOs | |---|---|---|---|---|---|---|---|---| | `homepage` | Start-Dashboard | `apps/homepage/docker-compose.yml` | `https://home.kaleschke.info` | Traefik, viele API Tokens | `/mnt/user/appdata/homepage`, `/mnt/user/appdata/homepage/images` | Tier 2 | ja + Authelia laut Compose | Authelia schuetzt die Domain ueber die 1FA-Wildcard-Regel; Docker socket im Recovery entfernt, Docker-Widgets erst wieder via dokumentierter Ausnahme oder Socket-Proxy | +| `glance` | Homelab-Uebersicht / Status-Dashboard | `ops/glance/docker-compose.yml`, `ops/glance/config/glance.yml` | `https://glance.kaleschke.info` | Traefik + Authelia, AdGuard API, interner Docker-Socket-Proxy | Repo-Konfiguration; keine kritische Persistenz | Tier 3, rebuildbar | ja + Authelia | Zeigt aktive Dienste, HTTP-Monitore, Docker-Containergruppen, AdGuard DNS-Stats, Host-Snapshot und Releases; Docker-API nur ueber `glance-docker-socket-proxy` auf internem Netz | | `komodo-core` | GitOps UI/API/Stack-Manager | `ops/komodo/docker-compose.yml` | `https://komodo.kaleschke.info` | Mongo, Gitea, Traefik | `/mnt/user/appdata/komodo/core`, `komodo_keys` | Tier 1 | ja, native Auth | keine pauschale Authelia-ForwardAuth; Gitea DNS override | | `komodo-mongo` | Komodo Datenbank | `ops/komodo/docker-compose.yml` | intern | `komodo_net` | `/mnt/user/appdata/komodo/mongo`, `komodo_mongo_password.txt` | Tier 1, `komodo-mongo.archive.gz` | nein | Dump am 2026-05-04 bestaetigt; nach Major-Upgrades pruefen | | `komodo-periphery` | Komodo Host-Agent | `ops/komodo/docker-compose.yml` | intern Core -> Periphery | Docker socket, `/mnt/user/services`, `frontend_net`, `komodo_net` | `/mnt/user/appdata/komodo/periphery`, `komodo_keys` | Tier 1 | nein | Docker-Socket-Ausnahme; `/mnt/user/services` Mount fuer Stack-Workspaces | diff --git a/env/domains.env.example b/env/domains.env.example index c4965af..19343d8 100644 --- a/env/domains.env.example +++ b/env/domains.env.example @@ -2,3 +2,4 @@ BASE_DOMAIN=kaleschke.info TRAEFIK_DOMAIN=traefik.kaleschke.info AUTH_DOMAIN=auth.kaleschke.info HOME_DOMAIN=home.kaleschke.info +GLANCE_DOMAIN=glance.kaleschke.info diff --git a/ops/glance/config/glance.yml b/ops/glance/config/glance.yml new file mode 100644 index 0000000..cc21da0 --- /dev/null +++ b/ops/glance/config/glance.yml @@ -0,0 +1,568 @@ +server: + proxied: true + +branding: + app-name: KalliLab Dashboard + logo-text: KL + hide-footer: true + +theme: + background-color: 220 13 11 + primary-color: 170 56 58 + positive-color: 135 42 52 + negative-color: 0 72 62 + contrast-multiplier: 1.15 + text-saturation-multiplier: 0.8 + disable-picker: false + +pages: + - name: Homelab + slug: home + width: wide + head-widgets: + - type: search + search-engine: duckduckgo + new-tab: true + autofocus: true + placeholder: Suche im Web oder springe per Bang... + bangs: + - title: Gitea + shortcut: "!git" + url: https://git.kaleschke.info/explore/repos?q={QUERY} + - title: Paperless + shortcut: "!doc" + url: https://paperless.kaleschke.info/documents?query={QUERY} + - title: Nextcloud + shortcut: "!cloud" + url: https://cloud.kaleschke.info/apps/files/?dir=/{QUERY} + - title: Komodo + shortcut: "!komodo" + url: https://komodo.kaleschke.info + columns: + - size: small + widgets: + - type: clock + hour-format: 24h + timezones: + - timezone: Europe/Berlin + label: Berlin + + - type: calendar + first-day-of-week: monday + + - type: dns-stats + title: AdGuard DNS + service: adguard + url: http://adguard + username: ${GLANCE_ADGUARD_USERNAME} + password: ${GLANCE_ADGUARD_PASSWORD} + hour-format: 24h + + - type: server-stats + title: Host Snapshot + servers: + - type: local + name: Kallilabcore + hide-mountpoints-by-default: false + + - type: bookmarks + title: Direkte Einstiege + groups: + - title: Core + color: 170 56 58 + links: + - title: Home + url: https://home.kaleschke.info + icon: sh:homepage + - title: Komodo + url: https://komodo.kaleschke.info + icon: sh:komodo + - title: Gitea + url: https://git.kaleschke.info + icon: si:gitea + - title: Monitoring + url: https://monitoring.kaleschke.info + icon: si:grafana + - title: Ops + color: 45 70 55 + links: + - title: Borg + url: https://borg.kaleschke.info + icon: mdi:archive + - title: Uptime + url: https://uptime.kaleschke.info + icon: sh:uptime-kuma + - title: Glances + url: https://glances.kaleschke.info + icon: sh:glances + - title: Scrutiny + url: https://scrutiny.kaleschke.info + icon: sh:scrutiny + + - size: full + widgets: + - type: monitor + title: Core, Security und Ingress + cache: 1m + sites: + - title: Traefik + url: https://traefik.kaleschke.info + icon: si:traefikproxy + alt-status-codes: [200, 302, 401, 403] + - title: Authelia + url: https://auth.kaleschke.info + icon: si:authelia + alt-status-codes: [200, 302, 401, 403] + - title: Gitea + url: https://git.kaleschke.info + icon: si:gitea + alt-status-codes: [200, 302, 401, 403] + - title: Komodo + url: https://komodo.kaleschke.info + icon: sh:komodo + alt-status-codes: [200, 302, 401, 403] + - title: Vaultwarden + url: https://vault.kaleschke.info + icon: si:vaultwarden + alt-status-codes: [200, 302, 401, 403] + - title: AdGuard Home + url: http://192.168.178.58:8082 + check-url: http://adguard + icon: si:adguard + alt-status-codes: [200, 302, 401, 403] + + - type: monitor + title: Apps + cache: 1m + sites: + - title: Paperless-ngx + url: https://paperless.kaleschke.info + icon: sh:paperless-ngx + alt-status-codes: [200, 302, 401, 403] + - title: Paperless-GPT + url: https://paperless-gpt.kaleschke.info + icon: mdi:robot + alt-status-codes: [200, 302, 401, 403] + - title: Immich + url: https://immich.kaleschke.info + icon: si:immich + alt-status-codes: [200, 302, 401, 403] + - title: Mealie + url: https://mealie.kaleschke.info + icon: sh:mealie + alt-status-codes: [200, 302, 401, 403] + - title: Nextcloud + url: https://cloud.kaleschke.info + icon: si:nextcloud + alt-status-codes: [200, 302, 401, 403] + - title: ntfy + url: https://ntfy.kaleschke.info + icon: si:ntfy + alt-status-codes: [200, 302, 401, 403] + - title: Mail Archiver + url: https://mail.kaleschke.info + icon: mdi:email-archive + alt-status-codes: [200, 302, 401, 403] + - title: BentoPDF + url: https://pdf.kaleschke.info + icon: mdi:file-pdf-box + alt-status-codes: [200, 302, 401, 403] + + - type: monitor + title: Operations und Observability + cache: 1m + sites: + - title: Glance + url: https://glance.kaleschke.info + icon: sh:glance + alt-status-codes: [200, 302, 401, 403] + - title: Homepage + url: https://home.kaleschke.info + icon: sh:homepage + alt-status-codes: [200, 302, 401, 403] + - title: Monitoring Grafana + url: https://monitoring.kaleschke.info + icon: si:grafana + alt-status-codes: [200, 302, 401, 403] + - title: Uptime Kuma + url: https://uptime.kaleschke.info + icon: sh:uptime-kuma + alt-status-codes: [200, 302, 401, 403] + - title: Glances + url: https://glances.kaleschke.info + icon: sh:glances + alt-status-codes: [200, 302, 401, 403] + - title: Scrutiny + url: https://scrutiny.kaleschke.info + icon: sh:scrutiny + alt-status-codes: [200, 302, 401, 403] + - title: Speedtest Tracker + url: https://speedtest.kaleschke.info + icon: sh:speedtest-tracker + alt-status-codes: [200, 302, 401, 403] + - title: Filebrowser + url: https://files.kaleschke.info + icon: sh:filebrowser + alt-status-codes: [200, 302, 401, 403] + - title: code-server + url: https://code.kaleschke.info + icon: sh:code-server + alt-status-codes: [200, 302, 401, 403] + - title: Borg UI + url: https://borg.kaleschke.info + icon: mdi:archive-sync + alt-status-codes: [200, 302, 401, 403] + - title: Hermes + url: https://hermes.kaleschke.info + icon: mdi:shield-sparkles + alt-status-codes: [200, 302, 401, 403] + + - size: small + widgets: + - type: docker-containers + title: Core Container + category: core + hide-by-default: true + sock-path: tcp://glance-docker-socket-proxy:2375 + containers: &containers + traefik: + name: Traefik + icon: si:traefikproxy + url: https://traefik.kaleschke.info + description: Reverse Proxy + category: core + hide: false + gitea: + name: Gitea + icon: si:gitea + url: https://git.kaleschke.info + description: GitOps Origin + category: core + hide: false + authelia: + name: Authelia + icon: si:authelia + url: https://auth.kaleschke.info + description: ForwardAuth + category: core + hide: false + vaultwarden: + name: Vaultwarden + icon: si:vaultwarden + url: https://vault.kaleschke.info + description: Password Vault + category: core + hide: false + postgresql17: + name: PostgreSQL 17 + icon: si:postgresql + description: Shared DB + category: core + hide: false + Redis: + name: Redis + icon: si:redis + description: Shared Cache + category: core + hide: false + adguard: + name: AdGuard + icon: si:adguard + url: http://192.168.178.58:8082 + description: DNS Filter + category: core + hide: false + unbound: + name: Unbound + icon: mdi:dns + description: Upstream Resolver + category: core + hide: false + Tailscale-Docker: + name: Tailscale + icon: si:tailscale + description: VPN + category: core + hide: false + ddns-updater: + name: DDNS Updater + icon: mdi:cloud-sync + description: Cloudflare DNS + category: core + hide: false + paperless-ngx: + name: Paperless-ngx + icon: sh:paperless-ngx + url: https://paperless.kaleschke.info + description: Dokumente + category: apps + hide: false + paperless-gpt: + name: Paperless-GPT + icon: mdi:robot + url: https://paperless-gpt.kaleschke.info + description: Dokumenten-KI + category: apps + hide: false + immich_server: + name: Immich + icon: si:immich + url: https://immich.kaleschke.info + description: Fotos und Videos + category: apps + id: immich + hide: false + immich_postgres: + name: DB + parent: immich + category: apps + hide: false + immich_redis: + name: Redis + parent: immich + category: apps + hide: false + immich_machine_learning: + name: ML + parent: immich + category: apps + hide: false + mealie: + name: Mealie + icon: sh:mealie + url: https://mealie.kaleschke.info + description: Rezepte + category: apps + id: mealie + hide: false + mealie-postgres: + name: DB + parent: mealie + category: apps + hide: false + nextcloud: + name: Nextcloud + icon: si:nextcloud + url: https://cloud.kaleschke.info + description: Dateien und Sync + category: apps + id: nextcloud + hide: false + nextcloud-postgres: + name: DB + parent: nextcloud + category: apps + hide: false + nextcloud-redis: + name: Redis + parent: nextcloud + category: apps + hide: false + mail-archiver: + name: Mail Archiver + icon: mdi:email-archive + url: https://mail.kaleschke.info + description: Mail-Archiv + category: apps + hide: false + ntfy: + name: ntfy + icon: si:ntfy + url: https://ntfy.kaleschke.info + description: Push Alerts + category: apps + hide: false + bentopdf: + name: BentoPDF + icon: mdi:file-pdf-box + url: https://pdf.kaleschke.info + description: PDF Tools + category: apps + hide: false + homepage: + name: Homepage + icon: sh:homepage + url: https://home.kaleschke.info + description: Bestehendes Start-Dashboard + category: ops + hide: false + glance: + name: Glance + icon: sh:glance + url: https://glance.kaleschke.info + description: Homelab Uebersicht + category: ops + hide: false + glance-docker-socket-proxy: + name: Glance Socket Proxy + icon: si:docker + description: Read-only Docker API + category: ops + hide: false + monitoring-grafana: + name: Monitoring Grafana + icon: si:grafana + url: https://monitoring.kaleschke.info + description: Observability UI + category: ops + id: monitoring + hide: false + monitoring-prometheus: + name: Prometheus + parent: monitoring + category: ops + hide: false + monitoring-loki: + name: Loki + parent: monitoring + category: ops + hide: false + monitoring-promtail: + name: Promtail + parent: monitoring + category: ops + hide: false + monitoring-alertmanager: + name: Alertmanager + parent: monitoring + category: ops + hide: false + monitoring-alertmanager-ntfy-bridge: + name: ntfy Bridge + parent: monitoring + category: ops + hide: false + monitoring-blackbox-exporter: + name: Blackbox + parent: monitoring + category: ops + hide: false + monitoring-node-exporter: + name: Node Exporter + parent: monitoring + category: ops + hide: false + monitoring-cadvisor: + name: cAdvisor + parent: monitoring + category: ops + hide: false + monitoring-influxdb3-core: + name: InfluxDB 3 + parent: monitoring + category: ops + hide: false + uptime-kuma: + name: Uptime Kuma + icon: sh:uptime-kuma + url: https://uptime.kaleschke.info + description: Uptime Checks + category: ops + hide: false + glances: + name: Glances + icon: sh:glances + url: https://glances.kaleschke.info + description: Host-Monitoring + category: ops + hide: false + scrutiny: + name: Scrutiny + icon: sh:scrutiny + url: https://scrutiny.kaleschke.info + description: SMART + category: ops + hide: false + speedtest-tracker: + name: Speedtest + icon: sh:speedtest-tracker + url: https://speedtest.kaleschke.info + description: WAN-Messung + category: ops + hide: false + filebrowser: + name: Filebrowser + icon: sh:filebrowser + url: https://files.kaleschke.info + description: Dateizugriff + category: ops + hide: false + code-server: + name: code-server + icon: sh:code-server + url: https://code.kaleschke.info + description: Web IDE + category: ops + hide: false + borg-ui: + name: Borg UI + icon: mdi:archive-sync + url: https://borg.kaleschke.info + description: Backup und Restore + category: ops + hide: false + hermes-dashboard: + name: Hermes + icon: mdi:shield-sparkles + url: https://hermes.kaleschke.info + description: Ops Agent UI + category: ops + id: hermes + hide: false + hermes-gateway: + name: Gateway + parent: hermes + category: ops + hide: false + komodo-core: + name: Komodo + icon: sh:komodo + url: https://komodo.kaleschke.info + description: Stack Manager + category: ops + id: komodo + hide: false + komodo-mongo: + name: Mongo + parent: komodo + category: ops + hide: false + komodo-periphery: + name: Periphery + parent: komodo + category: ops + hide: false + + - type: docker-containers + title: App Container + category: apps + hide-by-default: true + sock-path: tcp://glance-docker-socket-proxy:2375 + containers: *containers + + - type: docker-containers + title: Ops Container + category: ops + hide-by-default: true + sock-path: tcp://glance-docker-socket-proxy:2375 + containers: *containers + + - type: releases + title: Relevante Releases + cache: 6h + show-source-icon: true + collapse-after: 6 + repositories: + - glanceapp/glance + - traefik/traefik + - go-gitea/gitea + - authelia/authelia + - vaultwarden/server + - paperless-ngx/paperless-ngx + - immich-app/immich + - mealie-recipes/mealie + - nextcloud/server + - binwiederhier/ntfy + - louislam/uptime-kuma + - grafana/grafana + - prometheus/prometheus diff --git a/ops/glance/docker-compose.yml b/ops/glance/docker-compose.yml new file mode 100644 index 0000000..22be78b --- /dev/null +++ b/ops/glance/docker-compose.yml @@ -0,0 +1,54 @@ +services: + glance: + image: glanceapp/glance:v0.8.4 + container_name: glance + restart: unless-stopped + environment: + TZ: Europe/Berlin + GLANCE_ADGUARD_USERNAME: ${GLANCE_ADGUARD_USERNAME} + GLANCE_ADGUARD_PASSWORD: ${GLANCE_ADGUARD_PASSWORD} + volumes: + - ./config:/app/config:ro + networks: + - frontend_net + - glance_socket_net + depends_on: + - glance-docker-socket-proxy + labels: + - traefik.enable=true + - traefik.docker.network=frontend_net + - traefik.http.routers.glance.rule=Host(`glance.kaleschke.info`) + - traefik.http.routers.glance.entrypoints=websecure + - traefik.http.routers.glance.tls=true + - traefik.http.routers.glance.tls.certresolver=le + - traefik.http.routers.glance.middlewares=authelia@file,secure-headers@file + - traefik.http.services.glance.loadbalancer.server.port=8080 + security_opt: + - no-new-privileges:true + + glance-docker-socket-proxy: + image: tecnativa/docker-socket-proxy:0.4.2 + container_name: glance-docker-socket-proxy + restart: unless-stopped + environment: + LOG_LEVEL: warning + POST: "0" + CONTAINERS: "1" + INFO: "1" + VERSION: "1" + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + networks: + - glance_socket_net + expose: + - "2375" + security_opt: + - no-new-privileges:true + +networks: + frontend_net: + external: true + glance_socket_net: + name: glance_socket_net + internal: true + driver: bridge diff --git a/ops/glance/stack.env.example b/ops/glance/stack.env.example new file mode 100644 index 0000000..bb212db --- /dev/null +++ b/ops/glance/stack.env.example @@ -0,0 +1,2 @@ +GLANCE_ADGUARD_USERNAME=admin +GLANCE_ADGUARD_PASSWORD=change-me