#!/usr/bin/env bash set -euo pipefail ########## KONFIG ########## BACKUP_ROOT="/var/backups/fullserver" PGHOST="localhost" PGPORT="5432" PGUSER="florian" PGDATABASE="oqtane" # Wohin die Dateien von oqtane.server gehören OQTANE_DIR="/home/konstantin/oqtane.framework/oqtane.server" ########## BACKUP-ORDNER AUSWÄHLEN ########## # Aufruf: ./restore-backup.sh [oqtane_TIMESTAMP] # Ohne Argument -> neuestes Backup verwenden if [[ $# -ge 1 ]]; then BACKUP_SUBDIR="$1" else BACKUP_SUBDIR="$(ls -1 "${BACKUP_ROOT}" | sort | tail -n 1)" fi BACKUP_DIR="${BACKUP_ROOT}/${BACKUP_SUBDIR}" if [[ ! -d "$BACKUP_DIR" ]]; then echo "Backup-Verzeichnis nicht gefunden: $BACKUP_DIR" exit 1 fi DUMP_FILE="${BACKUP_DIR}/db_${PGDATABASE}.dump" FILES_ARCHIVE="${BACKUP_DIR}/oqtane_files.tar.gz" if [[ ! -f "$DUMP_FILE" ]]; then echo "Dump-Datei nicht gefunden: $DUMP_FILE" exit 1 fi echo "Verwende Backup: $BACKUP_DIR" echo ########## WARNUNG ########## echo "ACHTUNG:" echo " - Die Datenbank '${PGDATABASE}' wird GELÖSCHT und aus dem Backup neu erstellt." echo " - Der Ordner '${OQTANE_DIR}' wird mit den Dateien aus dem Backup überschrieben (Status aus dem Archiv)." echo read -rp "Fortfahren? (ja/nein): " answer if [[ "$answer" != "ja" ]]; then echo "Abgebrochen." exit 0 fi ########## 1) DATENBANK WIEDERHERSTELLEN ########## echo "[DB] Versuche, bestehende Datenbank zu droppen (falls vorhanden)…" dropdb -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" "$PGDATABASE" 2>/dev/null || echo "[DB] Datenbank existierte nicht, ok." echo "[DB] Neue leere Datenbank anlegen…" createdb -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" "$PGDATABASE" echo "[DB] Backup-Dump einspielen…" pg_restore -h "$PGHOST" -p "$PGPORT" -U "$PGUSER" \ -d "$PGDATABASE" -c "$DUMP_FILE" echo "[DB] Datenbank-Restore abgeschlossen." echo ########## 2) DATEIEN VON OQTANE.SERVER WIEDERHERSTELLEN ########## if [[ -f "$FILES_ARCHIVE" ]]; then echo "[FILES] Sicherung des aktuellen Oqtane-Ordners…" if [[ -d "$OQTANE_DIR" ]]; then mv "$OQTANE_DIR" "${OQTANE_DIR}.old.$(date +%s)" fi echo "[FILES] Entpacke ${FILES_ARCHIVE}…" tar -xvpzf "$FILES_ARCHIVE" echo "[FILES] Dateien-Restore abgeschlossen." else echo "[FILES] Archiv ${FILES_ARCHIVE} nicht gefunden, überspringe Dateirestore." fi echo echo "Restore vollständig abgeschlossen."