92 lines
2.7 KiB
Bash
Executable File
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 "=================================="
|