6.7 KiB
Workflow — GitOps / No-Drift Regeln
Dieses Dokument definiert den verbindlichen Arbeitsablauf für Änderungen an der Homelab-Infrastruktur.
Ziel
Es darf keine dauerhafte Abweichung zwischen:
- Git-Repository
- Komodo-Stacks
- laufenden Docker-Containern
- Host-Konfiguration
geben.
Grundsatz:
Git ist die einzige Quelle der Wahrheit.
Die wichtigste Regel
Änderungen werden immer in dieser Reihenfolge durchgeführt:
- Änderung im Repository (Gitea)
- Commit
- Push
- Deploy über Komodo (GitOps-Sync)
- Test
- Dokumentation aktualisieren
Verbotene Arbeitsweise
Folgende Dinge sind grundsätzlich zu vermeiden:
- Änderungen direkt im Komodo- oder Portainer-Web-Editor
- Änderungen direkt per
docker run - Änderungen an laufenden Containern ohne Repo-Anpassung
- spontane Host-Hotfixes ohne Nachdokumentation
- Secrets im Git-Repository
- mehrere Services gleichzeitig migrieren
Erlaubte Arbeitsweise
Erlaubt und gewünscht sind:
- Änderungen an Compose-Dateien im Git-Repo
- Commit + Push vor jedem Deploy
- Komodo als primäres Deployment-Werkzeug (GitOps)
- Portainer CE nur noch als Legacy-UI (wird in Sprint 5 abgeschaltet)
- Host-Hotfixes nur im Ausnahmefall — sofortige Nachpflege im Repo
No-Drift-Prinzip
Definition
Configuration Drift liegt vor, wenn der reale Zustand vom Git-Zustand abweicht.
Beispiele:
- laufender Container wurde manuell verändert
- Komodo-Stack entspricht nicht mehr dem Repo
- Host-Dateien wurden angepasst, aber nicht dokumentiert
- Traefik dynamic config wurde lokal geändert, aber Git weiß nichts davon
Regel
Wenn Drift erkannt wird, gilt:
- Drift nicht ignorieren
- Drift sofort benennen
- entscheiden:
- Repo an Realität anpassen oder
- Realität an Repo zurückführen
- erst danach weiterarbeiten
Ausnahmefall: Hotfix auf dem Host
Manchmal ist ein Live-Hotfix nötig. Das ist erlaubt, aber nur unter diesen Bedingungen:
- Hotfix nur wenn der Dienst sonst nicht funktioniert
- Änderung sofort dokumentieren
- Änderung danach ins Git-Modell überführen
- kein stiller Dauerzustand
Pflicht bei Hotfixes
- Was wurde geändert?
- Wo wurde es geändert?
- Warum war es nötig?
- Muss diese Änderung ins Repo übernommen werden?
- Ist ein Rollback dokumentiert?
Komodo-Regeln
Komodo ist in diesem Setup:
- primäres Deployment-Werkzeug (GitOps)
- Stack-Manager (sync aus Gitea)
- Monitoring-/Status-Werkzeug
Deshalb gilt
- Stack-Konfiguration nur im Repository anpassen
- Komodo sync auslösen statt manuell deployen
- Wenn Komodo und Git voneinander abweichen, gewinnt Git
⚠️ Ausnahme: Traefik Dynamic Config
Diese Dateien werden von Komodo NICHT automatisch deployt.
Komodo deployt ausschließlich docker-compose.yml-Dateien. Die Traefik-Konfigurationsdateien unter traefik/dynamic/ im Git-Repo werden nicht automatisch auf den Host übertragen.
Betroffene Dateien
| Git-Pfad | Host-Pfad (NAS) |
|---|---|
traefik/dynamic/middlewares.yml |
/mnt/user/appdata/traefik/dynamic/middlewares.yml |
traefik/dynamic/tls.yml |
/mnt/user/appdata/traefik/dynamic/tls.yml |
traefik/dynamic/dashboards.yml |
/mnt/user/appdata/traefik/dynamic/dashboards.yml |
Pflicht-Workflow bei Änderungen an Traefik Dynamic Config
- Datei im Git-Repo (
traefik/dynamic/) ändern - Commit + Push
- Manuell auf den Host kopieren:
cp /mnt/user/homelab-infra/traefik/dynamic/middlewares.yml \
/mnt/user/appdata/traefik/dynamic/middlewares.yml
- Traefik lädt dynamic config automatisch neu (kein Neustart nötig)
- Änderung testen
Merksatz: Git-Commit allein reicht hier nicht. Ohne den manuellen Kopier-Schritt wirkt die Änderung nicht.
Warum so?
Die dynamic/-Dateien definieren Traefik-Middlewares (z. B. Authelia ForwardAuth, Security-Headers). Alle anderen Services referenzieren diese via @file-Suffix. Wenn die Dateien auf dem Host fehlen oder veraltet sind, schlagen alle Dienste mit authelia@file oder secure-headers@file still fehl.
Portainer-Regeln (Legacy)
⚠️ Portainer CE ist in Ablösung. Abschaltung geplant in Sprint 5.
Portainer ist nicht mehr die Quelle der Wahrheit und wird nur noch als Fallback-UI genutzt.
Secrets-Regeln
- Secrets liegen niemals im Repository
- Secrets liegen unter
/mnt/user/appdata/secrets/ - Secrets werden über Datei-Mounts mit
_FILEVariablen oder Komodo Stack Environment Variables eingebunden - Rechte:
chmod 600 - Secret-Namen und Pfade werden in
docs/SECRETS_MAP.mddokumentiert
DNS-Regeln für Container
Nicht alle Container können externe DNS-Namen auflösen. Standardmäßig nutzt Docker 127.0.0.11 als internen DNS-Resolver. In bestimmten Netzwerk-Setups schlägt externe Namensauflösung damit fehl (server misbehaving).
Regel
Container die externe Domains auflösen müssen (z. B. für ACME/Let's Encrypt, GitHub, externe APIs, DDNS-Updates) erhalten explizit:
dns:
- 1.1.1.1
- 8.8.8.8
Aktuell betroffen
| Service | Grund |
|---|---|
traefik |
ACME Let's Encrypt (acme-v02.api.letsencrypt.org) |
ddns-updater |
IP-Erkennung (ipify.org) + Cloudflare API |
Interne Services (kein dns: nötig)
Container, die nur Docker-interne Hostnamen auflösen (z. B. authelia, redis, postgres), benötigen keinen expliziten DNS-Eintrag.
Dokumentationspflicht
Nach jeder erfolgreichen Migration oder relevanten Änderung müssen diese Dateien geprüft werden:
docs/MIGRATION_LOG.mddocs/SECRETS_MAP.mddocs/ROLLBACK.mdHOMELAB_ARCHITECTURE_MASTER_V2.md(falls Architektur betroffen)
Sprint-Regel
Jede Migration wird als Sprint behandelt. Ein Sprint umfasst immer:
- Ist-Zustand prüfen
- Zielzustand definieren (in
HOMELAB_ARCHITECTURE_MASTER_V2.md) - Compose-Datei im Repo anpassen
- Commit + Push
- Deploy über Komodo
- Test
- Dokumentation aktualisieren
- Sprint abschließen
Nie mehrere kritische Dienste gleichzeitig ändern.
Rollback-Regel
Jede Änderung muss rückrollbar sein. Vor jedem Deploy muss klar sein:
- wie der letzte funktionierende Zustand aussieht
- welcher Commit der letzte stabile Stand ist
- ob Datenpfade unverändert bleiben
- wie der Dienst im Fehlerfall zurückgenommen wird
Wenn Rollback nicht klar ist, wird nicht deployt.
Arbeitsregel für KI-Assistenten
Wenn mit einer KI gearbeitet wird, gilt immer:
Lies zuerst:
HOMELAB_ARCHITECTURE_MASTER_V2.mddocs/WORKFLOW.md- die betroffene Compose-Datei
- ggf.
docs/MIGRATION_LOG.md
Erst danach dürfen Änderungen vorgeschlagen werden.
Merksatz
Erst Git, dann Deploy. Erst Wahrheit, dann Aktion. Kein Drift, kein Chaos.