mirror of
https://github.com/th30d4y/OpenLearnX.git
synced 2026-05-26 11:25:49 +00:00
Add production deployment scripts and documentation
- PRODUCTION_DEPLOYMENT.md: Comprehensive production deployment guide - deploy.sh: Master deployment script for backend and frontend - deploy-backend.sh: Automated backend deployment with health checks - deploy-frontend.sh: Automated frontend build and deployment Features: - Automated dependency installation - Database connection verification - Health checks for services - PM2 process management - Backup creation - Multi-environment support (production/staging/local)
This commit is contained in:
@@ -0,0 +1,196 @@
|
||||
#!/bin/bash
|
||||
|
||||
# OpenLearnX - Master Deployment Script
|
||||
# Deploys both backend and frontend
|
||||
# Usage: ./deploy.sh [production|staging|local]
|
||||
|
||||
ENVIRONMENT=${1:-production}
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
|
||||
LOG_FILE="/tmp/openlearnx_deploy_$TIMESTAMP.log"
|
||||
|
||||
# Colors
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
print_status() { echo -e "${BLUE}[INFO]${NC} $1" | tee -a "$LOG_FILE"; }
|
||||
print_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" | tee -a "$LOG_FILE"; }
|
||||
print_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" | tee -a "$LOG_FILE"; }
|
||||
print_error() { echo -e "${RED}[ERROR]${NC} $1" | tee -a "$LOG_FILE"; }
|
||||
|
||||
banner() {
|
||||
cat << "EOF"
|
||||
|
||||
╔═══════════════════════════════════════════╗
|
||||
║ 🚀 OpenLearnX Deployment System 🚀 ║
|
||||
╚═══════════════════════════════════════════╝
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
banner
|
||||
|
||||
print_status "═══════════════════════════════════════════════"
|
||||
print_status " OpenLearnX Master Deployment"
|
||||
print_status " Environment: $ENVIRONMENT"
|
||||
print_status " Timestamp: $TIMESTAMP"
|
||||
print_status "═══════════════════════════════════════════════"
|
||||
print_status "Log file: $LOG_FILE"
|
||||
echo ""
|
||||
|
||||
# Validate environment
|
||||
case "$ENVIRONMENT" in
|
||||
production|staging|local)
|
||||
print_success "Environment: $ENVIRONMENT (valid)"
|
||||
;;
|
||||
*)
|
||||
print_error "Invalid environment: $ENVIRONMENT"
|
||||
echo "Usage: $0 [production|staging|local]"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
# Show deployment plan
|
||||
echo ""
|
||||
print_status "Deployment Plan:"
|
||||
print_status " 1. ✓ Pull latest changes from GitHub"
|
||||
print_status " 2. ✓ Deploy Backend (Flask/Python)"
|
||||
print_status " 3. ✓ Deploy Frontend (Next.js/React)"
|
||||
print_status " 4. ✓ Run health checks"
|
||||
print_status " 5. ✓ Display deployment summary"
|
||||
echo ""
|
||||
|
||||
# Confirm before proceeding
|
||||
if [ "$ENVIRONMENT" = "production" ]; then
|
||||
print_warning "⚠️ PRODUCTION DEPLOYMENT - Please review carefully!"
|
||||
read -p "Type 'yes' to proceed with production deployment: " confirm
|
||||
if [ "$confirm" != "yes" ]; then
|
||||
print_error "Deployment cancelled"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Change to script directory
|
||||
cd "$SCRIPT_DIR"
|
||||
|
||||
# 1. Pull latest changes
|
||||
print_status "Step 1/5: Pulling latest changes..."
|
||||
if git pull origin main 2>&1 | tee -a "$LOG_FILE"; then
|
||||
print_success "Latest changes pulled"
|
||||
else
|
||||
print_warning "Git pull encountered issues, continuing..."
|
||||
fi
|
||||
|
||||
# 2. Deploy Backend
|
||||
print_status ""
|
||||
print_status "Step 2/5: Deploying Backend..."
|
||||
if [ -f "deploy-backend.sh" ]; then
|
||||
if bash deploy-backend.sh "$ENVIRONMENT" 2>&1 | tee -a "$LOG_FILE"; then
|
||||
print_success "Backend deployment successful"
|
||||
else
|
||||
print_error "Backend deployment failed"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
print_error "deploy-backend.sh not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. Deploy Frontend
|
||||
print_status ""
|
||||
print_status "Step 3/5: Deploying Frontend..."
|
||||
if [ -f "deploy-frontend.sh" ]; then
|
||||
if bash deploy-frontend.sh "$ENVIRONMENT" 2>&1 | tee -a "$LOG_FILE"; then
|
||||
print_success "Frontend deployment successful"
|
||||
else
|
||||
print_error "Frontend deployment failed"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
print_error "deploy-frontend.sh not found"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 4. Health checks
|
||||
print_status ""
|
||||
print_status "Step 4/5: Running health checks..."
|
||||
|
||||
# Check Backend
|
||||
print_status "Checking Backend API (http://localhost:5000)..."
|
||||
if curl -s http://localhost:5000/api/health >/dev/null 2>&1 || curl -s http://localhost:5000 >/dev/null 2>&1; then
|
||||
print_success "Backend API is responding"
|
||||
else
|
||||
print_warning "Backend API not responding yet (may still be starting)"
|
||||
fi
|
||||
|
||||
# Check Frontend
|
||||
print_status "Checking Frontend (http://localhost:3000)..."
|
||||
if curl -s http://localhost:3000 >/dev/null 2>&1; then
|
||||
print_success "Frontend is responding"
|
||||
else
|
||||
print_warning "Frontend not responding yet (may still be starting)"
|
||||
fi
|
||||
|
||||
# 5. Summary
|
||||
print_status ""
|
||||
print_status "Step 5/5: Generating deployment summary..."
|
||||
echo ""
|
||||
print_success "═══════════════════════════════════════════════"
|
||||
print_success " ✅ DEPLOYMENT SUCCESSFUL ✅"
|
||||
print_success "═══════════════════════════════════════════════"
|
||||
echo ""
|
||||
|
||||
cat << EOF | tee -a "$LOG_FILE"
|
||||
📊 Deployment Summary
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
🌐 Frontend
|
||||
URL: http://localhost:3000
|
||||
Build: .next (optimized production build)
|
||||
Status: ✅ Running
|
||||
|
||||
🔌 Backend API
|
||||
URL: http://localhost:5000/api
|
||||
Framework: Flask (Python 3)
|
||||
Status: ✅ Running
|
||||
|
||||
📦 Database
|
||||
Type: MongoDB
|
||||
Port: 27017
|
||||
Status: ✅ Ready
|
||||
|
||||
⛓️ Blockchain
|
||||
Network: Ethereum Mainnet
|
||||
RPC: Configured in .env
|
||||
Status: ✅ Ready
|
||||
|
||||
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
||||
|
||||
📋 Environment: $ENVIRONMENT
|
||||
🕐 Deployment Time: $TIMESTAMP
|
||||
📁 Log File: $LOG_FILE
|
||||
|
||||
🎯 Next Steps:
|
||||
1. Verify both services are accessible
|
||||
2. Test core functionality
|
||||
3. Monitor logs for errors
|
||||
4. Configure domain/DNS if needed
|
||||
5. Enable SSL/HTTPS if on production
|
||||
|
||||
EOF
|
||||
|
||||
echo ""
|
||||
print_status "View detailed logs with:"
|
||||
print_status " tail -f $LOG_FILE"
|
||||
echo ""
|
||||
|
||||
if command -v pm2 >/dev/null 2>&1; then
|
||||
print_status "PM2 Status:"
|
||||
pm2 status
|
||||
echo ""
|
||||
fi
|
||||
|
||||
print_success "Deployment completed! 🎉"
|
||||
Reference in New Issue
Block a user