80 lines
2.3 KiB
Bash
80 lines
2.3 KiB
Bash
#!/bin/bash
|
|
|
|
# Emergency Rollback Script for Production
|
|
# Usage: ./scripts/rollback.sh [backup_tag]
|
|
|
|
set -e
|
|
|
|
echo "🚨 EMERGENCY ROLLBACK INITIATED"
|
|
|
|
# Change to project directory
|
|
cd "$(dirname "$0")/.."
|
|
|
|
# Check if backup tag provided
|
|
if [ -n "$1" ]; then
|
|
BACKUP_TAG="$1"
|
|
echo "🔄 Rolling back to specific backup: $BACKUP_TAG"
|
|
else
|
|
# Get the latest backup
|
|
BACKUP_TAG=$(docker images --format "table {{.Repository}}:{{.Tag}}" | grep "vitron-frontend-backup" | head -1 | awk '{print $1}')
|
|
if [ -z "$BACKUP_TAG" ]; then
|
|
echo "❌ No backup images found!"
|
|
echo "Available images:"
|
|
docker images | grep vitron
|
|
exit 1
|
|
fi
|
|
echo "🔄 Rolling back to latest backup: $BACKUP_TAG"
|
|
fi
|
|
|
|
# Stop current service
|
|
echo "🛑 Stopping current deployment..."
|
|
docker-compose -f docker-compose.yml down || true
|
|
|
|
# Tag backup as production image
|
|
echo "🏷️ Tagging backup as production image..."
|
|
docker tag "$BACKUP_TAG" vitron-frontend-prod:latest
|
|
|
|
# Start rollback service
|
|
echo "🔨 Starting rollback service..."
|
|
docker-compose -f docker-compose.yml up -d --no-build
|
|
|
|
# Wait for service
|
|
echo "⏳ Waiting for rollback service..."
|
|
sleep 30
|
|
|
|
# Health check
|
|
echo "🏥 Health check on rollback service..."
|
|
HEALTH_RETRIES=0
|
|
MAX_HEALTH_RETRIES=5
|
|
|
|
while [ $HEALTH_RETRIES -lt $MAX_HEALTH_RETRIES ]; do
|
|
if docker exec vitron-frontend-prod wget --no-verbose --tries=1 --spider --timeout=10 http://localhost:3000/ 2>/dev/null; then
|
|
echo "✅ Rollback service healthy!"
|
|
break
|
|
else
|
|
echo "⏳ Health check attempt $((HEALTH_RETRIES + 1))/$MAX_HEALTH_RETRIES failed, retrying..."
|
|
sleep 10
|
|
HEALTH_RETRIES=$((HEALTH_RETRIES + 1))
|
|
fi
|
|
done
|
|
|
|
if [ $HEALTH_RETRIES -eq $MAX_HEALTH_RETRIES ]; then
|
|
echo "❌ Rollback service failed health check!"
|
|
echo "🛑 Stopping rollback attempt..."
|
|
docker-compose -f docker-compose.yml down
|
|
exit 1
|
|
fi
|
|
|
|
# Final verification
|
|
echo "🏥 Final verification..."
|
|
sleep 10
|
|
|
|
if curl -f -s --max-time 10 https://vitrown.com/ > /dev/null; then
|
|
echo "✅ ROLLBACK COMPLETED SUCCESSFULLY!"
|
|
echo "🌐 Site is now accessible at https://vitrown.com"
|
|
echo "📋 Rolled back to: $BACKUP_TAG"
|
|
else
|
|
echo "❌ Final verification failed!"
|
|
echo "🔍 Check Traefik configuration and DNS settings"
|
|
exit 1
|
|
fi |