# 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.