Skip to main content

Restic - High-Availability Backup Strategie für Immich und Syncthing

Überblick

Dies ist ein sauberes, generisches Template einer bewährten, einfachen Backup-Strategie mit einem dedizierten Vault-LXC und Restic mit REST-Server.

Separate Repositories für unterschiedliche Dienste, einfache User-Schleife, direktes Pruning – minimale Komplexität, maximale Zuverlässigkeit.

(Vereinfachte & praktische Edition – generisches Template)

Infrastruktur (Beispiel-Layout)

Host / Dienst Beispiel-IP Rolle Beispiel-CTID
Proxmox VE Host 192.168.50.10 Hypervisor, ZFS-Speicher
Immich LXC 192.168.50.142 Produktive Immich-Anwendung 142
Syncthing LXC 192.168.50.135 Multi-User-Syncthing-Instanz 135
Vault/Restic LXC 192.168.50.220 Backup-Controller 220
NAS 192.168.50.80 Restic REST-Server (lauscht auf 10.20.20.80)

Read-Only Mount-Points im Vault-LXC

Beispiel-ZFS-Dataset auf Host Mount-Point im Vault-LXC Zweck
/tank/subvol-142-disk-1 /source/immich Immich-Bibliothek/Uploads
/tank/subvol-135-disk-2 /source/syncthing-alice Syncthing-Benutzer Alice
/tank/subvol-135-disk-3 /source/syncthing-bob Syncthing-Benutzer Bob
/tank/subvol-135-disk-4 /source/syncthing-charlie Syncthing-Benutzer Charlie

Konfiguriert auf dem Proxmox-Host mit read-only Mounts (ro=1).

Restic REST-Server auf dem NAS (10.20.20.80:8000)

Zwei separate Repositories:

  • /photos → authentifiziert mit Benutzer photos-backup
  • /sync-main → authentifiziert mit Benutzer sync-backup

--append-only wird nicht verwendet, damit der Backup-Client das Pruning direkt übernimmt.

Generisches Backup-Script-Template

Platziere dieses Script im Vault-LXC unter /root/backup-mountpoints.sh:

#!/bin/bash
# Einfaches Backup-Script-Template für Immich + Multi-User-Syncthing
# --- KONFIGURATION: IMMICH ---
IMMICH_REPO="rest:http://photos-backup:StrongPhotoPass2025@10.20.20.80:8000/photos"
IMMICH_PASS="StrongPhotoPass2025"
# --- KONFIGURATION: SYNCTHING ---
SYNC_REPO="rest:http://sync-backup:StrongSyncPass2025@10.20.20.80:8000/sync-main"
SYNC_PASS="StrongSyncPass2025"

echo "--- Backup gestartet: $(date) ---"

# ==========================================
# 1. IMMICH BACKUP
# ==========================================
echo "Sichere Immich..."
RESTIC_PASSWORD=$IMMICH_PASS restic -r $IMMICH_REPO backup /source/immich \
    --host immich-server --tag "auto" --verbose

# Prune Immich-Repo
RESTIC_PASSWORD=$IMMICH_PASS restic -r $IMMICH_REPO forget \
    --keep-last 3 --keep-daily 7 --keep-weekly 4 --prune

# ==========================================
# 2. SYNCTHING BACKUP
# ==========================================
echo "Sichere Syncthing-Benutzer..."
USERS=("alice" "bob" "charlie")
for USER in "${USERS[@]}"; do
    echo "Bearbeite $USER..."
    RESTIC_PASSWORD=$SYNC_PASS restic -r $SYNC_REPO backup "/source/syncthing-$USER" \
        --host syncthing-server --tag "user:$USER" --verbose
done

# Prune Syncthing-Repo (einmalig für alle Benutzer)
RESTIC_PASSWORD=$SYNC_PASS restic -r $SYNC_REPO forget \
    --keep-last 3 --keep-daily 7 --keep-weekly 4 --prune

echo "--- Backup abgeschlossen: $(date) ---"

Sicherheitshärtung:

chmod 700 /root/backup-mountpoints.sh
chown root:root /root/backup-mountpoints.sh

Automatisierung & Zeitplanung

Crontab im Vault-LXC (crontab -e):

0 3 * * * /root/backup-mountpoints.sh >> /var/log/restic-backup.log 2>&1

Log-Rotation (/etc/logrotate.d/restic):

/var/log/restic-backup.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
}

Sicherheitsmodell

  • Isolation: Produktions-Container (Immich & Syncthing) haben keinen Netzwerkzugriff auf den NAS-Backup-Speicher.
  • Read-Only-Zugriff: Vault-LXC kann Live-Daten nicht verändern oder löschen.
  • Immutability: --append-only auf dem REST-Server verhindert Löschung von Snapshots, selbst wenn Vault kompromittiert wird.
  • Verschlüsselung & Integrität: Restic verschlüsselt alle Daten und führt kryptografische Prüfungen durch.

Wiederherstellungs-Beispiele

# Immich-Snapshots auflisten
RESTIC_PASSWORD=StrongPhotoPass2025 restic -r rest:http://photos-backup:...@10.20.20.80:8000/photos snapshots

# Neueste Immich-Version wiederherstellen
RESTIC_PASSWORD=StrongPhotoPass2025 restic -r ... restore latest --target /tmp/restore-immich

# Nur Snapshots von Bob auflisten
RESTIC_PASSWORD=StrongSyncPass2025 restic -r ... snapshots --tag user:bob

# Bob-Daten wiederherstellen
RESTIC_PASSWORD=StrongSyncPass2025 restic -r ... restore latest --tag user:bob --target /tmp/restore-bob

Dieses Template bewahrt die Einfachheit und Wirksamkeit deines funktionierenden Setups, hält aber alle Bezeichner generisch und sicher. Kopieren, anpassen und sicher einsetzen!