chore: restore-db.sh für Restic/Hetzner + Production-Server Restore
This commit is contained in:
parent
9d8a73e2a9
commit
1801f8f7fd
2
.gitignore
vendored
2
.gitignore
vendored
@ -31,3 +31,5 @@ tracker.db-shm
|
||||
tracker.db-wal
|
||||
tracker.db.broken
|
||||
*.db.broken
|
||||
data/tracker.db
|
||||
data/*.bak.*
|
||||
|
||||
62
scripts/restore-db.sh
Executable file
62
scripts/restore-db.sh
Executable file
@ -0,0 +1,62 @@
|
||||
#!/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=<passwort>"
|
||||
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"
|
||||
Loading…
Reference in New Issue
Block a user