Files
Church-Music/legacy-site/scripts/shell/deploy-production.sh

87 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
# Production Deployment Script for Church Music System
# This script will set up auto-start services and optimize for production
set -e
echo "🚀 Starting production deployment..."
# Colors for output
GREEN='\033[0;32m'
BLUE='\033[0;34m'
RED='\033[0;31m'
NC='\033[0m' # No Color
PROJECT_DIR="/media/pts/Website/Church_HOP_MusicData"
BACKEND_DIR="$PROJECT_DIR/backend"
FRONTEND_DIR="$PROJECT_DIR/frontend"
# Step 1: Stop current development servers
echo -e "${BLUE}[1/7] Stopping development servers...${NC}"
pkill -f "python.*app.py" 2>/dev/null || true
pkill -f "node.*react-scripts" 2>/dev/null || true
sleep 2
# Step 2: Build production frontend
echo -e "${BLUE}[2/7] Building production React frontend...${NC}"
cd $FRONTEND_DIR
export NODE_OPTIONS=--max-old-space-size=2048
npm run build || {
echo -e "${RED}Frontend build failed. Check for syntax errors.${NC}"
exit 1
}
# Step 3: Install systemd service for backend
echo -e "${BLUE}[3/7] Installing backend systemd service...${NC}"
sudo cp /tmp/church-music-backend.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable church-music-backend.service
sudo systemctl restart church-music-backend.service
# Step 4: Install Nginx configuration
echo -e "${BLUE}[4/7] Installing Nginx configuration...${NC}"
sudo apt-get install -y nginx 2>/dev/null || true
sudo cp /tmp/church-music-nginx.conf /etc/nginx/sites-available/church-music
sudo ln -sf /etc/nginx/sites-available/church-music /etc/nginx/sites-enabled/
sudo nginx -t || {
echo -e "${RED}Nginx configuration test failed${NC}"
exit 1
}
# Step 5: Start/restart services
echo -e "${BLUE}[5/7] Starting services...${NC}"
sudo systemctl enable nginx
sudo systemctl restart nginx
sudo systemctl status church-music-backend.service --no-pager || true
# Step 6: Verify PostgreSQL data
echo -e "${BLUE}[6/7] Verifying PostgreSQL connection...${NC}"
cd $BACKEND_DIR
source venv/bin/activate
python -c "from postgresql_models import SessionLocal; s = SessionLocal(); print('✅ PostgreSQL connected'); s.close()" || {
echo -e "${RED}PostgreSQL connection failed${NC}"
exit 1
}
# Step 7: Display status
echo -e "${BLUE}[7/7] Deployment complete!${NC}"
echo ""
echo -e "${GREEN}✅ Production services are running:${NC}"
echo " • Backend: sudo systemctl status church-music-backend"
echo " • Frontend: sudo systemctl status nginx"
echo ""
echo -e "${GREEN}✅ Access your site:${NC}"
echo " • Local: http://localhost:3000"
echo " • Network: http://192.168.10.130:3000"
echo " • External: http://houseofprayer.ddns.net:3000"
echo ""
echo -e "${GREEN}✅ Services will auto-start on system restart${NC}"
echo ""
echo -e "${GREEN}✅ Resource optimized for shared server:${NC}"
echo " • Backend: 512MB RAM, 50% CPU"
echo " • Nginx: Gzip enabled, caching configured"
echo ""
echo "Logs:"
echo " • Backend: $BACKEND_DIR/logs/"
echo " • Nginx: /var/log/nginx/church-music-*.log"