Files
homelab-infra/ops/restore-tests/komodo-bootstrap-plan.md
T
Micha e4b0db2af6 Add Komodo bootstrap dry-run scaffold (F-09 rest)
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>
2026-05-29 15:25:41 +02:00

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 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)