From a7797fd02e9997fd14e567ef2e25a0921633b2f5 Mon Sep 17 00:00:00 2001 From: Micha Date: Mon, 25 May 2026 14:44:46 +0200 Subject: [PATCH] Consolidate dashboard on Glance --- HOMELAB_ARCHITECTURE_MASTER_V2.md | 9 +++-- README.md | 2 +- apps/homepage/docker-compose.yml | 39 ---------------------- docs/AI_CONTEXT.md | 4 +-- docs/DISASTER_RECOVERY.md | 11 +++--- docs/MIGRATION_LOG.md | 4 +++ docs/REPO_MAP.md | 6 +--- docs/RESTORE_MATRIX.md | 2 +- docs/SECRETS_MAP.md | 1 - docs/SERVICE_CATALOG.md | 3 +- env/domains.env.example | 1 - monitoring/prometheus/prometheus.yml | 2 +- ops/borg-ui/BACKUP_AUDIT_STATUS_QUO.md | 2 -- ops/borg-ui/BACKUP_SCOPE.md | 1 - ops/borg-ui/all-important-sources.txt | 1 - ops/code-server/docker-compose.yml | 1 - ops/glance/config/glance.yml | 16 --------- security/authelia/configuration.yml | 2 +- services/posture-check/cert-token-check.sh | 2 +- 19 files changed, 22 insertions(+), 87 deletions(-) delete mode 100644 apps/homepage/docker-compose.yml diff --git a/HOMELAB_ARCHITECTURE_MASTER_V2.md b/HOMELAB_ARCHITECTURE_MASTER_V2.md index 8a63533..83d78da 100644 --- a/HOMELAB_ARCHITECTURE_MASTER_V2.md +++ b/HOMELAB_ARCHITECTURE_MASTER_V2.md @@ -92,7 +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 | +| `glance_socket_net` | Compose-intern, `internal: true` | interner Zugriff von Glance auf den Docker-Socket-Proxy | umgesetzt | | `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 | @@ -106,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, glance, paperless-gpt, uptime-kuma, filebrowser, scrutiny, code-server, borg-ui, glances, speedtest, bentopdf, grafana) + ├── geschützte UIs mit Middleware (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,7 +159,6 @@ Diese Dienste sind **keine Public Apps**: - `scrutiny` — scrutiny.kaleschke.info (Middleware) - `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) @@ -245,7 +244,6 @@ Legende Status: | `unbound` | ✅ | `dns_net` | intern | Upstream-Resolver für AdGuard, isoliert | — | | `ddns-updater` | ✅ | `frontend_net` | intern | Cloudflare DNS API; bleibt in `frontend_net` | Dokumentierte Ausnahme | | `tailscale` | ✅ | `host` | VPN-Zugang | Git-Stack (`host-services/tailscale/`) | nutzt `NET_ADMIN`, `NET_RAW` und `/dev/net/tun` als dokumentierte VPN-Ausnahme | -| `homepage` | ✅ | `frontend_net` | Traefik + Middleware | geschuetztes Start-Dashboard via `home.kaleschke.info` | — | ### 7.2 Sicherheit / Identity @@ -298,7 +296,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 | +| `glance` | ✅ | `frontend_net`, `glance_socket_net` | Traefik + Middleware | einziges Homelab-Dashboard via `glance.kaleschke.info`; Docker-Status nur ueber internen Socket-Proxy | — | | `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` | — | @@ -335,6 +333,7 @@ Legende Status: | `beszel` | nicht dokumentiert | bereits entfernt; nicht mehr Teil des Zielbilds | | `beszel-agent` | nicht dokumentiert | bereits entfernt; nicht mehr Teil des Zielbilds | | `jellyfin` | 2026-05-25 | doppelter Medienserver neben Plex; Plex bleibt einziger Medienserver | +| `homepage` | 2026-05-25 | doppeltes Dashboard neben Glance; Glance bleibt einziges Homelab-Dashboard | --- diff --git a/README.md b/README.md index e64cc38..aeeee43 100644 --- a/README.md +++ b/README.md @@ -59,7 +59,7 @@ Bei Restore-, Host-Ausfall- oder Wiederanlauf-Fragen zusaetzlich: - Komodo ist der primaere und einzige produktive Stack-Manager. - Komodo bleibt bewusst bei nativer Authentifizierung; zentrale Traefik-Auth wird dort nicht pauschal vorgeschaltet. - Portainer CE ist abgeschaltet und kein Teil des aktiven Betriebs mehr. -- Homepage ist das aktive produktive Frontend / Start-Dashboard. +- Glance ist das aktive produktive Homelab-Dashboard. - Traefik `dynamic/` bleibt eine dokumentierte manuelle Host-Sync-Ausnahme ausserhalb des normalen Komodo-Deployments. - Mutable Image-Tags sind auf die aktuell laufenden Digests eingefroren; echte Versions-Upgrades erfolgen bewusst separat. - Disaster-Recovery und dienstspezifische Restore-Quellen sind in `docs/DISASTER_RECOVERY.md` und `docs/RESTORE_MATRIX.md` beschrieben. diff --git a/apps/homepage/docker-compose.yml b/apps/homepage/docker-compose.yml deleted file mode 100644 index b88a40e..0000000 --- a/apps/homepage/docker-compose.yml +++ /dev/null @@ -1,39 +0,0 @@ -services: - homepage: - image: ghcr.io/gethomepage/homepage:v1.12.3@sha256:cc84f2f5eb3c7734353701ccbaa24ed02dacb0d119114e50e4251e2005f3990a - container_name: homepage - restart: unless-stopped - environment: - HOMEPAGE_ALLOWED_HOSTS: home.kaleschke.info - HOMEPAGE_VAR_GITEA_TOKEN: ${HOMEPAGE_VAR_GITEA_TOKEN} - HOMEPAGE_VAR_ADGUARD_USERNAME: ${HOMEPAGE_VAR_ADGUARD_USERNAME} - HOMEPAGE_VAR_ADGUARD_PASSWORD: ${HOMEPAGE_VAR_ADGUARD_PASSWORD} - HOMEPAGE_VAR_KOMODO_API_KEY: ${HOMEPAGE_VAR_KOMODO_API_KEY} - HOMEPAGE_VAR_KOMODO_API_SECRET: ${HOMEPAGE_VAR_KOMODO_API_SECRET} - HOMEPAGE_VAR_SPEEDTEST_API_KEY: ${HOMEPAGE_VAR_SPEEDTEST_API_KEY} - HOMEPAGE_VAR_PAPERLESS_TOKEN: ${HOMEPAGE_VAR_PAPERLESS_TOKEN} - HOMEPAGE_VAR_FILEBROWSER_USERNAME: ${HOMEPAGE_VAR_FILEBROWSER_USERNAME} - HOMEPAGE_VAR_FILEBROWSER_PASSWORD: ${HOMEPAGE_VAR_FILEBROWSER_PASSWORD} - HOMEPAGE_VAR_IMMICH_API_KEY: ${HOMEPAGE_VAR_IMMICH_API_KEY} - HOMEPAGE_VAR_MEALIE_TOKEN: ${HOMEPAGE_VAR_MEALIE_TOKEN} - HOMEPAGE_VAR_UPTIME_SLUG: ${HOMEPAGE_VAR_UPTIME_SLUG} - volumes: - - /mnt/user/appdata/homepage:/app/config - - /mnt/user/appdata/homepage/images:/app/public/images - networks: - - frontend_net - labels: - - traefik.enable=true - - traefik.docker.network=frontend_net - - traefik.http.routers.homepage.rule=Host(`home.kaleschke.info`) - - traefik.http.routers.homepage.entrypoints=websecure - - traefik.http.routers.homepage.tls=true - - traefik.http.routers.homepage.tls.certresolver=le - - traefik.http.routers.homepage.middlewares=authelia@file,secure-headers@file - - traefik.http.services.homepage.loadbalancer.server.port=3000 - security_opt: - - no-new-privileges:true - -networks: - frontend_net: - external: true diff --git a/docs/AI_CONTEXT.md b/docs/AI_CONTEXT.md index 10ac19d..f00066b 100644 --- a/docs/AI_CONTEXT.md +++ b/docs/AI_CONTEXT.md @@ -51,7 +51,7 @@ Traefik ist der zentrale Web-Einstieg fuer HTTP(S). Admin-/Ops-UIs liegen entwed ### Apps -Wichtige Apps sind Paperless, Immich, Mealie, Mail Archiver, Nextcloud, ntfy, Vaultwarden und Gitea. Admin-/Ops-Tools sind u. a. Homepage, Komodo, Borg UI, Uptime Kuma, Filebrowser, code-server, Glances, Scrutiny, Speedtest, Grafana und Hermes Agent. +Wichtige Apps sind Paperless, Immich, Mealie, Mail Archiver, Nextcloud, ntfy, Vaultwarden und Gitea. Admin-/Ops-Tools sind u. a. Glance, Komodo, Borg UI, Uptime Kuma, Filebrowser, code-server, Glances, Scrutiny, Speedtest, Grafana und Hermes Agent. ### Hermes Agent — Architektur und Ops-Monitor @@ -188,7 +188,7 @@ KI-Agenten sollen konservativ arbeiten: keine indirekten Live-Aenderungen, keine - Authelia nutzt PostgreSQL, aber bewusst kein Redis-Session-Backend; Redis ist kein Authelia-Bootstrap-Blocker. - Authelia-Notifier ist SMTP; bei Auth-Aenderungen Host-Config backupen, `authelia validate-config` ausfuehren und erst danach neu starten. - `paperless-ngx` nutzt fuer DB/Redis bewusst Stack ENV statt `_FILE`. -- `homepage`, `glances` und `komodo-periphery` nutzen Docker-Socket-Mounts; Zugriff bewusst behandeln. +- `glance-docker-socket-proxy`, `glances` und `komodo-periphery` nutzen Docker-/Socket-Zugriff; Zugriff bewusst behandeln. - `borg-ui` und `filebrowser` haben breite Mounts; bei Hardening nicht ad hoc, sondern gezielt vorgehen. - `scrutiny` ist privilegiert und hat Device-Mounts. - `Plex-Media-Server` ist im Architekturziel als Host-Sonderfall dokumentiert, aber nicht als Repo-Compose-Stack enthalten. diff --git a/docs/DISASTER_RECOVERY.md b/docs/DISASTER_RECOVERY.md index 58be9cc..21311a6 100644 --- a/docs/DISASTER_RECOVERY.md +++ b/docs/DISASTER_RECOVERY.md @@ -165,7 +165,6 @@ Diese Werte sind vor dem Start der betroffenen Dienste zu pruefen bzw. wieder in - `KOMODO_JWT_SECRET` - `KOMODO_MONGO_PASSWORD` - `KOMODO_PERIPHERY_PASSKEY` -- relevante `HOMEPAGE_VAR_*` - `APP_KEY` und `ADMIN_PASSWORD` fuer `speedtest-tracker` ### 6.3 Rechte @@ -266,10 +265,10 @@ Ziel: ### Stufe 5 - Restliche Apps und Ops -15. `apps/homepage/` -16. `apps/ntfy/` -17. `apps/paperless-gpt/` -18. `apps/bentopdf/` +15. `apps/ntfy/` +16. `apps/paperless-gpt/` +17. `apps/bentopdf/` +18. `ops/glance/` 19. `ops/uptime-kuma/` 20. `ops/borg-ui/` 21. `ops/filebrowser/` @@ -313,7 +312,7 @@ Ziel: - Borg UI startet und kennt sein Repo noch - aktuelle Dump-Artefakte sind vorhanden -- Uptime Kuma / Homepage / ntfy sind wieder da +- Uptime Kuma / Glance / ntfy sind wieder da - Hermes Gateway und Dashboard starten; `hermes.kaleschke.info` leitet anonym zu Authelia weiter --- diff --git a/docs/MIGRATION_LOG.md b/docs/MIGRATION_LOG.md index 9abe1a8..28da040 100644 --- a/docs/MIGRATION_LOG.md +++ b/docs/MIGRATION_LOG.md @@ -20,6 +20,10 @@ Dieses Dokument ist nur noch ein historischer Verlauf. Der aktuelle operative Ab - Erwartete Host-Secret-Datei `/mnt/user/appdata/secrets/borg_repo_passphrase.txt` aus der bestehenden Borg-UI-Repo-Konfiguration erzeugt, mit `root:root` und Modus `600` gesichert und per `borg info` gegen das Hetzner-Borg-Repo verifiziert. Analoge Offline-Hinterlegung bleibt bewusste Operator-Aufgabe; Secret-Wert wurde nicht ausgegeben oder dokumentiert. +### 2026-05-25 - Dashboard auf Glance konsolidiert + +- Glance bleibt das einzige Homelab-Dashboard; Homepage wurde aus dem Zielbild entfernt. Authelia-Default-Redirect, Monitoring-Blackbox-Ziele, Cert-Check-Domains und Glance-Konfiguration zeigen nicht mehr auf `home.kaleschke.info`; Homepage-Appdata wird live nach `_archive` verschoben. + ### 2026-05-25 - Jellyfin aus Zielbild entfernt - Plex-Smoke-Test erfolgreich (`/identity` HTTP 200, Container healthy, `/data/movies` und `/photos` sichtbar). Jellyfin wurde repo-seitig entfernt, aus Authelia-Baseline und Zielbild-Doku ausgetragen, via Komodo-API gestoppt/destroyed, der Komodo-Stack geloescht und Appdata nach `/mnt/user/appdata/_archive/jellyfin-removed-2026-05-25` verschoben; Plex bleibt einziger Medienserver. diff --git a/docs/REPO_MAP.md b/docs/REPO_MAP.md index 12e6170..9eec4ce 100644 --- a/docs/REPO_MAP.md +++ b/docs/REPO_MAP.md @@ -73,7 +73,6 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | Stack | Compose | Services / Images | Traefik Hosts | Networks | Ports | Abhaengigkeiten | |---|---|---|---|---|---|---| | BentoPDF | `apps/bentopdf/docker-compose.yml` | `bentopdf` -> `bentopdfteam/bentopdf:2.8.4` | `pdf.kaleschke.info` | `frontend_net` | keine | Traefik + Authelia; COOP/COEP Middleware | -| Homepage | `apps/homepage/docker-compose.yml` | `homepage` -> `ghcr.io/gethomepage/homepage:v1.12.3@sha256:...` | `home.kaleschke.info` | `frontend_net` | keine | Docker-Socket read-only fuer Widgets; viele `HOMEPAGE_VAR_*` Env-Keys | | Immich | `apps/immich/docker-compose.yml` | `immich-server`, `immich-machine-learning`, `database`, `redis` | `immich.kaleschke.info` | `frontend_net`, `immich_default` | keine | `immich-server` depends on `database`, `redis` | | Mail Archiver | `apps/mail-archiver/docker-compose.yml` | `mail-archiver` -> `s1t5/mailarchiver@sha256:...` | `mail.kaleschke.info` | `frontend_net`, `backend_net` | keine | shared PostgreSQL via env connection string; Internet fuer IMAP | | Mealie | `apps/mealie/docker-compose.yml` | `mealie`, `mealie-postgres` | `mealie.kaleschke.info` | `frontend_net`, `mealie_internal` | keine | eigene PostgreSQL im internen Netz | @@ -140,7 +139,6 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | `glances.kaleschke.info` | Glances | Traefik + Authelia | | `grafana.kaleschke.info` | Grafana | Traefik + Authelia | | `hermes.kaleschke.info` | Hermes Dashboard | Traefik + Authelia | -| `home.kaleschke.info` | Homepage | Traefik + Authelia; faellt in Authelia unter die 1FA-Wildcard-Regel | | `immich.kaleschke.info` | Immich | Traefik, native App-Auth | | `komodo.kaleschke.info` | Komodo | Traefik, native Komodo-Auth; keine pauschale ForwardAuth | | `mail.kaleschke.info` | Mail Archiver | Traefik + Authelia + App-Auth | @@ -191,13 +189,12 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | Mail Archiver | `/mnt/user/appdata/mailarchiver/data-protection-keys` | | Nextcloud | `/mnt/user/appdata/nextcloud/html`, `/mnt/user/documents/nextcloud-data`, `/mnt/user/appdata/nextcloud/postgres`, `/mnt/user/appdata/nextcloud/redis` | | Plex | `/mnt/user/appdata/plex/config`, `/mnt/user/appdata/plex/transcode`, `/mnt/user/media`, `/mnt/user/photos` | -| Homepage | `/mnt/user/appdata/homepage`, `/mnt/user/appdata/homepage/images`, Docker socket read-only | | ntfy | `/mnt/user/appdata/ntfy` | | Paperless-GPT | `/mnt/user/appdata/paperless-gpt/data`, `/mnt/user/appdata/paperless-gpt/prompts` | | AdGuard | `/mnt/user/appdata/adguard/work`, `/mnt/user/appdata/adguard/conf` | | Tailscale | `/mnt/user/appdata/tailscale` | | 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 | +| code-server | `/mnt/user/appdata/code-server`, `/mnt/user/services/dev` | | 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` | @@ -222,7 +219,6 @@ Secret-Werte werden hier nicht dokumentiert. Aufgefuehrt werden nur Variablennam | Paperless | `PAPERLESS_DBPASS`, `PAPERLESS_REDIS` als Komodo Stack ENV | | 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_IMMICH_API_KEY`, `GLANCE_ADGUARD_USERNAME`, `GLANCE_ADGUARD_PASSWORD`, `GLANCE_SPEEDTEST_API_KEY` als Stack ENV fuer Community-/Live-Widgets | | Speedtest | `APP_KEY`, `ADMIN_PASSWORD` als Stack ENV | | Nextcloud | Admin User, Admin Password, Postgres Password via Secret-Dateien | diff --git a/docs/RESTORE_MATRIX.md b/docs/RESTORE_MATRIX.md index 6a2f138..d86c7dc 100644 --- a/docs/RESTORE_MATRIX.md +++ b/docs/RESTORE_MATRIX.md @@ -48,7 +48,7 @@ Sie ist die fachliche Ergaenzung zu `docs/DISASTER_RECOVERY.md`. | Immich | Borg + Dump | `/mnt/user/photos/immich`, `/mnt/user/photos/family_archive` | `immich.dump` | `IMMICH_DB_PASSWORD`, `immich_postgres_password.txt` | `immich_postgres`, `immich_redis`, Traefik | UI startet, Medienbibliothek sichtbar | | Mail-Archiver | Borg + Shared Dump | `/mnt/user/appdata/mailarchiver/data-protection-keys` | `postgresql17-mailarchiver.dump` | `MAILARCHIVER_DB_CONNECTION`, `MAILARCHIVER_AUTH_PASSWORD` | PostgreSQL 17, Traefik, Authelia | Authelia-Weiterleitung greift; nach Login startet die Web-UI und das Archiv laesst sich oeffnen | | Nextcloud | Borg + Dump | `/mnt/user/appdata/nextcloud/html`, `/mnt/user/documents/nextcloud-data` | `nextcloud.dump` | `nextcloud_admin_user.txt`, `nextcloud_admin_password.txt`, `nextcloud_postgres_password.txt` | `nextcloud-postgres`, `nextcloud-redis`, Traefik | Web-UI startet, Login funktioniert, Dateien sichtbar | -| Homepage | Borg / Share | `/mnt/user/appdata/homepage` | keine | `HOMEPAGE_VAR_*` | Traefik, Authelia | Dashboard startet, Widgets laden | +| Glance | Git / Borg-Repo | Repo-Konfiguration unter `ops/glance/config/glance.yml`; keine kritische Datenpersistenz | keine | `GLANCE_IMMICH_API_KEY`, `GLANCE_ADGUARD_USERNAME`, `GLANCE_ADGUARD_PASSWORD`, `GLANCE_SPEEDTEST_API_KEY` | Traefik, Authelia, optional interne API-Ziele | Dashboard startet, Widgets laden, Docker-Status laeuft nur ueber `glance-docker-socket-proxy` | | ntfy | Borg / Share | `/mnt/user/appdata/ntfy` | keine | keine besonderen Secret-Dateien dokumentiert | Traefik | UI und Push-Endpunkt erreichbar | | Paperless-GPT | Borg / Share | `/mnt/user/appdata/paperless-gpt` | keine eigene DB | `PAPERLESS_API_TOKEN` | Traefik, Paperless | UI startet, Konfiguration vorhanden | diff --git a/docs/SECRETS_MAP.md b/docs/SECRETS_MAP.md index 7fe1867..d090888 100644 --- a/docs/SECRETS_MAP.md +++ b/docs/SECRETS_MAP.md @@ -39,7 +39,6 @@ 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 | | Gitea Push Mirror | GitHub fine-grained PAT fuer `michaelkaleschke-spec/homelab-infra` | Gitea Repository Mirror Settings, persistent in `/mnt/user/services/gitea/data`; kein Datei-Secret im Repo | aktiv | -| Homepage | API Tokens / Zugangsdaten | Stack ENV `HOMEPAGE_VAR_*` | aktiv | | Glance | Community Widget API Tokens | Stack ENV `${GLANCE_IMMICH_API_KEY}`, `${GLANCE_ADGUARD_USERNAME}`, `${GLANCE_ADGUARD_PASSWORD}`, `${GLANCE_SPEEDTEST_API_KEY}` | aktiv | | 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 | diff --git a/docs/SERVICE_CATALOG.md b/docs/SERVICE_CATALOG.md index 1c1995e..038be2e 100644 --- a/docs/SERVICE_CATALOG.md +++ b/docs/SERVICE_CATALOG.md @@ -55,8 +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, interne HTTP-Checks, Immich API, AdGuard API, Speedtest API, interner Docker-Socket-Proxy | Repo-Konfiguration; keine kritische Persistenz | Tier 3, rebuildbar | ja + Authelia | Zeigt aktive Dienste, Immich-Community-Widget, Internet-/DNS-/VPN-Monitore, AdGuard-DNS-Stats, Speedtest-Livewerte, Docker-Containergruppen, Server-Stats, Zeitfortschritt, Bookmarks und eine Infrastruktur-Seite; Docker-API nur ueber `glance-docker-socket-proxy` auf internem Netz | +| `glance` | einziges Homelab-Uebersichts-/Status-Dashboard | `ops/glance/docker-compose.yml`, `ops/glance/config/glance.yml` | `https://glance.kaleschke.info` | Traefik + Authelia, interne HTTP-Checks, Immich API, AdGuard API, Speedtest API, interner Docker-Socket-Proxy | Repo-Konfiguration; keine kritische Persistenz | Tier 3, rebuildbar | ja + Authelia | Zeigt aktive Dienste, Immich-Community-Widget, Internet-/DNS-/VPN-Monitore, AdGuard-DNS-Stats, Speedtest-Livewerte, Docker-Containergruppen, Server-Stats, Zeitfortschritt, Bookmarks und eine Infrastruktur-Seite; 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 19343d8..18a4476 100644 --- a/env/domains.env.example +++ b/env/domains.env.example @@ -1,5 +1,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/monitoring/prometheus/prometheus.yml b/monitoring/prometheus/prometheus.yml index 44070f3..77aa92e 100644 --- a/monitoring/prometheus/prometheus.yml +++ b/monitoring/prometheus/prometheus.yml @@ -48,7 +48,7 @@ scrape_configs: - https://git.kaleschke.info - https://komodo.kaleschke.info - https://uptime.kaleschke.info - - https://home.kaleschke.info + - https://glance.kaleschke.info - https://paperless.kaleschke.info - https://paperless-gpt.kaleschke.info - https://immich.kaleschke.info diff --git a/ops/borg-ui/BACKUP_AUDIT_STATUS_QUO.md b/ops/borg-ui/BACKUP_AUDIT_STATUS_QUO.md index 5b0eb0b..26069d7 100644 --- a/ops/borg-ui/BACKUP_AUDIT_STATUS_QUO.md +++ b/ops/borg-ui/BACKUP_AUDIT_STATUS_QUO.md @@ -57,7 +57,6 @@ Der technische Scope für `critical_infra` ist in `all-important-sources.txt` fe - `/local/secrets` - `/local/appdata/authelia/config` - `/local/appdata/traefik` -- `/local/appdata/homepage` - `/local/appdata/ntfy` - `/local/appdata/paperless-gpt` - `/local/appdata/tailscale` @@ -78,7 +77,6 @@ Der technische Scope für `critical_infra` ist in `all-important-sources.txt` fe | Mail-archiver | DataProtection-Keys | Shared PostgreSQL Dump vorhanden | Ja | gut | | Authelia | Config + Secrets | Shared PostgreSQL Dump vorgesehen / erzeugt | Ja | gut | | Traefik | dynamische Config + Let's Encrypt | keine separate DB | Ja | gut | -| Homepage | Config + Bilder | keine separate DB | Ja | gut | | ntfy | Datei-Daten | keine separate DB | Ja | gut | | Paperless-GPT | lokale Daten / Prompts | keine separate DB | Ja | gut | | Tailscale | State-Verzeichnis | keine separate DB | Ja | gut | diff --git a/ops/borg-ui/BACKUP_SCOPE.md b/ops/borg-ui/BACKUP_SCOPE.md index db87b65..df3595a 100644 --- a/ops/borg-ui/BACKUP_SCOPE.md +++ b/ops/borg-ui/BACKUP_SCOPE.md @@ -34,7 +34,6 @@ The inclusion of `/local/secrets` is intentional: Borg is expected to cover disa | Mail-archiver | shared Postgres dump + data protection keys | `/local/borg-dumps`, `/local/appdata/mailarchiver/data-protection-keys` | | Authelia | shared Postgres dump + config + secrets | `/local/borg-dumps`, `/local/appdata/authelia/config`, `/local/secrets` | | Traefik | file data | `/local/appdata/traefik` | -| Homepage | file data | `/local/appdata/homepage` | | ntfy | file data | `/local/appdata/ntfy` | | Paperless-GPT | file data | `/local/appdata/paperless-gpt` | | Tailscale | file data | `/local/appdata/tailscale` | diff --git a/ops/borg-ui/all-important-sources.txt b/ops/borg-ui/all-important-sources.txt index 70ac8df..413a06c 100644 --- a/ops/borg-ui/all-important-sources.txt +++ b/ops/borg-ui/all-important-sources.txt @@ -12,7 +12,6 @@ /local/secrets /local/appdata/authelia/config /local/appdata/traefik -/local/appdata/homepage /local/appdata/ntfy /local/appdata/paperless-gpt /local/appdata/tailscale diff --git a/ops/code-server/docker-compose.yml b/ops/code-server/docker-compose.yml index 5c66400..64e1abb 100644 --- a/ops/code-server/docker-compose.yml +++ b/ops/code-server/docker-compose.yml @@ -18,7 +18,6 @@ services: volumes: - /mnt/user/appdata/code-server:/config - /mnt/user/services/dev:/workspace - - /mnt/user/appdata/homepage:/prod/homepage - /mnt/user/appdata/code-server/secrets/password:/run/secrets/password:ro networks: diff --git a/ops/glance/config/glance.yml b/ops/glance/config/glance.yml index 6731843..188b473 100644 --- a/ops/glance/config/glance.yml +++ b/ops/glance/config/glance.yml @@ -127,9 +127,6 @@ pages: - title: Core color: 212 100 50 links: - - title: Home - url: https://home.kaleschke.info - icon: sh:homepage - title: Komodo url: https://komodo.kaleschke.info icon: sh:komodo @@ -299,12 +296,6 @@ pages: icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glance.svg timeout: 5s alt-status-codes: [200, 302, 401, 403] - - title: Homepage - url: https://home.kaleschke.info - check-url: http://homepage:3000 - icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/homepage.png - timeout: 5s - alt-status-codes: [200, 302, 401, 403] - title: Monitoring Grafana url: https://monitoring.kaleschke.info check-url: http://monitoring-grafana:3000/api/health @@ -616,13 +607,6 @@ pages: description: PDF Tools category: apps hide: false - homepage: - name: Homepage - icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/png/homepage.png - url: https://home.kaleschke.info - description: Bestehendes Start-Dashboard - category: ops - hide: false glance: name: Glance icon: https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/glance.svg diff --git a/security/authelia/configuration.yml b/security/authelia/configuration.yml index 88b3cc8..50749e0 100644 --- a/security/authelia/configuration.yml +++ b/security/authelia/configuration.yml @@ -62,7 +62,7 @@ session: cookies: - domain: kaleschke.info authelia_url: https://auth.kaleschke.info - default_redirection_url: https://home.kaleschke.info + default_redirection_url: https://glance.kaleschke.info regulation: max_retries: 3 diff --git a/services/posture-check/cert-token-check.sh b/services/posture-check/cert-token-check.sh index 128f77c..a49e942 100755 --- a/services/posture-check/cert-token-check.sh +++ b/services/posture-check/cert-token-check.sh @@ -9,7 +9,7 @@ SEND_NTFY="${SEND_NTFY:-1}" CLOUDFLARE_TOKEN_FILE="${CLOUDFLARE_TOKEN_FILE:-/mnt/user/appdata/traefik/secrets/cloudflare_dns_api_token}" WARN_DAYS="${WARN_DAYS:-14}" CRITICAL_DAYS="${CRITICAL_DAYS:-7}" -DOMAINS="${DOMAINS:-traefik.kaleschke.info auth.kaleschke.info vault.kaleschke.info git.kaleschke.info cloud.kaleschke.info home.kaleschke.info borg.kaleschke.info monitoring.kaleschke.info ntfy.kaleschke.info}" +DOMAINS="${DOMAINS:-traefik.kaleschke.info auth.kaleschke.info vault.kaleschke.info git.kaleschke.info cloud.kaleschke.info glance.kaleschke.info borg.kaleschke.info monitoring.kaleschke.info ntfy.kaleschke.info}" TMP_DIR="${TMP_DIR:-/tmp/kallilab-cert-token-check}" mkdir -p "$TMP_DIR"