Cluster-side backups are healthier than assumed: three nightly Borg jobs to a Hetzner Storage Box, all completing with plausible volumes and working prune (synapse 199MB/247 files, authentik ~150MB, wikijs 223kB DB-only). No silent failures. Critical finding for #0030: the Borg passphrase and SSH key needed to READ those backups are SOPS-encrypted under a single age key that exists only in the cluster being backed up and on one laptop — no documented cold copy. Losing both makes all three repos permanently unreadable. Cold escrow must precede any restore drill. For #0010 this shrinks the work: the Storage Box + Borg pattern already exists and is proven, so Gitea needs only its own repo there. The disabled cron (no backups since 2026-07-30) remains separately urgent. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
65 lines
3.3 KiB
Markdown
65 lines
3.3 KiB
Markdown
---
|
|
type: issue
|
|
id: "0010"
|
|
status: in-progress
|
|
created: 2026-08-01
|
|
milestone: M1
|
|
priority: medium
|
|
host: cfgmon
|
|
area: security
|
|
gitlab_iid: "10"
|
|
related: []
|
|
---
|
|
# CFGMON-09: Gitea-Backups off-host (Borg/Storage Box) — Backup-Cron ist DEAKTIVIERT
|
|
|
|
> Import aus [management#10](https://git.lab/axion1337.chat/management/-/issues/10) (2026-08-11). Kommentare und Verlauf bleiben dort; kanonisch ist ab jetzt diese Datei (ADR-0012).
|
|
|
|
⚠️ **Seit 2026-07-30 laufen KEINE Gitea-Backups** — der nächtliche Cron ist
|
|
auskommentiert (Crontab `rantanplan`), letzter Stand
|
|
`/opt/backup/gitea-dump-2026-07-30.tar.gz`. Beim Erledigen/Verwerfen dieses Punkts
|
|
den Cron wieder aktivieren.
|
|
|
|
**Plan: eigenes Borg-Repo auf einer Hetzner Storage Box** (spricht Borg nativ über
|
|
SSH Port 23). Dump **unkomprimiert** an Borg geben (gzip im Script entfällt, sonst
|
|
greift Dedup nicht); Retention via `borg prune` (7d/4w/6m); optional Sub-Account.
|
|
Kontext: Platte 73 % voll, Script rotiert auf genau einen Stand, Off-host-Kopie
|
|
fehlt komplett — bei Verlust des Hosts wäre Gitea (inkl. Mirror-Kopien) weg.
|
|
|
|
**Voraussetzungen (User):** Storage-Box/Sub-Account im Robot anlegen; Host hat keinen
|
|
SSH-Key → generieren und Public Key in der Storage Box hinterlegen.
|
|
|
|
Quelle: [hosts/cfgmon.md](https://git.lab/axion1337.chat/management/-/blob/main/hosts/cfgmon.md)
|
|
|
|
---
|
|
*Übernommen aus dem Backlogs-Markdown beim Framework-Umbau 2026-08-01 (voller Wortlaut: Git-Historie der Datei).*
|
|
|
|
## In Arbeit 2026-08-14 — Muster existiert bereits (Aufwand deutlich kleiner als geplant)
|
|
|
|
Bei der Bestandsaufnahme für #0030 zeigte sich: **Borg auf Hetzner Storage Box läuft im
|
|
Matrix-Cluster bereits produktiv** — der für dieses Issue geplante Aufbau muss also nicht
|
|
erfunden, sondern nur auf Gitea übertragen werden.
|
|
|
|
**Vorhandenes Muster (erprobt, nächtlich, verifiziert):**
|
|
- Storage Box `u641795@u641795.your-storagebox.de:23`, drei getrennte Repos
|
|
(`/./synapse-backup`, `/./authentik-backup`, `/./wikijs-backup`).
|
|
- Image `rohana.axion1337.de/sorb/axion-backup:v2`; Retention `borg prune` 7d/4w/6m.
|
|
- Credentials (Borg-Passphrase + SSH-Key) als SOPS-Secret, per Env in den Job.
|
|
|
|
**Konsequenz für Gitea:** kein neuer Storage-Box-Vertrag nötig — ein zusätzliches Repo
|
|
`/./gitea-backup` auf derselben Box (oder ein Sub-Account) genügt. Der Host braucht weiterhin
|
|
einen eigenen SSH-Key (CFGMON ist **nicht** der Cluster), dessen Public Key in der Storage Box
|
|
hinterlegt wird. Wie im Issue vorgesehen: Dump **unkomprimiert** an Borg geben (`gzip` aus
|
|
`backup/gitea-backup.sh` entfernen), sonst greift die Deduplizierung nicht.
|
|
|
|
⚠️ **Unverändert akut:** Der nächtliche Cron auf CFGMON ist seit 2026-07-30 auskommentiert —
|
|
seit über zwei Wochen läuft **kein** Gitea-Backup, der letzte Stand ist
|
|
`/opt/backup/gitea-dump-2026-07-30.tar.gz`. Das ist unabhängig von der Borg-Umstellung sofort
|
|
behebbar (Cron wieder einkommentieren) und sollte **nicht** auf das Off-host-Projekt warten.
|
|
|
|
⚠️ **Vorrang laut #0030:** Bevor Backups erweitert werden, muss die kalte Kopie des
|
|
age-Schlüssels stehen (dort dokumentierte Zirkelabhängigkeit) — sonst wächst nur die Menge
|
|
potenziell unlesbarer Sicherungen.
|
|
|
|
**Offen (nur mit Host-Zugang, kein SSH zu CFGMON von hier):** Cron reaktivieren; SSH-Key auf
|
|
CFGMON erzeugen + in der Storage Box hinterlegen; `gitea-backup.sh` auf Borg umstellen.
|