#!/usr/bin/env bash set -euo pipefail BACKUP_DIR="/var/backups/inventarsystem" COMPOSE_FILE="docker-compose-multitenant.yml" # 1. Find the latest backup bundle LATEST_BACKUP=$(ls -t "$BACKUP_DIR"/full_backup_*.tar.gz | head -n1 2>/dev/null || true) if [[ -z "$LATEST_BACKUP" ]]; then echo "Error: No backup bundle found in $BACKUP_DIR" exit 1 fi echo "--- RESTORE PROCEDURE ---" echo "Found latest bundle: $(basename "$LATEST_BACKUP")" read -p "WARNING: This will OVERWRITE your current database and assets! Continue? (y/N) " confirm [[ "$confirm" != "y" ]] && exit 1 # 2. Extract the bundle to a temporary location RESTORE_TMP="/tmp/restore_$(date +%s)" mkdir -p "$RESTORE_TMP" echo "Extracting bundle..." tar -xzf "$LATEST_BACKUP" -C "$RESTORE_TMP" # 3. Stop application echo "Stopping application..." docker compose -f "$COMPOSE_FILE" stop app # 4. Restore Database if [ -f "$RESTORE_TMP/db.archive.gz" ]; then echo "Restoring MongoDB..." zcat "$RESTORE_TMP/db.archive.gz" | docker compose -f "$COMPOSE_FILE" exec -T mongodb mongorestore --archive --gzip --drop else echo "Warning: Database archive not found in bundle." fi # 5. Restore Assets if [ -f "$RESTORE_TMP/assets.tar.gz" ]; then echo "Restoring Assets (Uploads/Thumbnails/Previews)..." tar -xzf "$RESTORE_TMP/assets.tar.gz" -C . else echo "Warning: Asset archive not found in bundle." fi # 6. Restore Logs (Optional) if [ -f "$RESTORE_TMP/logs.tar.gz" ]; then echo "Restoring Logs..." tar -xzf "$RESTORE_TMP/logs.tar.gz" -C . fi # 7. Start application echo "Restarting application..." docker compose -f "$COMPOSE_FILE" start app # 8. Cleanup rm -rf "$RESTORE_TMP" echo "Restore complete!"