#!/bin/bash # Steuerkram – Restore-Script # Spielt ein Backup-Paar (DB + Uploads) ein und führt anschließend alle # ausstehenden Migrationen aus. # # Usage: # ./scripts/restore.sh # neuestes vollständiges Backup # ./scripts/restore.sh 20260517_134945 # bestimmten Timestamp set -eo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)" BACKUP_DIR="$PROJECT_DIR/backups" COMPOSE="docker compose -f $PROJECT_DIR/docker-compose.yml --project-directory $PROJECT_DIR" # --- Timestamp ermitteln --- if [ -n "$1" ]; then TS="$1" else # Neuesten Timestamp finden, für den BEIDE Dateien existieren TS="" for DB_FILE in $(ls -t "$BACKUP_DIR"/steuerkram_db_????????_??????.sql 2>/dev/null); do CANDIDATE=$(basename "$DB_FILE" .sql | sed 's/steuerkram_db_//') UPL_FILE="$BACKUP_DIR/steuerkram_uploads_${CANDIDATE}.tar.gz" if [ -f "$UPL_FILE" ]; then TS="$CANDIDATE" break fi done fi DB_FILE="$BACKUP_DIR/steuerkram_db_${TS}.sql" UPL_FILE="$BACKUP_DIR/steuerkram_uploads_${TS}.tar.gz" # --- Dateien prüfen --- if [ -z "$TS" ]; then echo "FEHLER: Kein vollständiges Backup-Paar (DB + Uploads) gefunden." >&2 exit 1 fi if [ ! -f "$DB_FILE" ]; then echo "FEHLER: DB-Backup nicht gefunden: $DB_FILE" >&2 exit 1 fi if [ ! -f "$UPL_FILE" ]; then echo "FEHLER: Uploads-Backup nicht gefunden: $UPL_FILE" >&2 exit 1 fi echo "========================================" echo " Steuerkram Restore – $TS" echo "========================================" echo " DB: $DB_FILE" echo " Uploads: $UPL_FILE" echo "" # --- Sicherheitsabfrage --- read -r -p "Vorhandene Datenbank und Uploads werden ÜBERSCHRIEBEN. Fortfahren? [j/N] " CONFIRM if [[ ! "$CONFIRM" =~ ^[jJyY]$ ]]; then echo "Abgebrochen." exit 0 fi # --- Container-Status prüfen --- if ! $COMPOSE ps --status running db | grep -q "db"; then echo "FEHLER: DB-Container läuft nicht. Bitte erst 'docker compose up -d' ausführen." >&2 exit 1 fi if ! $COMPOSE ps --status running web | grep -q "web"; then echo "FEHLER: Web-Container läuft nicht." >&2 exit 1 fi # --- 1. Datenbank einspielen --- echo "" echo "[1/3] Datenbank importieren..." $COMPOSE exec -T db mariadb -u root -prootpass steuerkram < "$DB_FILE" echo " OK" # --- 2. Uploads einspielen --- echo "[2/3] Uploads entpacken..." $COMPOSE exec -T web sh -c " cat > /tmp/uploads_restore.tar.gz tar -xzf /tmp/uploads_restore.tar.gz -C /var/www/html/public/static/ rm /tmp/uploads_restore.tar.gz " < "$UPL_FILE" echo " OK" # --- 3. Migrationen --- echo "[3/3] Migrationen prüfen und einspielen..." MIGRATE_OUT=$($COMPOSE exec -T web php scripts/migrate.php 2>&1) echo "$MIGRATE_OUT" | sed 's/^/ /' if echo "$MIGRATE_OUT" | grep -q "FEHLER"; then echo "" echo "WARNUNG: Mindestens eine Migration ist fehlgeschlagen!" >&2 exit 1 fi echo "" echo "========================================" echo " Restore abgeschlossen." echo "========================================"