From 67ec40b762a1602ddb6695acf6133d22f9689fa7 Mon Sep 17 00:00:00 2001 From: Micha Date: Sat, 30 May 2026 11:18:37 +0200 Subject: [PATCH] Docs sweep: reflect Komodo bootstrap first run + clean stale "still open" notes 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 --- docs/AUDIT_2026-05-25_TODO.md | 2 +- docs/RESTORE_DRILL_ROUTINE.md | 5 ++- docs/SERVICES_RECOVERY.md | 31 ++++++++++++------- ops/restore-tests/immich-runbook.md | 2 +- ops/restore-tests/komodo-bootstrap-plan.md | 14 ++++++--- ops/restore-tests/komodo-bootstrap-runbook.md | 2 +- 6 files changed, 37 insertions(+), 19 deletions(-) diff --git a/docs/AUDIT_2026-05-25_TODO.md b/docs/AUDIT_2026-05-25_TODO.md index 72f6d24..8a5ddf5 100644 --- a/docs/AUDIT_2026-05-25_TODO.md +++ b/docs/AUDIT_2026-05-25_TODO.md @@ -54,7 +54,7 @@ Kontext bewusst gesichert, bevor weitere Live-Aenderungen passieren: | erledigt | `docs/STORAGE_LAYOUT.draft.md` finalisieren | Datei als `docs/STORAGE_LAYOUT.md` Active v1.4 gefuehrt; Draft-Blocker entfernt | | erledigt (Baseline) | Disk- und Share-TBDs eintragen | Disk-Modelle, Seriennummern, Groessen, Filesysteme und Share-Cache-Settings aus `docs/HARDWARE_INVENTORY.md` und Host-Readout 2026-05-27 uebernommen; Retention-/Schwellen-Kalibrierung bleibt Folgeaufgabe | | erledigt | Gitea-Repo-Mirror-Mechanik definieren | `ops/borg-ui/scripts/gitea-bundle-mirror.sh` erzeugt verifizierte Bundles unter `/mnt/user/backups/git-bundles/gitea`; Host-Erstlauf 2026-05-26: 4 Bundles, Checksums OK, `homelab-infra.bundle` klonbar und `git fsck` sauber. Schedule live seit 2026-05-27 ueber User-Script `gitea-bundle-mirror-6h` (`10 */6 * * *`); Bundles werden mit `chmod 644` geschrieben damit der Nearline-Pull sie greift. | -| erledigt (Doku) | Komodo-Bootstrap-Pfad beschreiben | `docs/SERVICES_RECOVERY.md` enthaelt linearen Bootstrap in Stufen A-F mit Recovery-Anker `ops/komodo/docker-compose.yml`, expliziter Abgrenzung zum Self-Stack, Secret-Reihenfolge und Validierungs-Kommandos; `docs/DISASTER_RECOVERY.md` Stufe 3 verlinkt auf Bootstrap-Pfad. Trockenlauf-Skript bleibt als offene Folgeaufgabe. | +| erledigt (Doku + Skript + Erstlauf) | Komodo-Bootstrap-Pfad beschreiben | `docs/SERVICES_RECOVERY.md` enthaelt linearen Bootstrap in Stufen A-F mit Recovery-Anker `ops/komodo/docker-compose.yml`, expliziter Abgrenzung zum Self-Stack, Secret-Reihenfolge und Validierungs-Kommandos; `docs/DISASTER_RECOVERY.md` Stufe 3 verlinkt auf Bootstrap-Pfad. Trockenlauf-Skript unter `ops/restore-tests/komodo-bootstrap-*` seit 2026-05-29 vorhanden, Erstlauf 2026-05-30 erfolgreich (siehe Sprint 8 Eintrag). | | erledigt | Immich-Restore-Test planen | Testumfang, Datenpfade und Smoke-Test-Kriterium sind in `docs/IMMICH_RESTORE_TEST.md`, `ops/restore-tests/immich-plan.md` und `ops/restore-tests/immich-runbook.md` festgehalten; erster Host-Lauf am 2026-05-27 erfolgreich | ## Sprint 3 - Restore und Monitoring diff --git a/docs/RESTORE_DRILL_ROUTINE.md b/docs/RESTORE_DRILL_ROUTINE.md index ef71abf..625e4cd 100644 --- a/docs/RESTORE_DRILL_ROUTINE.md +++ b/docs/RESTORE_DRILL_ROUTINE.md @@ -47,7 +47,10 @@ Diese Liste ist bewusst auf Tier-2 und Tier-1-Dienste fokussiert. Tier-3-Dienste ### Q2 2026 - Konkrete Belegung - Mini-Restore: **Immich (erledigt 2026-05-27)**. -- DR-Sanity-Check (offen, vor Quartalsende 2026-06-30): Komodo-Bootstrap-Pfad gegen `docs/SERVICES_RECOVERY.md` durchgehen, Gitea-Bundles ueber `ops/borg-ui/scripts/gitea-bundle-mirror.sh` auf Frische und Bundle-Klonbarkeit pruefen, Secrets-Inventur gegen `docs/SECRETS_MAP.md` abgleichen. +- DR-Sanity-Check (teilweise erledigt, Rest vor Quartalsende 2026-06-30): + - Komodo-Bootstrap-Pfad: **erledigt 2026-05-30** durch echten Trockenlauf via `ops/restore-tests/komodo-bootstrap-test.sh --keep-data`, Report `/mnt/user/backups/restore-reports/komodo-bootstrap-2026-05-30.md`, `ops/komodo/docker-compose.yml` als Recovery-Anker belegt. + - Gitea-Bundles ueber `ops/borg-ui/scripts/gitea-bundle-mirror.sh` auf Frische und Bundle-Klonbarkeit pruefen: offen. + - Secrets-Inventur gegen `docs/SECRETS_MAP.md` abgleichen: offen. ### Wer schiebt das an? diff --git a/docs/SERVICES_RECOVERY.md b/docs/SERVICES_RECOVERY.md index 3b8d828..df8b3e9 100644 --- a/docs/SERVICES_RECOVERY.md +++ b/docs/SERVICES_RECOVERY.md @@ -138,19 +138,28 @@ Erfolgskriterium: Komodo-UI laedt, Periphery `Online`, mindestens ein Stack aus Erst nach erfolgreichem Komodo-Bootstrap werden produktive Stacks ueber den dokumentierten Stufenpfad in `docs/DISASTER_RECOVERY.md` Phase 4 hochgefahren (Traefik, AdGuard, Tailscale, dann PostgreSQL, Authelia, Redis, Gitea, dann Apps). -### Trockenlauf-Idee (Doku-only, nicht ausgefuehrt) +### Trockenlauf (als Repo-Skript, bestaetigt) -Ein bewusster Trockenlauf des Komodo-Bootstraps gegen Wegwerf-Pfade ist die naechste sinnvolle Reife-Stufe. Vorschlag: +Trockenlauf gegen Wegwerf-Pfade ist seit 2026-05-29 als Repo-Skript abgelegt: `ops/restore-tests/komodo-bootstrap-{compose.test.yml,test.sh,plan.md,runbook.md}`. Aufruf: -| Schritt | Inhalt | +```bash +bash /mnt/user/services/homelab-infra/ops/restore-tests/komodo-bootstrap-test.sh --what-if # nur Plan +bash /mnt/user/services/homelab-infra/ops/restore-tests/komodo-bootstrap-test.sh --keep-data # echter Lauf +``` + +Erstlauf 2026-05-30 erfolgreich: `SUCCESS`, alle 5 Checks gruen (compose config valid, Mongo healthy, Mongo authenticated ping ok, Komodo Core HTTP `200`, Test-Periphery `running`). Report unter `/mnt/user/backups/restore-reports/komodo-bootstrap-2026-05-30.md`. Produktive Komodo-Container, Mongo-Datadir und Secrets wurden nicht beruehrt. + +Test-Isolation: + +| Bereich | Wegwerf-Wert | |---|---| -| 1 | Test-Compose aus `ops/komodo/docker-compose.yml` in `/mnt/user/backups/restore-lab/komodo/` kopieren | -| 2 | Test-`.env` mit Wegwerf-Secrets erzeugen (nicht produktive Werte!) | -| 3 | `docker compose -f .../restore-lab/komodo/docker-compose.yml -p restoretest-komodo up -d` | -| 4 | Smoke: Mongo healthy, Core antwortet auf `http://127.0.0.1:/api/health`, Periphery verbindet | -| 5 | `docker compose -p restoretest-komodo down -v` und Restore-Lab bereinigen | +| Compose-Project | `restoretest-komodo` (isoliert von Produktions-Project `komodo`) | +| Test-Mongo-Datadir | `/mnt/user/backups/restore-lab/komodo/mongo` | +| Test-Port | `127.0.0.1:19120` (kein LAN, kein Traefik) | +| Test-Periphery | ohne `docker.sock`-Mount, ohne `/mnt/user/services`-Mount | +| `KOMODO_*`-Secrets | Wegwerf-Werte im Test-Compose, niemals produktive Werte | -Der Trockenlauf ist **noch nicht** als Repo-Skript abgelegt. Er bleibt als Folgeschritt analog zum Immich-Restore-Test geplant. +Damit ist `ops/komodo/docker-compose.yml` als Recovery-Anker fuer Stufen A-F **belegt** tauglich, nicht nur angenommen tauglich. ### Validierungs-Kommandos (Snapshot) @@ -197,6 +206,6 @@ Authoritativ ist `docs/SECRETS_MAP.md`. Fuer den Kaltstart ist diese Reihenfolge | erledigt (Skript + Host-Test) | Gitea-Bundle- oder Mirror-Mechanik final entscheiden | | erledigt | Komodo-Bootstrap-Quelle finalisieren | | erledigt (Doku) | Komodo-Kaltstart in linearen Stufen A-F dokumentieren | -| offen | Komodo-Trockenlauf-Skript in `ops/restore-tests/` analog zu Immich vorbereiten | -| offen | Restore-Kommandos nach erstem Trockenlauf mit echten Pfaden ergaenzen | +| erledigt 2026-05-29 | Komodo-Trockenlauf-Skript in `ops/restore-tests/` analog zu Immich vorbereiten | +| erledigt 2026-05-30 | Restore-Kommandos nach erstem Trockenlauf mit echten Pfaden ergaenzen | | erledigt | Services-Recovery in `docs/DISASTER_RECOVERY.md` verlinken | diff --git a/ops/restore-tests/immich-runbook.md b/ops/restore-tests/immich-runbook.md index db1be6f..f43ca14 100644 --- a/ops/restore-tests/immich-runbook.md +++ b/ops/restore-tests/immich-runbook.md @@ -2,7 +2,7 @@ ## Status -Skript und Test-Compose sind vorbereitet. **Erster echter Lauf steht noch aus.** +Skript und Test-Compose sind vorbereitet. **Erstlauf 2026-05-27 erfolgreich** (`SUCCESS`, HTTP `200`, `11977` Assets im Test-DB-Check). Report: `/mnt/user/backups/restore-reports/immich-2026-05-27.md`. Folgelaeufe je Quartal gemaess `docs/RESTORE_DRILL_ROUTINE.md` (Q2 = Immich). Vor dem ersten Lauf muss Operator entscheiden: diff --git a/ops/restore-tests/komodo-bootstrap-plan.md b/ops/restore-tests/komodo-bootstrap-plan.md index 305791b..30c7280 100644 --- a/ops/restore-tests/komodo-bootstrap-plan.md +++ b/ops/restore-tests/komodo-bootstrap-plan.md @@ -75,8 +75,14 @@ Optional spaeter: | 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 +## Bestaetigte Laeufe -- 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) +| 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 (`docs/RESTORE_DRILL_ROUTINE.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. diff --git a/ops/restore-tests/komodo-bootstrap-runbook.md b/ops/restore-tests/komodo-bootstrap-runbook.md index 6b5145b..09e4817 100644 --- a/ops/restore-tests/komodo-bootstrap-runbook.md +++ b/ops/restore-tests/komodo-bootstrap-runbook.md @@ -2,7 +2,7 @@ ## Status -Skript und Test-Compose sind vorbereitet. Erster echter Lauf steht noch aus. +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