# Gitea Restore Runbook ## Vorbedingungen - Borg-Quelle ist verfuegbar - Borg-Passphrase-Datei vorhanden: `/mnt/user/appdata/secrets/borg_repo_passphrase.txt` - Testpfade unter `/mnt/user/backups/restore-lab/` und `/mnt/user/backups/restore-reports/` sind freigegeben ## Bestaetigter Host-Stand - produktive Gitea-Daten liegen unter `/mnt/user/services/gitea/data` - Borg-Scope fuer Gitea ist `/local/gitea/data` - `restore-lab` und `restore-reports` sind auf dem Host vorhanden ## Bestaetigter Teststand - echter Mini-Restore am `2026-05-07` erfolgreich gelaufen - Restore-Ziel war `/mnt/user/backups/restore-lab/gitea/data` - Testcontainer `restoretest-gitea` lief lokal auf `127.0.0.1:13000` und `127.0.0.1:12222` - HTTP `200 OK`, HTML-Titel und SSH-Port wurden erfolgreich verifiziert - Report liegt unter `/mnt/user/backups/restore-reports/gitea-2026-05-07.md` ## Platzhalter - `ARCHIVE_NAME`: Borg-Archiv fuer den Restore-Test - `REPORT_DATE`: z. B. `2026-05-07` - `BORG_REPO`: Host-Borg-Repo - `BORG_PASSPHRASE_FILE`: `/mnt/user/appdata/secrets/borg_repo_passphrase.txt` ## Ablauf 1. Testpfade vorbereiten ```bash mkdir -p /mnt/user/backups/restore-lab/gitea/data mkdir -p /mnt/user/backups/restore-reports rm -rf /mnt/user/backups/restore-lab/gitea/data/* ``` 2. Gitea-Daten aus Borg in das Restore-Lab extrahieren Archiv zuerst pruefen: ```bash export BORG_REPO='...' export BORG_PASSPHRASE="$(cat /mnt/user/appdata/secrets/borg_repo_passphrase.txt)" borg list "$BORG_REPO" ``` Restore in das Testziel: ```bash cd /mnt/user/backups/restore-lab/gitea borg extract "$BORG_REPO" "::ARCHIVE_NAME" local/gitea/data mv /mnt/user/backups/restore-lab/gitea/local/gitea/data /mnt/user/backups/restore-lab/gitea/data rmdir /mnt/user/backups/restore-lab/gitea/local/gitea rmdir /mnt/user/backups/restore-lab/gitea/local ``` Wenn das Archiv den Pfad anders ablegt, zuerst mit `borg list "$BORG_REPO" "::ARCHIVE_NAME"` den exakten Eintrag pruefen. 3. Testcontainer starten ```bash docker compose -f /mnt/user/services/homelab/ops/restore-tests/gitea-compose.test.yml up -d ``` 4. Smoke-Test ```bash curl -I http://127.0.0.1:13000 ssh -p 12222 -o BatchMode=yes -o StrictHostKeyChecking=no git@127.0.0.1 docker logs restoretest-gitea --tail 50 ``` Minimal erfolgreich: - HTTP-Antwort kommt - Login-Seite ist erreichbar - SSH-Port antwortet - Restore-Lab enthaelt Gitea-Daten 5. Testcontainer wieder stoppen ```bash docker compose -f /mnt/user/services/homelab/ops/restore-tests/gitea-compose.test.yml down ``` 6. Report schreiben Ziel: ```text /mnt/user/backups/restore-reports/gitea-REPORT_DATE.md ``` 7. Testdaten nach erfolgreichem Lauf bereinigen ```bash rm -rf /mnt/user/backups/restore-lab/gitea/data ``` ## Festgelegte Entscheidungen - Testdaten werden nach erfolgreichem Lauf geloescht. - `ntfy` wird nicht im ersten echten Lauf eingebunden. - Die Borg-Passphrase wird fuer Restore-Tests aus einer Host-Secret-Datei gelesen, nicht aus Borg-UI-Interna.