67ec40b762
Six files had outdated status notes that the F-09 first run on 2026-05-30 made wrong: - ops/restore-tests/komodo-bootstrap-runbook.md: "Erster echter Lauf steht noch aus" -> first run confirmed - ops/restore-tests/komodo-bootstrap-plan.md: "Noch offen vor dem ersten echten Lauf" section -> "Bestaetigte Laeufe" table with the --what-if and --keep-data runs - ops/restore-tests/immich-runbook.md: status note still said "Erster echter Lauf steht noch aus" although the Immich first run was 2026-05-27; correcting in the same sweep - docs/AUDIT_2026-05-25_TODO.md: Sprint 2 entry on Komodo bootstrap path no longer carries the "Trockenlauf-Skript bleibt als offene Folgeaufgabe" tail - docs/SERVICES_RECOVERY.md: replaced the "Trockenlauf-Idee (Doku-only, nicht ausgefuehrt)" section with the confirmed repo-script flow and marked the two "Naechste Aufgaben" rows about the dry-run as done - docs/RESTORE_DRILL_ROUTINE.md: Q2 2026 DR-Sanity-Check entry now splits Komodo-Bootstrap-Pfad (done) from the two still-open items (Gitea bundles, secrets inventory) No behavior change, only documentation consistency. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
96 lines
3.9 KiB
Markdown
96 lines
3.9 KiB
Markdown
# Komodo Bootstrap Trockenlauf - Runbook
|
|
|
|
## Status
|
|
|
|
Skript und Test-Compose sind vorbereitet. **Erstlauf 2026-05-30 erfolgreich** (`SUCCESS`, alle 5 Checks gruen, Komodo Core HTTP `200`). Report: `/mnt/user/backups/restore-reports/komodo-bootstrap-2026-05-30.md`. Folgelaeufe quartalsweise empfohlen als Teil des DR-Sanity-Checks (`docs/RESTORE_DRILL_ROUTINE.md`).
|
|
|
|
## Vorbedingungen
|
|
|
|
- Docker auf dem Unraid-Host
|
|
- `borg-ui`-Container muss **nicht** laufen (im Gegensatz zum Immich-Test braucht der Komodo-Bootstrap kein Borg-Archiv)
|
|
- freier Speicher unter `/mnt/user/backups/restore-lab/komodo` (~500 MB reichen)
|
|
- Port `127.0.0.1:19120` ist frei
|
|
|
|
## Bestaetigter Host-Stand (Soll)
|
|
|
|
- produktiver Komodo-Stack: `komodo-mongo`, `komodo-core`, `komodo-periphery` unter Project `komodo`
|
|
- produktive Mongo-Datadir: `/mnt/user/appdata/komodo/mongo`
|
|
- produktive Secrets: `KOMODO_*` Stack-ENV-only (Restore-Reihenfolge siehe `docs/SECRETS_MAP.md`)
|
|
- Test isoliert das alles unter Project `restoretest-komodo` mit Restore-Lab-Datadir
|
|
|
|
## Erster Lauf - trockene Variante
|
|
|
|
```bash
|
|
bash /mnt/user/services/homelab-infra/ops/restore-tests/komodo-bootstrap-test.sh --what-if
|
|
```
|
|
|
|
Erwartete Ausgabe: nur Plan-Output, kein Docker-Start, kein Verzeichnis angelegt.
|
|
|
|
## Erster Lauf - echter Test
|
|
|
|
```bash
|
|
# optional: produktiven Komodo-Stack-Status pruefen, damit nichts kollidiert
|
|
docker ps --filter name=komodo --format "{{.Names}}\t{{.Status}}"
|
|
|
|
# Lauf mit Datenerhalt
|
|
bash /mnt/user/services/homelab-infra/ops/restore-tests/komodo-bootstrap-test.sh --keep-data
|
|
```
|
|
|
|
Bei Erfolg:
|
|
|
|
- Report unter `/mnt/user/backups/restore-reports/komodo-bootstrap-YYYY-MM-DD.md`
|
|
- Test-Container `restoretest-komodo-*` werden nach Lauf gestoppt und entfernt (auch bei `--keep-data`)
|
|
- Restore-Lab-Daten bleiben mit `--keep-data` erhalten
|
|
|
|
## Smoke-Test-Pruefungen
|
|
|
|
Minimal erwartet im Report:
|
|
|
|
- `docker compose config valid: ok`
|
|
- `Test-Mongo healthy: ok`
|
|
- `Mongo authenticated ping (Test-Creds): ok`
|
|
- `Komodo Core HTTP status: 200|302|303|401`
|
|
- `Test-Periphery container state: running`
|
|
|
|
Manuelle Folgepruefung (optional):
|
|
|
|
```bash
|
|
docker compose -f /mnt/user/services/homelab-infra/ops/restore-tests/komodo-bootstrap-compose.test.yml \
|
|
-p restoretest-komodo up -d
|
|
curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:19120
|
|
docker exec restoretest-komodo-mongo mongosh --quiet -u komodo \
|
|
-p restoretest-komodo-mongo-pwd --authenticationDatabase admin --eval 'db.adminCommand({ping:1})'
|
|
docker compose -f /mnt/user/services/homelab-infra/ops/restore-tests/komodo-bootstrap-compose.test.yml \
|
|
-p restoretest-komodo down -v
|
|
```
|
|
|
|
## Cleanup ohne `--keep-data`
|
|
|
|
Skript bereinigt:
|
|
|
|
- Test-Container und Test-Volumes ueber `docker compose down -v`
|
|
- Restore-Lab unter `/mnt/user/backups/restore-lab/komodo`
|
|
|
|
Produktive Komodo-Container, Mongo-Datadir und `KOMODO_*`-Secrets werden niemals beruehrt.
|
|
|
|
## Fehlerfaelle
|
|
|
|
| Symptom | Ursache | Massnahme |
|
|
|---|---|---|
|
|
| `Test-Mongo never reported healthy` | mongo-image konnte nicht starten | `docker logs restoretest-komodo-mongo` pruefen; Restore-Lab-Pfad leer? |
|
|
| HTTP-Timeout nach 120 s | Komodo-Core haengt in Mongo-Connect | `docker logs restoretest-komodo-core` pruefen; Mongo-Auth-Test wiederholen |
|
|
| `bind: address already in use` | Port 19120 belegt | Compose-Port-Mapping anpassen oder konfligierenden Prozess identifizieren |
|
|
| Periphery `restarting` | Periphery braucht zusaetzliche ENVs | Logs lesen; Periphery-Verbindung ist optional fuer den Smoke-Test |
|
|
|
|
## Schedule
|
|
|
|
Aktuell nicht im automatischen Schedule. Empfohlen als Teil des quartalsweisen DR-Sanity-Check (`docs/RESTORE_DRILL_ROUTINE.md`).
|
|
|
|
## Festgelegte Entscheidungen
|
|
|
|
- Test-Compose nutzt dieselben Image-Digests wie Produktion.
|
|
- Test-Periphery laeuft bewusst ohne docker.sock-Mount.
|
|
- Test-Secrets sind Wegwerf-Werte im Compose; niemals produktive Werte einsetzen.
|
|
- Test-Port nur auf `127.0.0.1`, keine LAN-Bindung.
|
|
- `restoretest-komodo` als Compose-Project-Name reserviert; Test-Container heissen `restoretest-komodo-*`.
|