58 lines
1.7 KiB
Bash
Executable File
58 lines
1.7 KiB
Bash
Executable File
#!/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!" |