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>
83 lines
4.0 KiB
Markdown
83 lines
4.0 KiB
Markdown
# 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 laut `docs/SERVICES_RECOVERY.md` Stufe 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-mongo`
|
|
- `restoretest-komodo-core` (Test-Port `127.0.0.1:19120`)
|
|
- `restoretest-komodo-periphery` (ohne docker.sock)
|
|
- Compose-Project: `restoretest-komodo` (isoliert von Produktions-Project `komodo`)
|
|
- 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-periphery` werden **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_PASSKEY` und 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
|
|
|
|
1. Restore-Lab-Pfade leer anlegen
|
|
2. `docker compose config` auf dem Test-Compose validieren
|
|
3. Mongo und Core hochfahren, auf Mongo-`healthy` warten
|
|
4. HTTP-Smoke gegen `http://127.0.0.1:19120` (Login-Seite oder Auth-Redirect erwartet)
|
|
5. Periphery dazustarten, kurz beobachten
|
|
6. Mongo-`authenticated ping` mit Test-Credentials
|
|
7. Report schreiben
|
|
8. Cleanup `docker compose down -v` und Restore-Lab loeschen (ausser `--keep-data`)
|
|
|
|
## Smoke-Test
|
|
|
|
Minimal erfolgreich:
|
|
|
|
- `docker compose config` valid
|
|
- Test-Mongo erreicht `healthy`
|
|
- Mongo-Authentifizierung mit Test-Creds funktioniert (`db.adminCommand({ping:1}).ok = 1`)
|
|
- Komodo-Core HTTP `200`, `302`, `303` oder `401` (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-if` zur Plan-Verifikation
|
|
- Erstlauf mit `--keep-data` zur Zeitmessung
|
|
- Bei Erfolg `docs/RESTORE_DRILL_ROUTINE.md` Quartals-Belegung pruefen (Q2 ist bereits Immich; Komodo passt eher zu Q4 oder zum quartalsweisen DR-Sanity-Check)
|