Files
homelab-infra/ops/restore-tests/komodo-bootstrap-plan.md
T

4.4 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

Bestaetigte Laeufe

Datum Mode Ergebnis Report
2026-05-30 --what-if Plan-Ausgabe wie erwartet (kein Report, nur stdout)
2026-05-30 --keep-data SUCCESS, 5/5 Checks gruen, Core HTTP 200, Mongo healthy in ~6 s /mnt/user/backups/restore-reports/komodo-bootstrap-2026-05-30.md

Folgeschritte

  • Quartals-Belegung: Komodo-Bootstrap passt zum DR-Sanity-Check (ops/restore-tests/schedule.md Q2/Q4) und kann ohne Borg-Archiv jederzeit wiederholt werden.
  • Optional fuer kuenftige Laeufe: echtes Restore aus komodo-mongo.archive.gz in die Test-Mongo, danach Schreiben einer Wegwerf-Resource ueber die API.