-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
executable file
·79 lines (61 loc) · 2.57 KB
/
deploy.sh
File metadata and controls
executable file
·79 lines (61 loc) · 2.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
#!/bin/bash
# MysteryMixClub Deployment Script
# Usage: ./deploy.sh [environment]
# Example: ./deploy.sh production
set -e
ENVIRONMENT=${1:-production}
echo "🚀 Deploying MysteryMixClub to $ENVIRONMENT..."
# Check if .env file exists
if [ ! -f ".env.$ENVIRONMENT" ]; then
echo "❌ Error: .env.$ENVIRONMENT file not found!"
echo "Please create .env.$ENVIRONMENT from .env.production.example"
exit 1
fi
# Load environment variables
export $(cat .env.$ENVIRONMENT | grep -v '^#' | xargs)
echo "✓ Environment variables loaded"
# Pull latest code (if deploying from git)
if [ -d ".git" ]; then
echo "📥 Pulling latest code..."
git pull origin main
echo "✓ Code updated"
fi
# Stop existing containers
echo "🛑 Stopping existing containers..."
docker compose --env-file .env.$ENVIRONMENT -f docker-compose.prod.yml down
# Build and start containers
echo "🔨 Building containers..."
docker compose --env-file .env.$ENVIRONMENT -f docker-compose.prod.yml build --no-cache
echo "🚀 Starting containers..."
docker compose --env-file .env.$ENVIRONMENT -f docker-compose.prod.yml up -d
# Wait for database to be ready
echo "⏳ Waiting for database to be ready..."
echo "This may take 30-60 seconds on first startup..."
# Wait for MySQL to be ready (up to 2 minutes)
RETRY_COUNT=0
MAX_RETRIES=24 # 24 * 5 seconds = 2 minutes
until docker compose --env-file .env.$ENVIRONMENT -f docker-compose.prod.yml exec -T db mysql -u root -p"$MYSQL_ROOT_PASSWORD" -e "SELECT 1" >/dev/null 2>&1; do
RETRY_COUNT=$((RETRY_COUNT + 1))
if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
echo "❌ Database failed to start after 2 minutes"
echo "Check logs with: docker compose --env-file .env.$ENVIRONMENT -f docker-compose.prod.yml logs db"
exit 1
fi
echo "Waiting for database... (attempt $RETRY_COUNT/$MAX_RETRIES)"
sleep 5
done
echo "✓ Database is ready!"
# Run database migrations
echo "📊 Running database migrations..."
docker compose --env-file .env.$ENVIRONMENT -f docker-compose.prod.yml exec -T backend alembic upgrade head
echo "✅ Deployment complete!"
echo ""
echo "📋 Container status:"
docker compose --env-file .env.$ENVIRONMENT -f docker-compose.prod.yml ps
echo ""
echo "🌐 Application should be available at: $FRONTEND_URL"
echo ""
echo "📝 Useful commands:"
echo " View logs: docker compose --env-file .env.$ENVIRONMENT -f docker-compose.prod.yml logs -f"
echo " Stop: docker compose --env-file .env.$ENVIRONMENT -f docker-compose.prod.yml down"
echo " Restart: docker compose --env-file .env.$ENVIRONMENT -f docker-compose.prod.yml restart"