e4b0db2af6
Mirror of the Immich restore-test pattern for the Komodo bootstrap anchor. Brings up a throwaway komodo-mongo + komodo-core + komodo-periphery under project restoretest-komodo, isolated from production: - same image digests as production (mongo:7.0.32, komodo-core:2, komodo-periphery:2) to prove compose-level bootstrap compatibility - restore-lab paths under /mnt/user/backups/restore-lab/komodo - 127.0.0.1:19120 only, no LAN bind, no Traefik, no Authelia - test periphery runs WITHOUT docker.sock mount and WITHOUT /mnt/user/services mount; cannot manage productive containers - KOMODO_* secrets are throwaway placeholders hardcoded in the test compose; productive secrets never enter this path Smoke test: compose config valid, mongo healthy, mongo auth-ping with test creds, komodo-core HTTP 200/302/303/401, periphery container running. Report under restore-reports/komodo-bootstrap-*. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
4.0 KiB
4.0 KiB
Komodo Bootstrap Trockenlauf - Plan
Ziel
Nachweisen, dass ops/komodo/docker-compose.yml als Recovery-Anker fuer einen Komodo-Kaltstart tauglich ist, ohne den produktiven Komodo-Stack anzufassen.
Bewusst nicht Teil dieses Tests:
- Restore aus dem produktiven
komodo-mongo.archive.gz-Dump (eigene Folgeaufgabe; dieser Test prueft nur das Compose-Bootstrap, nicht den Daten-Restore). - docker.sock-Mount fuer die Test-Periphery (die Test-Periphery darf nie produktive Container managen).
- Traefik-Route oder Authelia-Anbindung (Test laeuft ausschliesslich auf
127.0.0.1:19120).
Quelle
- Bootstrap-Anker:
ops/komodo/docker-compose.yml(Soll-Stand lautdocs/SERVICES_RECOVERY.mdStufe A-F). - Image-Digests: identisch zur Produktion fuer komodo-core und komodo-periphery; Mongo-Image identisch.
Test-Ziel
- Restore-Lab:
/mnt/user/backups/restore-lab/komodo - Wegwerf-Pfade:
/mnt/user/backups/restore-lab/komodo/mongo(Test-Mongo-Datadir)/mnt/user/backups/restore-lab/komodo/core(Repo-Cache)/mnt/user/backups/restore-lab/komodo/keys(gemeinsamer Keys-Pfad fuer Core+Periphery)/mnt/user/backups/restore-lab/komodo/periphery(Periphery-Etc)
- Testcontainer:
restoretest-komodo-mongorestoretest-komodo-core(Test-Port127.0.0.1:19120)restoretest-komodo-periphery(ohne docker.sock)
- Compose-Project:
restoretest-komodo(isoliert von Produktions-Projectkomodo) - Report-Ziel:
/mnt/user/backups/restore-reports/komodo-bootstrap-YYYY-MM-DD.md
Schutzregeln
- produktive Datadirs
/mnt/user/appdata/komodo/{mongo,core,periphery}werden nicht gemountet - produktive Container
komodo-mongo,komodo-core,komodo-peripherywerden nicht gestoppt - produktive
KOMODO_*-Secrets werden nicht verwendet - Test-Compose enthaelt nur Wegwerf-Werte fuer
KOMODO_SECRET_KEY,KOMODO_WEBHOOK_SECRET,KOMODO_JWT_SECRET,KOMODO_PASSKEYund Mongo-Root-Password - Test-Periphery laeuft ohne docker.sock-Mount und ohne
/mnt/user/services-Mount - Test-Port nur auf
127.0.0.1:19120, keine LAN-/Tailscale-Bindung
Geplanter Ablauf
- Restore-Lab-Pfade leer anlegen
docker compose configauf dem Test-Compose validieren- Mongo und Core hochfahren, auf Mongo-
healthywarten - HTTP-Smoke gegen
http://127.0.0.1:19120(Login-Seite oder Auth-Redirect erwartet) - Periphery dazustarten, kurz beobachten
- Mongo-
authenticated pingmit Test-Credentials - Report schreiben
- Cleanup
docker compose down -vund Restore-Lab loeschen (ausser--keep-data)
Smoke-Test
Minimal erfolgreich:
docker compose configvalid- Test-Mongo erreicht
healthy - Mongo-Authentifizierung mit Test-Creds funktioniert (
db.adminCommand({ping:1}).ok = 1) - Komodo-Core HTTP
200,302,303oder401(alles ist ein valider Lebenszeichen) - Test-Periphery container state
running
Optional spaeter:
- Periphery-Verbindung gegen Test-Core verifizieren (braucht Periphery-Konfig mit
core_url) - Echtes Restore aus
komodo-mongo.archive.gz-Dump in die Test-Mongo - Schreiben einer Wegwerf-Resource (Server/Stack) ueber die API
Bekannte Komplikationen
| Risiko | Beschreibung | Mitigation |
|---|---|---|
| Image-Drift | Komodo-Images aktualisieren ihre Major-Tag-Digests | Compose pinnt denselben Digest wie Produktion; bei Image-Update auch Test-Compose nachziehen |
| Port-Konflikt | wenn 19120 anderweitig belegt ist | nur 127.0.0.1-Bind; bei Konflikt Port im Compose anpassen |
| Volume-Reste | unterbrochener Lauf laesst Wegwerf-Datadir liegen | Skript loescht Restore-Lab vor jedem Lauf; --keep-data ueberschreibt das bewusst |
| Periphery-Erreichbarkeit | Core sucht Periphery initial nicht aktiv | Test prueft nur Periphery State.Status=running; voller Handshake ist optional |
Noch offen vor dem ersten echten Lauf
- Erstlauf mit
--what-ifzur Plan-Verifikation - Erstlauf mit
--keep-datazur Zeitmessung - Bei Erfolg
docs/RESTORE_DRILL_ROUTINE.mdQuartals-Belegung pruefen (Q2 ist bereits Immich; Komodo passt eher zu Q4 oder zum quartalsweisen DR-Sanity-Check)