From fce9c1d5fb7f6644f22f8ac274a7079e71207136 Mon Sep 17 00:00:00 2001 From: Micha Date: Sun, 29 Mar 2026 09:14:33 +0000 Subject: [PATCH] HOMELAB_ARCHITECTURE_MASTER_V2.md aktualisiert --- HOMELAB_ARCHITECTURE_MASTER_V2.md | 27 ++++++++++++++++----------- 1 file changed, 16 insertions(+), 11 deletions(-) diff --git a/HOMELAB_ARCHITECTURE_MASTER_V2.md b/HOMELAB_ARCHITECTURE_MASTER_V2.md index bd25ed6..c4f269b 100644 --- a/HOMELAB_ARCHITECTURE_MASTER_V2.md +++ b/HOMELAB_ARCHITECTURE_MASTER_V2.md @@ -3,7 +3,7 @@ > **Single Source of Truth** für Docker-Netzwerkarchitektur, Sicherheitsregeln, Zielbild und Migration des Kallilabcore-Homelabs. > **Arbeitsregel für KI-Assistenten:** Dieses Dokument immer zuerst lesen, bevor Fragen zu Containern, Netzwerken, Traefik, Tailscale, Migration oder Security beantwortet werden. -**Stand:** 2026-03-28 | **Aktueller Sprint:** 5 (Plex-Migration + PortainerCE abschalten) — Sprints 1–4 abgeschlossen +**Stand:** 2026-03-29 | **Aktueller Sprint:** 5 (Plex-Migration + PortainerCE abschalten) — Sprints 1–4 abgeschlossen --- @@ -88,11 +88,10 @@ Jeder produktive Container nutzt `restart: unless-stopped`, außer eine Ausnahme | `backend_net` | bridge, `internal: true` | interne App-/DB-/Cache-Kommunikation | Standard | | `dns_net` | bridge | Resolver-Schicht: AdGuard Home + Unbound | bleibt | | `mealie_mealie_internal` | bridge, `internal: true` | internes Netz nur für `mealie` + `mealie-postgres` | ✅ umgesetzt | -| `immich_default` | Compose-intern | internes Immich-Netz | ⏳ `internal: true` noch setzen | +| `immich_default` | Compose-intern, `internal: true` | internes Immich-Netz | ✅ umgesetzt | | `host` | host | nur für echte Sonderfälle | begründet | ### 3.2 Finales Diagramm (vereinfacht) - ```text Internet │ @@ -116,7 +115,7 @@ dns_net App-interne Netze ├── mealie_mealie_internal (internal: true) ✅ -└── immich_default (internal: true ausstehend) ⏳ +└── immich_default (internal: true) ✅ Host-Sonderfälle ├── tailscale @@ -240,7 +239,7 @@ Legende Status: | `postgresql17` | ✅ | `backend_net` | intern | kein Host-Port, `POSTGRES_PASSWORD_FILE` | — | | `Redis` | ✅ | `backend_net` | intern | intern-only Cache | optional named volume | | `mealie-postgres` | ✅ | `mealie_mealie_internal` | intern | isoliert, nie `frontend_net` | — | -| `immich_postgres` | ✅ | `immich_default` | intern | intern-only | `immich_default` → `internal: true` ausstehend | +| `immich_postgres` | ✅ | `immich_default` | intern | intern-only | — | | `immich_redis` | ⏳ | `immich_default` | intern | intern-only | anonymes Volume → named volume | ### 7.4 Öffentliche Apps @@ -252,7 +251,7 @@ Legende Status: | `mealie` | ✅ | `frontend_net`, `mealie_mealie_internal` | Traefik | sauber getrennte App/DB-Struktur | — | | `ntfy` | ✅ | `frontend_net` | Traefik | aktiv via `ntfy.kaleschke.info`, Git-Stack | — | | `gitea` | ✅ | `frontend_net` | Traefik + SSH-Port 222 | Web via Traefik, SSH direkt gebunden | — | -| `immich_server` | ✅ | `immich_default`, `frontend_net` | Traefik | aktiv via `immich.kaleschke.info` | `immich_default` → `internal: true` ausstehend | +| `immich_server` | ✅ | `immich_default`, `frontend_net` | Traefik | aktiv via `immich.kaleschke.info` | — | | `immich_machine_learning` | ✅ | `immich_default` | intern | bleibt intern | — | ### 7.5 Admin / Operations @@ -304,7 +303,6 @@ Legende Status: ## 8. Traefik-Label-Standard Jeder Dienst mit Traefik-Routing nutzt dieses Muster: - ```yaml labels: - traefik.enable=true @@ -334,7 +332,7 @@ labels: ## 9. Migrationsstrategie (Blöcke A–F) -**Letzte Aktualisierung:** 2026-03-28 +**Letzte Aktualisierung:** 2026-03-29 ### Block A — Quick Wins ✅ ABGESCHLOSSEN ```text @@ -403,7 +401,7 @@ labels: ### Block F — Feinschliff / Hardening ```text -[ ] immich_default - internal: true setzen (kurzer Downtime nötig) +[x] immich_default - internal: true gesetzt (2026-03-29) [ ] immich_redis - anonymes Volume → named volume in Compose [ ] immich_server - anonymes Volume prüfen und benennen [ ] backrest - /mnt/user doppelt gemountet (ro + rw) - rw-Mount auf konkrete Pfade einschränken @@ -450,7 +448,7 @@ Dieses Projekt wird **blockweise** umgesetzt, nicht wild containerweise. | Sprint 3 | `mealie` / `mealie-postgres` + `mail-archiver` | ✅ Abgeschlossen | | Sprint 4 | Frontend-Stack (`paperless`, `PortainerCE`, `Dozzle`, `dashdot`, `scrutiny`, `filebrowser`, `gitea`, `UptimeKuma`, `ntfy`, `beszel`) + Traefik File-Provider Bereinigung + Komodo Einführung + AdGuard Home Migration + Pi-hole Ablösung | ✅ Abgeschlossen | | Sprint 5 | `Plex-Media-Server` Compose-Migration + `PortainerCE` abschalten | 🔄 In Bearbeitung | -| Sprint 6 | Hardening / Secrets / Volumes / Sonderfälle (`immich_default`, Volumes, Mounts, AdGuard Traefik) | ⏳ Offen | +| Sprint 6 | Hardening / Secrets / Volumes / Sonderfälle (`immich_default` ✅, Volumes, Mounts, AdGuard Traefik) | ⏳ Offen | ### 11.3 Regel für jede Änderung 1. Zielbild in diesem Dokument prüfen @@ -527,6 +525,13 @@ Update-Monitoring kann über Komodo's eingebaute Update-Notifications abgedeckt - `NTFY_UPSTREAM_BASE_URL: https://ntfy.sh` für mobile Push-Notifications - `NTFY_BEHIND_PROXY: true` korrekt gesetzt +### immich_default — internal: true gesetzt (2026-03-29) +`immich_default` wurde von `external: true` auf ein Compose-verwaltetes internes Netz umgestellt: +- **Vorher:** `external: true` (manuell erstellt, falsche Labels `com.docker.compose.network=default`) +- **Nachher:** Compose-managed, `internal: true`, `driver: bridge`, korrekte Labels +- Durchgeführt via: manuelles `docker stop` der Containers → `docker network rm immich_default` → Komodo Redeploy +- Ergebnis: alle Immich-Container (`immich_postgres`, `immich_redis`, `immich_machine_learning`) sind jetzt vom Internet isoliert; nur `immich_server` hat zusätzlich `frontend_net` für Traefik + ### Secrets in Komodo / Portainer Stacks Host-Pfade in `env_file` (z.B. `/mnt/...`) sind in Git-Stacks nicht verfügbar. Standardlösung: Stack Environment Variables + `${VARIABLE_NAME}` in der Compose. @@ -560,4 +565,4 @@ Beispiel (Mealie): `mealie` → `frontend_net` + `mealie_mealie_internal`, `meal Dieses Dokument ist keine lose Notiz, sondern das **operative Masterdokument** für die Docker- und Zugriffsarchitektur des Homelabs. **Zielbild in einem Satz:** -`frontend_net` für alle Web-UIs und Dienste mit Internetbedarf, `backend_net` für interne Backends, app-interne Netze nur wenn technisch nötig, Tailscale für Remote-Admin-Zugriff, Traefik als einziger Web-Einstieg (100% Docker-Labels), Komodo als GitOps-Stack-Manager, AdGuard Home + Unbound für DNS, keine produktiven `bridge`-Container mehr. +`frontend_net` für alle Web-UIs und Dienste mit Internetbedarf, `backend_net` für interne Backends, app-interne Netze nur wenn technisch nötig, Tailscale für Remote-Admin-Zugriff, Traefik als einziger Web-Einstieg (100% Docker-Labels), Komodo als GitOps-Stack-Manager, AdGuard Home + Unbound für DNS, keine produktiven `bridge`-Container mehr. \ No newline at end of file