diff --git a/HOMELAB_ARCHITECTURE_MASTER_V2.md b/HOMELAB_ARCHITECTURE_MASTER_V2.md index 6a0cfc1..bf107a7 100644 --- a/HOMELAB_ARCHITECTURE_MASTER_V2.md +++ b/HOMELAB_ARCHITECTURE_MASTER_V2.md @@ -548,6 +548,90 @@ Damit ist sofort klar: - welche Ausnahmen bewusst dokumentiert sind --- +## ⚠️ Erweiterte Learnings (Portainer + GitOps) + +### Secrets in Portainer Git-Stacks + +Bei Deployments über Portainer mit Git-Repositories gilt: + +* Host-Pfade in `env_file` (z. B. `/mnt/...`) sind **nicht verfügbar** +* Portainer-Container hat keinen Zugriff auf diese Pfade + +#### Konsequenz + +* `env_file` ist für Secrets ungeeignet in diesem Setup + +#### Standardlösung + +* Verwendung von **Portainer Environment Variables** +* Compose nutzt Variablen: + + * `POSTGRES_PASSWORD: ${VARIABLE_NAME}` + +👉 Ergebnis: + +* keine Secrets im Git +* funktionierender Git-Deployment-Flow + +--- + +### Umgang mit `_FILE` Variablen + +Nicht alle Container unterstützen `_FILE`-basierte Secrets. + +#### Übersicht + +* Vaultwarden → unterstützt `_FILE` +* PostgreSQL → unterstützt `_FILE` +* Mealie → unterstützt `_FILE` **nicht** + +#### Regel + +* Wenn `_FILE` nicht unterstützt wird: + → Nutzung von Environment Variables über Portainer + +--- + +### Netzwerk-Standard für Apps mit Datenbanken + +#### Architektur-Regel + +* App → `frontend_net` + internes Netzwerk +* Datenbank → nur internes Netzwerk (`internal: true`) + +#### Beispiel (Mealie) + +* `mealie` → `frontend_net` + `mealie_internal` +* `mealie-postgres` → nur `mealie_internal` + +👉 Vorteil: + +* Datenbank vollständig isoliert +* keine externe Erreichbarkeit möglich + +--- + +### Migrations-Standard für kritische Services + +Bei Änderungen an Datenbanken oder Core-Services: + +#### Vorgehen + +1. Backup erstellen (`pg_dumpall`) +2. aktuellen Zustand sichern (`docker inspect`) +3. neue Compose in Git definieren +4. Container stoppen & entfernen +5. neuen Stack deployen +6. Funktion prüfen (Logs + abhängige Services) + +#### Grundsatz + +* Daten liegen im Volume → bleiben erhalten +* Container sind austauschbar + +👉 Ziel: + +* risikoarme Migration ohne Datenverlust ## Schlussformel