C12: Off-Box-Backup-Spiegel auf den Proxmox-Host (rsync)

backup.sh spiegelt nach dem lokalen Tarball die Backups per rsync aufs
Proxmox (root@192.168.178.108:/var/lib/vz/mc2-backups) -- Retention via
--delete mitgezogen, chmod 600 erhalten, best-effort (Fehlschlag = lokal
gilt trotzdem). restore.sh kennt den Spiegel: --list zeigt Off-Box,
--pull-offsite holt alles zurueck, und fehlt ein Backup lokal, wird es
automatisch vom Proxmox gezogen (Platte-tot-Fall). Nebenbei latenten
Abbruch in list_backups bei leerem Ordner gefixt (set -e + leeres Glob).
Auth: dedizierter, gehaerteter Key ~/.ssh/mc2_offsite. Live E2E verifiziert.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Hitonabi
2026-07-03 19:23:00 +02:00
parent b21794a750
commit 357285e798
3 changed files with 103 additions and 14 deletions
+23 -8
View File
@@ -13,8 +13,17 @@ Nicht enthalten (bewusst): GGUF-Modelle, MC2-Code (Git), venvs, systemd-Units (a
Jedes Backup ist ein Tarball `mc2-state-<zeitstempel>.tar.gz` unter `/srv/models/mc2-backups/`,
`chmod 600` (enthält `.env`). Es werden die letzten **14** behalten.
> ⚠️ Das Tarball enthält Secrets und liegt aktuell auf **derselben Platte** wie die Daten.
> Für echten Desaster-Schutz noch eine Off-Box-Kopie einrichten (PBS / rsync). Siehe „Offen".
## Off-Box-Spiegel (C12) — zweite Kopie WEG von der Box
Nach jedem lokalen Backup spiegelt `backup.sh` die Tarballs per `rsync` auf ein **zweites Gerät**
(Default: **Proxmox-Host** `root@192.168.178.108:/var/lib/vz/mc2-backups`). Stirbt die NVMe der
Box, liegen die Backups noch auf dem Proxmox. Die Retention (14) wird per `--delete` mitgezogen,
`chmod 600` bleibt erhalten. Der Off-Box-Sync ist **best-effort**: schlägt er fehl, gilt das
lokale Backup trotzdem als erfolgreich (Warnung im Log).
- **Auth:** eigener SSH-Key `~/.ssh/mc2_offsite` (nur für dieses Backup), im Proxmox in
`root/.ssh/authorized_keys` **gehärtet** eingetragen: `from="<Box-IP>"`, kein Port-/Agent-/
X11-Forwarding, kein PTY → der Key kann nur rsync-Backup, keinen Voll-Root-Fernzugang.
- **Ziel/Key überschreibbar:** `MC_BACKUP_OFFSITE` (leer = Off-Box aus) und `MC_BACKUP_OFFSITE_KEY`.
## Backup erstellen
- **Automatisch:** systemd-Timer `mc2-backup.timer`, täglich ~03:30. Status:
@@ -38,10 +47,16 @@ Ablauf: Sicherheits-Backup → Dienste stoppen (`mem0-service`, `mission-control
`hermes-gateway`) → Dateien zurückspielen (mem0 wird **ersetzt**, Configs überschrieben) →
Dienste starten → Health-Check.
Ein Backup von einer **anderen** Maschine zurückspielen: Tarball nach
`/srv/models/mc2-backups/` kopieren, dann `restore.sh <datei>`.
### Wenn die Box-Platte tot ist (Off-Box-Restore)
`restore.sh` kennt den Off-Box-Spiegel: fehlt ein Backup lokal, holt es sich das Skript
automatisch vom Proxmox. Kein manuelles Kopieren nötig.
## Offen / TODO
- **Off-Box-Spiegel** (Schicht 2): Box ist Bare Metal (kein Proxmox-Gast → kein vzdump).
Saubere Wege: Proxmox Backup Server + `proxmox-backup-client` ODER rsync in einen
vzdump-gesicherten LXC. Noch nicht eingerichtet.
```bash
bash deploy/restore.sh --list # zeigt lokal UND Off-Box (Proxmox)
bash deploy/restore.sh --pull-offsite # ganzen Off-Box-Bestand nach lokal spiegeln
bash deploy/restore.sh latest # zieht das jüngste — vom Proxmox, falls lokal leer
```
## Erledigt
- **Off-Box-Spiegel (C12):** rsync auf den Proxmox-Host, live E2E verifiziert (2026-07-03).
Box ist Bare Metal (kein Proxmox-Gast → kein vzdump), daher aktiver Push statt vzdump-Pull.