diff --git a/restore.sh b/restore.sh new file mode 100755 index 0000000..6be2b93 --- /dev/null +++ b/restore.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +set -euo pipefail + +# Usage: ./restore.sh +# Example: ./restore.sh 2025-08-24-14-30 + +if [ $# -ne 1 ]; then + echo "Usage: $0 " + echo "Example: $0 2025-08-24-14-30" + echo "" + echo "Available backups:" + ls -1t backups/mongo-volume-backup-*.tar.gz 2>/dev/null | sed 's/.*mongo-volume-backup-\(.*\)\.tar\.gz/ \1/' || echo " No backups found" + exit 1 +fi + +TIMESTAMP="$1" +BACKUP_DIR="${BACKUP_DIR:-backups}" +BACKUP_FILE="$BACKUP_DIR/mongo-volume-backup-$TIMESTAMP.tar.gz" + +# Check if backup file exists +if [ ! -f "$BACKUP_FILE" ]; then + echo "Error: Backup file '$BACKUP_FILE' not found" + echo "" + echo "Available backups:" + ls -1t "$BACKUP_DIR"/mongo-volume-backup-*.tar.gz 2>/dev/null | sed 's/.*mongo-volume-backup-\(.*\)\.tar\.gz/ \1/' || echo " No backups found" + exit 1 +fi + +echo "Restoring from backup: $BACKUP_FILE" +echo "WARNING: This will replace the current mongo-volume data!" +read -p "Are you sure you want to continue? (y/N): " -n 1 -r +echo +if [[ ! $REPLY =~ ^[Yy]$ ]]; then + echo "Restore cancelled" + exit 0 +fi + +# Scale down mongo service +echo "Scaling down mongo service..." +docker service scale utility-bills-tracker_mongo=0 + +# Backup current volume (just in case) +SAFETY_BACKUP="mongo-volume-pre-restore-$(date +%Y-%m-%d-%H-%M).tar.gz" +echo "Creating safety backup: $SAFETY_BACKUP" +sudo tar -czf "$SAFETY_BACKUP" mongo-volume 2>/dev/null || true + +# Remove current volume +echo "Removing current mongo-volume..." +sudo rm -rf mongo-volume + +# Extract backup +echo "Extracting backup..." +sudo tar -xzf "$BACKUP_FILE" + +# Set proper permissions +echo "Setting permissions..." +sudo chown -R 999:999 mongo-volume + +# Scale mongo service back up +echo "Scaling mongo service back up..." +docker service scale utility-bills-tracker_mongo=1 + +echo "Restore completed successfully!" +echo "Safety backup saved as: $SAFETY_BACKUP"