uchill/scripts/deploy.sh

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}"