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

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 (`ops/restore-tests/schedule.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 (`ops/restore-tests/schedule.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-*`.