Files
mwitnessing/_deploy/migrate-deployment.sh
2025-04-10 03:02:30 +03:00

114 lines
3.4 KiB
Bash

#!/bin/bash
# Script to migrate from Git clone deployment to standard Docker deployment
set -e
# Print usage
print_usage() {
echo "Usage: $0 [OPTIONS]"
echo "Migrate from Git clone deployment to standard Docker deployment"
echo ""
echo "Options:"
echo " -s, --source CONTAINER Source container name (default: jwpw-app-staging)"
echo " -c, --compose FILE Docker Compose file for new deployment (default: _deploy/standard-docker-compose.yml)"
echo " -b, --backup DIR Backup directory (default: ./deployment_backup)"
echo " -h, --help Show this help message"
exit 1
}
# Default values
SOURCE_CONTAINER="jwpw-app-staging"
COMPOSE_FILE="_deploy/standard-docker-compose.yml"
BACKUP_DIR="./deployment_backup"
# Parse command line arguments
while [[ $# -gt 0 ]]; do
case $1 in
-s|--source)
SOURCE_CONTAINER="$2"
shift 2
;;
-c|--compose)
COMPOSE_FILE="$2"
shift 2
;;
-b|--backup)
BACKUP_DIR="$2"
shift 2
;;
-h|--help)
print_usage
;;
*)
echo "Unknown option: $1"
print_usage
;;
esac
done
echo "=========================================================="
echo "Migration from Git clone deployment to standard deployment"
echo "=========================================================="
echo "Source container: $SOURCE_CONTAINER"
echo "Compose file: $COMPOSE_FILE"
echo "Backup directory: $BACKUP_DIR"
echo ""
# Confirm before proceeding
read -p "Do you want to proceed? (y/n) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Migration aborted."
exit 1
fi
# Check if source container exists
if ! docker ps -a | grep -q "$SOURCE_CONTAINER"; then
echo "Error: Source container '$SOURCE_CONTAINER' not found."
exit 1
fi
# Create backup directory
mkdir -p "$BACKUP_DIR/permits"
mkdir -p "$BACKUP_DIR/uploads"
mkdir -p "$BACKUP_DIR/logs"
echo "Step 1: Backing up data from source container..."
docker cp "$SOURCE_CONTAINER:/app/public/content/permits/." "$BACKUP_DIR/permits/"
docker cp "$SOURCE_CONTAINER:/app/public/content/uploads/." "$BACKUP_DIR/uploads/"
docker cp "$SOURCE_CONTAINER:/app/logs/." "$BACKUP_DIR/logs/"
echo "Backup completed successfully."
echo "Step 2: Checking if the Compose file exists..."
if [ ! -f "$COMPOSE_FILE" ]; then
echo "Error: Compose file '$COMPOSE_FILE' not found."
exit 1
fi
echo "Step 3: Deploying new Docker containers..."
docker-compose -f "$COMPOSE_FILE" up -d
echo "New containers deployed."
# Get the new container name
NEW_CONTAINER=$(docker-compose -f "$COMPOSE_FILE" ps -q nextjs-app)
if [ -z "$NEW_CONTAINER" ]; then
echo "Error: Could not find new container. Please check the deployment."
exit 1
fi
echo "Step 4: Restoring data to new container..."
docker cp "$BACKUP_DIR/permits/." "$NEW_CONTAINER:/app/public/content/permits/"
docker cp "$BACKUP_DIR/uploads/." "$NEW_CONTAINER:/app/public/content/uploads/"
echo "Data restored successfully."
echo "Step 5: Setting correct permissions..."
docker exec -it "$NEW_CONTAINER" chown -R nextjs:nodejs /app/public/content
echo "=========================================================="
echo "Migration completed successfully!"
echo "New container: $NEW_CONTAINER"
echo "Backup saved to: $BACKUP_DIR"
echo ""
echo "To verify the deployment, visit your application URL."
echo "To roll back, stop the new containers and restart the old ones."
echo "=========================================================="