opencand.infra/deploy-db.sh
2025-06-07 18:49:00 +00:00

92 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# OpenCand Database Deployment Script
# This script deploys the database schema changes to the PostgreSQL container
set -e # Exit on any error
# Configuration
DB_CONTAINER="opencand_db"
DB_NAME="opencand"
DB_USER="root"
SQL_FILE="./db/db.sql"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${YELLOW}🚀 OpenCand Database Deployment Script${NC}"
echo "=================================="
# Check if Docker is running
if ! docker info >/dev/null 2>&1; then
echo -e "${RED}❌ Error: Docker is not running or not accessible${NC}"
exit 1
fi
# Check if the database container is running
if ! docker ps --format "table {{.Names}}" | grep -q "^${DB_CONTAINER}$"; then
echo -e "${RED}❌ Error: Database container '${DB_CONTAINER}' is not running${NC}"
echo "Please start the services with: docker-compose up -d"
exit 1
fi
# Check if SQL file exists
if [ ! -f "$SQL_FILE" ]; then
echo -e "${RED}❌ Error: SQL file '${SQL_FILE}' not found${NC}"
exit 1
fi
echo -e "${YELLOW}📋 Pre-deployment checks:${NC}"
echo "✅ Docker is running"
echo "✅ Database container is running"
echo "✅ SQL file exists"
echo ""
# Wait for database to be ready
echo -e "${YELLOW}⏳ Waiting for database to be ready...${NC}"
timeout=30
counter=0
while ! docker exec $DB_CONTAINER pg_isready -U $DB_USER -d $DB_NAME >/dev/null 2>&1; do
sleep 1
counter=$((counter + 1))
if [ $counter -ge $timeout ]; then
echo -e "${RED}❌ Error: Database failed to become ready within ${timeout} seconds${NC}"
exit 1
fi
done
echo "✅ Database is ready"
echo ""
# Create backup before deployment
echo -e "${YELLOW}💾 Creating database backup...${NC}"
BACKUP_FILE="backup_$(date +%Y%m%d_%H%M%S).sql"
docker exec $DB_CONTAINER pg_dump -U $DB_USER -d $DB_NAME > $BACKUP_FILE
echo "✅ Backup created: $BACKUP_FILE"
echo ""
# Deploy the SQL file
echo -e "${YELLOW}🔧 Deploying database changes...${NC}"
echo "Executing: $SQL_FILE"
if docker exec -i $DB_CONTAINER psql -U $DB_USER -d $DB_NAME < $SQL_FILE; then
echo -e "${GREEN}✅ Database deployment completed successfully!${NC}"
echo ""
# Show table information
echo -e "${YELLOW}📊 Current database tables:${NC}"
docker exec $DB_CONTAINER psql -U $DB_USER -d $DB_NAME -c "\dt"
else
echo -e "${RED}❌ Error: Database deployment failed${NC}"
echo -e "${YELLOW}💡 You can restore from backup using:${NC}"
echo "docker exec -i $DB_CONTAINER psql -U $DB_USER -d $DB_NAME < $BACKUP_FILE"
exit 1
fi
echo ""
echo -e "${GREEN}🎉 Deployment completed successfully!${NC}"
echo "=================================="