#!/bin/bash set -e echo "🧯 Hördle restore script – Rollback auf früheres Datenbank-Backup" # Hilfsfunktion für Fehlerausgabe die() { echo "❌ $1" >&2 exit 1 } # Backup-Verzeichnis BACKUP_DIR="./backups" if [ ! -d "$BACKUP_DIR" ]; then die "Kein Backup-Verzeichnis gefunden (${BACKUP_DIR}). Es scheint noch kein Deployment-Backup erstellt worden zu sein." fi # Argument: gewünschter Backup-Timestamp oder 'latest' TARGET="$1" if [ -z "$TARGET" ]; then echo "⚙️ Nutzung:" echo " ./scripts/restore.sh latest # neuestes Backup zurückspielen" echo " ./scripts/restore.sh 20250101_120000 # bestimmtes Backup (Timestamp aus Dateiname)" echo "" echo "Verfügbare Backups:" ls -1 "${BACKUP_DIR}"/*.db 2>/dev/null || echo " (keine .db-Backups gefunden)" exit 1 fi # DB-Pfad wie in deploy.sh bestimmen DB_PATH="" if [ -f "docker-compose.yml" ]; then DB_PATH=$(grep -oP 'DATABASE_URL=file:\K[^\s]+' docker-compose.yml | head -1) fi if [ -z "$DB_PATH" ] && [ -f ".env" ]; then DB_PATH=$(grep -oP '^DATABASE_URL=file:\K.+' .env | head -1) fi DB_PATH=$(echo "$DB_PATH" | tr -d '"' | tr -d "'") if [ -z "$DB_PATH" ]; then die "Konnte den Datenbank-Pfad aus docker-compose.yml oder .env nicht ermitteln." fi # Containerpfad zu Hostpfad umbauen (/app/... -> ./...) DB_PATH=$(echo "$DB_PATH" | sed 's|/app/|./|') echo "📁 Ziel-Datenbank-Datei: $DB_PATH" # Backup-Datei bestimmen if [ "$TARGET" = "latest" ]; then BACKUP_FILE=$(ls -t "${BACKUP_DIR}"/*.db 2>/dev/null | head -1 || true) [ -z "$BACKUP_FILE" ] && die "Kein Backup gefunden." else # Versuchen, exakten Dateinamen zu finden if [ -f "${BACKUP_DIR}/${TARGET}" ]; then BACKUP_FILE="${BACKUP_DIR}/${TARGET}" else # Versuchen, anhand des Timestamps ein Backup zu finden BACKUP_FILE=$(ls "${BACKUP_DIR}"/*"${TARGET}"*.db 2>/dev/null | head -1 || true) fi [ -z "$BACKUP_FILE" ] && die "Kein Backup für '${TARGET}' gefunden." fi echo "⏪ Verwende Backup-Datei: $BACKUP_FILE" if [ ! -f "$BACKUP_FILE" ]; then die "Backup-Datei existiert nicht: $BACKUP_FILE" fi read -p "❗ Dies überschreibt die aktuelle Datenbank-Datei. Fortfahren? [y/N] " CONFIRM if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then echo "Abgebrochen." exit 0 fi echo "📦 Kopiere Backup nach: $DB_PATH" cp "$BACKUP_FILE" "$DB_PATH" echo "🔄 Starte Docker-Container neu..." docker compose restart hoerdle echo "✅ Restore abgeschlossen." echo "ℹ️ Hinweis: Der Code-Stand (Git-Commit) ist nicht automatisch zurückgedreht." echo " Falls du auch die App-Version zurückrollen möchtest, checke lokal den passenden Commit/Tag aus" echo " und führe anschließend wieder ./scripts/deploy.sh aus."