forked from pratapVansh/CPMS
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
134 lines (111 loc) · 3.51 KB
/
Copy pathdeploy.sh
File metadata and controls
134 lines (111 loc) · 3.51 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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/bash
#########################################
# CPMS Deployment Script
# Usage: ./deploy.sh [environment]
# Example: ./deploy.sh production
# ./deploy.sh dev
#########################################
set -e # Exit on error
ENVIRONMENT=${1:-production}
ENV_FILE=".env.${ENVIRONMENT}"
echo "========================================="
echo "CPMS Deployment Script"
echo "Environment: $ENVIRONMENT"
echo "========================================="
# Check if environment file exists
if [ ! -f "$ENV_FILE" ]; then
echo "❌ Error: Environment file '$ENV_FILE' not found!"
echo "Please create it first with all required variables."
exit 1
fi
# Load environment variables
echo "📦 Loading environment from $ENV_FILE..."
export $(cat $ENV_FILE | grep -v '^#' | xargs)
# Check if Docker is running
if ! docker info > /dev/null 2>&1; then
echo "❌ Error: Docker is not running!"
exit 1
fi
echo "✅ Docker is running"
# Pull latest code
echo ""
echo "📥 Pulling latest code from GitHub..."
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
echo "Current branch: $CURRENT_BRANCH"
if [ "$ENVIRONMENT" == "production" ]; then
EXPECTED_BRANCH="main"
else
EXPECTED_BRANCH="dev"
fi
if [ "$CURRENT_BRANCH" != "$EXPECTED_BRANCH" ]; then
echo "⚠️ Warning: You are on branch '$CURRENT_BRANCH' but deploying '$ENVIRONMENT'"
echo "Expected branch: '$EXPECTED_BRANCH'"
read -p "Continue anyway? (y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
git pull origin $CURRENT_BRANCH
# Login to GitHub Container Registry
echo ""
echo "🔐 Logging in to GitHub Container Registry..."
if [ -z "$GITHUB_TOKEN" ]; then
echo "⚠️ GITHUB_TOKEN not found in $ENV_FILE"
echo "Please enter your GitHub Personal Access Token:"
read -s GITHUB_TOKEN
fi
echo $GITHUB_TOKEN | docker login ghcr.io -u $GITHUB_USERNAME --password-stdin
# Pull latest Docker images
echo ""
echo "📥 Pulling latest Docker images..."
docker compose -f docker-compose.prod.yml pull
# Run database migrations (if needed)
echo ""
read -p "Run database migrations? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
echo "🔄 Running database migrations..."
docker compose -f docker-compose.prod.yml run --rm api npx prisma migrate deploy
fi
# Deploy with zero downtime
echo ""
echo "🚀 Deploying services..."
docker compose -f docker-compose.prod.yml up -d --no-deps --build
# Wait for services to be healthy
echo ""
echo "⏳ Waiting for services to be healthy..."
sleep 10
# Check service status
echo ""
echo "📊 Service Status:"
docker compose -f docker-compose.prod.yml ps
# Health check
echo ""
echo "🏥 Health Check:"
HEALTH_URL="http://localhost:5000/api/v1/health"
HEALTH_STATUS=$(curl -s -o /dev/null -w "%{http_code}" $HEALTH_URL || echo "000")
if [ "$HEALTH_STATUS" == "200" ]; then
echo "✅ API is healthy!"
curl -s $HEALTH_URL | jq '.' || echo ""
else
echo "❌ API health check failed! Status: $HEALTH_STATUS"
echo ""
echo "📋 API Logs:"
docker compose -f docker-compose.prod.yml logs api --tail 30
exit 1
fi
# Clean up old images
echo ""
echo "🧹 Cleaning up old Docker images..."
docker image prune -af
echo ""
echo "========================================="
echo "✅ Deployment Complete!"
echo "========================================="
echo ""
echo "Useful commands:"
echo " View logs: docker compose -f docker-compose.prod.yml logs -f"
echo " Restart API: docker compose -f docker-compose.prod.yml restart api"
echo " Stop all: docker compose -f docker-compose.prod.yml down"
echo ""