#!/bin/bash # Restore tracker.db from Restic backup (Hetzner Storage Box) # # Voraussetzungen: # - restic installiert # - RESTIC_PASSWORD aus Keychain: security find-generic-password -s restic-macmini -w # - SSH-Key für Storage Box konfiguriert # # Nutzung: # ./scripts/restore-db.sh # Letzte Version # ./scripts/restore-db.sh latest # Letzte Version (explizit) # ./scripts/restore-db.sh 2026-04-01 # Bestimmtes Datum (sucht nächsten Snapshot) set -euo pipefail REPO="sftp:u438391@u438391.your-storagebox.de:macmini-backup" DB_PATH_IN_BACKUP="Users/dotty/Nextcloud/dotty/projekte/2026-03-27 Antragstracker Hagen _WIP_/antragstracker/data/tracker.db" RESTORE_TARGET="./data/tracker.db" export RESTIC_PASSWORD=$(security find-generic-password -s restic-macmini -w 2>/dev/null || echo "") if [ -z "$RESTIC_PASSWORD" ]; then echo "❌ Restic-Passwort nicht im Keychain gefunden (restic-macmini)" echo " Manuell: export RESTIC_PASSWORD=" exit 1 fi SNAPSHOT="${1:-latest}" echo "🔄 Restore tracker.db aus Restic (Snapshot: $SNAPSHOT)..." # Restore in temporäres Verzeichnis TMPDIR=$(mktemp -d) restic -r "$REPO" restore "$SNAPSHOT" \ --include "$DB_PATH_IN_BACKUP" \ --target "$TMPDIR" RESTORED="$TMPDIR/$DB_PATH_IN_BACKUP" if [ ! -f "$RESTORED" ]; then echo "❌ tracker.db nicht im Snapshot gefunden" echo " Verfügbare Snapshots:" restic -r "$REPO" snapshots --latest 5 rm -rf "$TMPDIR" exit 1 fi # Backup der aktuellen DB falls vorhanden if [ -f "$RESTORE_TARGET" ]; then BACKUP="$RESTORE_TARGET.bak.$(date +%Y%m%d-%H%M%S)" cp "$RESTORE_TARGET" "$BACKUP" echo "📦 Aktuelle DB gesichert: $BACKUP" fi mkdir -p "$(dirname "$RESTORE_TARGET")" mv "$RESTORED" "$RESTORE_TARGET" rm -rf "$TMPDIR" SIZE=$(ls -lh "$RESTORE_TARGET" | awk '{print $5}') echo "✅ tracker.db restored ($SIZE)" echo "" echo "Alternativ direkt vom Production-Server:" echo " ssh vserver 'docker cp antragstracker-hagen:/app/data/tracker.db /tmp/tracker-export.db && cat /tmp/tracker-export.db' > data/tracker.db"