96 lines
2.6 KiB
Bash
Executable File
96 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# ==============================================
|
|
# Deployment Script for Dev/Prod Environments
|
|
# ==============================================
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Parse arguments
|
|
ENV=${1:-dev}
|
|
CONFIG_FILE=".end.${ENV}"
|
|
|
|
if [ ! -f "$CONFIG_FILE" ]; then
|
|
echo -e "${RED}Error: Configuration file $CONFIG_FILE not found${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}Loading configuration from $CONFIG_FILE...${NC}"
|
|
source "$CONFIG_FILE"
|
|
|
|
# Set variables based on environment
|
|
if [ "$ENV" = "dev" ]; then
|
|
HOST=$DEV_HOST
|
|
USER=$DEV_USER
|
|
PATH=$DEV_PATH
|
|
PORT_WEB=$DEV_PORT_WEB
|
|
elif [ "$ENV" = "prod" ]; then
|
|
HOST=$PROD_HOST
|
|
USER=$PROD_USER
|
|
PATH=$PROD_PATH
|
|
PORT_WEB=$PROD_PORT_WEB
|
|
else
|
|
echo -e "${RED}Error: Unknown environment $ENV${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${GREEN}Deploying to $ENV environment...${NC}"
|
|
echo -e "Host: ${YELLOW}$HOST${NC}"
|
|
echo -e "Path: ${YELLOW}$PATH${NC}"
|
|
|
|
# SSH deployment
|
|
ssh -o StrictHostKeyChecking=no ${USER}@${HOST} << EOF
|
|
set -e
|
|
cd ${PATH}
|
|
|
|
echo "📦 Pulling latest changes..."
|
|
git pull origin main || git pull origin master || git pull origin develop || true
|
|
|
|
if [ "$BACKUP_BEFORE_DEPLOY" = "true" ] && [ "$ENV" = "prod" ]; then
|
|
echo "💾 Creating database backup..."
|
|
mkdir -p ${BACKUP_PATH}
|
|
docker compose exec -T db pg_dump -U ${POSTGRES_USER} ${POSTGRES_DB} > ${BACKUP_PATH}/backup_\$(date +%Y%m%d_%H%M%S).sql || true
|
|
fi
|
|
|
|
echo "🛑 Stopping services..."
|
|
docker compose down --timeout 30 || true
|
|
|
|
echo "🔨 Building images..."
|
|
docker compose build --no-cache
|
|
|
|
echo "🚀 Starting services..."
|
|
docker compose up -d
|
|
|
|
echo "⏳ Waiting for services to be ready..."
|
|
sleep 15
|
|
|
|
if [ "$AUTO_MIGRATE" = "true" ]; then
|
|
echo "📊 Running migrations..."
|
|
docker compose exec -T web python manage.py migrate || true
|
|
fi
|
|
|
|
if [ "$AUTO_COLLECTSTATIC" = "true" ]; then
|
|
echo "📁 Collecting static files..."
|
|
docker compose exec -T web python manage.py collectstatic --noinput || true
|
|
fi
|
|
|
|
if [ "$RESTART_AFTER_DEPLOY" = "true" ]; then
|
|
echo "🔄 Restarting services..."
|
|
docker compose restart
|
|
fi
|
|
|
|
echo "✅ Deployment completed!"
|
|
|
|
echo "🏥 Running health check..."
|
|
sleep 10
|
|
docker compose ps
|
|
curl -f ${HEALTH_CHECK_URL} || echo "⚠️ Health check failed"
|
|
EOF
|
|
|
|
echo -e "${GREEN}✅ Deployment to $ENV completed successfully!${NC}"
|