11 KiB
11 KiB
Migration Log - Homelab GitOps
Dieses Dokument ist nur noch ein historischer Verlauf. Der aktuelle operative Ablauf steht in docs/WORKFLOW.md, das Zielbild in HOMELAB_ARCHITECTURE_MASTER_V2.md.
Aktueller Endstand
- Gitea Online ist der verbindliche Sollzustand.
- Komodo ist der einzige produktive Stack-Manager.
- Portainer CE ist entfernt.
- Firefly, Firefly-Fints und Semaphore sind entfernt.
- Borg UI ist produktiv, Dump-Automatisierung laeuft host-seitig und ein Restore-Smoke-Test wurde erfolgreich durchgefuehrt.
- GitHub Desktop ist der bevorzugte lokale Workflow fuer
Fetch,Pull,CommitundPush. - Mutable Image-Tags sind auf die aktuell laufenden Digests eingefroren.
Historische Meilensteine
2026-05-05 - N-Aufraeum-Sprint
- Obsolete Compose-Top-Level-Felder
version: "3.9"aus Immich, Mail Archiver und Paperless entfernt. - Leere
env/domains.env.exampleundenv/global.env.examplemit nicht geheimen Beispielwerten gefuellt. - Veraltete
.keep-Platzhalter aus Verzeichnissen mit echten Compose-/Repo-Inhalten sowie zwei reine Geister-Verzeichnisse (host-services/plex,infra/dns) entfernt.
2026-05-05 - M3b versionierte App-Images digest-gepinnt
- Versionierte Nicht-Komodo-Images fuer BentoPDF, Mealie, Paperless, Paperless-GPT, AdGuard Home, Grafana, InfluxDB 3 Core und Traefik auf die am Host laufenden, manifest-validierten Digests gepinnt.
nextcloud:33.0.2-apachewurde bewusst nicht in diesem Schritt gepinnt, weil der lokal gelistete Digest nicht als Registry-Manifest fuertag@sha256validierbar war.- Redis-Caches und Komodo/M10 blieben unveraendert.
2026-05-05 - M6/M7/M8 Doku-Konsolidierung
hermes.kaleschke.infoals produktive Hermes-Dashboard-Route hinter Traefik + Authelia in Architektur, Repo-Map und Service-Katalog ergaenzt.grafanaundinfluxdb3-corelaufen weiterhin alsuser: "0"; das wurde als Host-Appdata-Permissions-Ausnahme dokumentiert und nicht nebenbei geaendert.- Tailscale-Ausnahme um
NET_ADMIN,NET_RAWund/dev/net/tunergaenzt. - Komodo-Secret-/Webhook-Themen wurden bewusst nicht geaendert; Komodo-Aenderungen erfolgen nur gemeinsam mit dem Betreiber.
2026-05-05 - M3a stateful Digest-Pinning
- PostgreSQL 17 Datenhalter auf
postgres:17.9@sha256:5b96f1a16bd9768b060dd2ffe55cb6225c4d9ef4d214a8b21eb08134869a97e4gepinnt (postgresql17,mealie-postgres,nextcloud-postgres). - Immich pgvector-Postgres auf
tensorchord/pgvecto-rs:pg14-v0.2.0@sha256:739cdd626151ff1f796dc95a6591b55a714f341c737e27f045019ceabf8e8c52gepinnt. - Komodo Mongo auf
mongo:7.0.32@sha256:32979a1189dfdc44da3f5ed40d910495f5ad8f6f7f77556646f890a30b2d3f56sowie Komodo Core/Periphery und Gitea auf die am Host laufenden Digests gepinnt. - Redis-Caches bleiben bewusst ohne Digest-Pin; Redeploys erfolgen stackweise mit Smoke-Test, nicht parallel.
2026-05-04 - Komodo Self-Stack Drift auf persistenten Pfad zurueckgefuehrt
- Drift-Befund:
komodo-coreundkomodo-peripheryliefen aus/tmp/komodo-core-repair.ymlbzw./tmp/komodo-periphery-repair.yml;komodo-mongoverwies auf/mnt/user/services/stacks/komodo/compose.yaml, obwohl dieser Pfad fehlte. - Vor Eingriff wurden die Repair-Dateien und zugehoerigen
/tmp/*.env-Dateien unter/mnt/user/appdata/komodo/_drift_backup_2026-05-04/gesichert. - Zusaetzlich wurde eine geschuetzte Recovery-ENV unter
/mnt/user/appdata/secrets/_komodo_stack_env_recovery_2026-05-04.envabgelegt; diese Datei enthaelt Tier-1-Secret-Material und ist kein Dauerzustand. - Vor dem Reconcile wurde das host-seitige Dump-Skript ausgefuehrt;
komodo-mongo.archive.gzwurde frisch unter/mnt/user/backups/borg/dumps/latest/erzeugt. - Persistenter Self-Stack wurde unter
/mnt/user/services/stacks/komodo/compose.yamlausops/komodo/docker-compose.ymlwiederhergestellt;.envwurde hostseitig aus der bestehenden Runtime-ENV abgeleitet. - Der vollstaendige Dry-run haette auch
komodo-mongorecreated und wurde daher nicht ausgefuehrt. Stattdessen wurden nurkomodo-coreundkomodo-peripherygezielt mit--no-deps --force-recreateaus dem persistenten Pfad neu erstellt;komodo-mongoblieb unveraendert healthy. - Smoke-Tests:
docker compose lszeigt fuerkomodonur noch/mnt/user/services/stacks/komodo/compose.yaml, Mongo pingt{ ok: 1 },https://komodo.kaleschke.infoliefert HTTP 200, und Periphery meldet sich am Core an. - Die
/tmp/*repair.yml-Dateien bleiben vorerst als Altlast erhalten und duerfen erst nach stabiler Laufzeit bewusst entfernt oder ins Drift-Backup verschoben werden.
2026-05-04 - Authelia ACL-Drift hostseitig gemerged
- Die produktive Authelia-Config ist groesser als die Repo-Datei, weil sie hostseitige OIDC-/Secret-Konfiguration enthaelt. Die Repo-Datei wurde daher als nicht geheime Baseline eingeordnet und nicht blind auf den Host kopiert.
- Host-Backup vor Aenderung:
/mnt/user/appdata/authelia/config/configuration.yml.bak-20260504-acl-sync. - Minimaler Host-Merge:
homepage.kaleschke.infowurde aus der bypass-Liste entfernt,komodo.kaleschke.infoaus der 2FA-Liste entfernt, unddefault_redirection_urlwurde aufhttps://home.kaleschke.infogesetzt. authelia validate-configwar erfolgreich; Authelia wurde neu gestartet und war danach healthy.- Smoke-Tests:
home.kaleschke.infoliefert fuer anonyme Requests eine Authelia-Weiterleitung,komodo.kaleschke.infobleibt ueber native Komodo-Auth erreichbar.
2026-05-04 - Home Assistant InfluxDB LAN-Port und Drift-Runbook
influxdb3-corefuer Home-Assistant-Writer auf LAN-Port8181vorbereitet und deployed.- InfluxDB bleibt ohne Traefik-/Public-Route und haengt nicht im
frontend_net. - Fuer aktives Docker Host-Port-Publishing wurde zusaetzlich zum internen
grafana_influx_internaldas Compose-Netzgrafana_influx_lanergaenzt. - Komodo Periphery dauerhaft um
/mnt/user/services:/mnt/user/servicesundfrontend_netergaenzt, damit Stack-Workspaces und Gitea-Zugriff reproduzierbar funktionieren. docs/GITOPS_DRIFT_RUNBOOK.mdangelegt, um lokale Git-Kopie, Gitea, Komodo Workspace, Docker Runtime und Host-Listener getrennt zu pruefen.
2026-03-28 - GitOps-Konsolidierung
- Komodo als primaeren Stack-Manager eingefuehrt.
- Portainer aus dem Zielbild herausgenommen.
- Traefik auf 100% Docker-Labels konsolidiert.
diunentfernt; Update-Monitoring wird ueber Komodo abgedeckt.
2026-03-29 - Portainer abgeschaltet
- Portainer CE aus dem produktiven Betrieb entfernt.
- Komodo als alleinigen Stack-Manager festgezogen.
2026-04-13 bis 2026-04-15 - Borg-Rollout abgeschlossen
critical_infraerfolgreich nach Borg gesichert.- Pre-Backup-Dumps host-seitig ueber Unraid User Scripts etabliert.
- Dump-Zielpfad auf
/mnt/user/backups/borg/dumpsumgestellt. - Restore-Smoke-Test fuer
postgresql17-globals.sqlundgitea.dberfolgreich nachgewiesen. - Monitoring fuer Borg ueber
ntfyund Uptime Kuma eingerichtet.
2026-04-15 - Repo- und Betriebsbereinigung
- Firefly, Firefly-Fints und Semaphore aus Repo und Homelab entfernt.
- GitHub Desktop als Standard-Workflow fuer den lokalen Sync festgelegt.
2026-04-17 - Sicherheits- und Doku-Abgleich
code-serverhinterauthelia@file,secure-headers@fileabgesichert.- Traefik-Dashboard von
dashboard-auth@fileaufauthelia@file,secure-headers@fileumgestellt; BasicAuth-Hash aus dem Repo entfernt. - Redis von Klartext in der Compose auf Secret-Datei unter
/mnt/user/appdata/secrets/redis_password.txtumgestellt. - Redis-Passwort bewusst nicht rotiert; Live-Passwort bleibt vorerst unveraendert.
mail-archiverin der Architektur-Doku an den realen Traefik-Betrieb angepasst.paperless-gptvonLOG_LEVEL=debugaufinfoumgestellt.speedtest-trackervonAPP_DEBUG=trueauffalseumgestellt.- Mutable Image-Tags fuer produktive Stacks auf die aktuell laufenden Digests eingefroren, um Deployments reproduzierbar zu machen.
paperless-ngxbleibt fuerPAPERLESS_DBPASSundPAPERLESS_REDISvorerst bewusst bei Stack Environment Variables; keine Live-Migration auf_FILE, solange der aktuelle Stand stabil laeuft.- Disaster-Recovery-Runbook und Restore-Matrix fuer den Totalausfall-/Wiederanlauf-Fall neu dokumentiert.
2026-04-19 - paperless-gpt Digest-Pin zurueckgenommen
- Der fuer
paperless-gpteingetragene Digest war syntaktisch ungueltig (63 statt 64 Hex-Zeichen) und wurde daher wieder auficereed/paperless-gpt:latestzurueckgesetzt. - Diese Ruecknahme ist bewusst eng auf einen einzelnen defekten Pin begrenzt und aendert keine anderen Digest-Festschreibungen.
- Die zwischenzeitlichen OCR-/Versions-Experimente fuer
paperless-gptwurden wieder auf den einfachen vorherigen Stand zurueckgenommen (icereed/paperless-gpt:latest,VISION_LLM_MODEL=cnshenyang/qwen3-nothink:14b), um den letzten bekannten Alltagszustand wiederherzustellen.
2026-04-19 - Nextcloud und Stirling-PDF vorbereitet
apps/nextcloud/docker-compose.ymlals offizieller Docker-Microservice-Stack mitnextcloud:apache, eigener PostgreSQL-Datenbank und eigenem Redis vorbereitet.- Nextcloud folgt dem Repo-Standard
frontend_net+ app-internes Netz, nutzt_FILE-Secrets fuer Admin- und DB-Passwort und ist bewusst nicht hinter zentraler ForwardAuth, damit WebDAV/CardDAV und native Clients sauber funktionieren. apps/stirling-pdf/docker-compose.ymlals geschuetzter Tool-Stack hinterauthelia@file,secure-headers@filevorbereitet.- Stirling-PDF nutzt persistente Pfade fuer
/configs,/logs,/pipeline,/customFilesund/usr/share/tessdata; interne Stirling-Login-Funktion bleibt zugunsten des zentralen Traefik-/Authelia-Zugangs deaktiviert.
2026-04-30 - BentoPDF und Grafana/InfluxDB vorbereitet
stirling-pdfrepo-seitig durchbentopdfersetzt; Domainpdf.kaleschke.infobleibt erhalten.- BentoPDF laeuft als geschuetztes browserseitiges PDF-Tool hinter
authelia@file,secure-headers@fileund setzt zusaetzlich COOP/COEP-Header fuer SharedArrayBuffer-basierte Office-Konvertierung. ops/grafana-influxdbals neuer Monitoring-Stack vorbereitet und spaeter in Betrieb genommen.- Grafana laeuft hinter Traefik + Authelia unter
grafana.kaleschke.info. - InfluxDB 3 Core bleibt ohne Public Route und wird ueber eine provisionierte Grafana-Datenquelle angebunden.
- Secrets fuer Grafana-Admin-Passwort, InfluxDB-Admin-Token und Grafana-Datasource-Token sind als Host-Dateien unter
/mnt/user/appdata/secrets/dokumentiert.
Dauerhafte Learnings
- Kein Live-Editing in Komodo; Git gewinnt immer gegen manuelle Drift.
- Webhooks koennen nach einem Push sofort einen Deploy ausloesen.
- Rollback soll bevorzugt ueber saubere Git-Commits und bekannte Good States erfolgen, nicht ueber History-Rewrites auf
master. - Doku soll Endzustaende beschreiben, nicht veraltete Zwischenstaende konservieren.