diff --git a/setup-apache.sh b/setup-apache.sh new file mode 100644 index 0000000..9c5ef99 --- /dev/null +++ b/setup-apache.sh @@ -0,0 +1,147 @@ +#!/bin/bash +# Automated Apache Configuration Script for Connect-5 +# This script configures Apache to proxy requests to the Node.js server + +set -e # Exit on error + +echo "🔧 Connect-5 Apache Configuration Script" +echo "==========================================" +echo "" + +# Colors +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# Check if running as root +if [ "$EUID" -ne 0 ]; then + echo -e "${RED}❌ This script must be run as root (use sudo)${NC}" + exit 1 +fi + +echo "Step 1: Enabling Apache modules..." +a2enmod proxy 2>/dev/null || echo "proxy already enabled" +a2enmod proxy_http 2>/dev/null || echo "proxy_http already enabled" +a2enmod proxy_wstunnel 2>/dev/null || echo "proxy_wstunnel already enabled" +a2enmod rewrite 2>/dev/null || echo "rewrite already enabled" +echo -e "${GREEN}✅ Apache modules enabled${NC}" +echo "" + +echo "Step 2: Finding Apache configuration file..." +# Try to find the SSL config file +CONFIG_FILE="" + +# Check common locations +if [ -f "/etc/apache2/sites-available/connect5-le-ssl.conf" ]; then + CONFIG_FILE="/etc/apache2/sites-available/connect5-le-ssl.conf" +elif [ -f "/etc/apache2/sites-available/connect5.conf" ]; then + CONFIG_FILE="/etc/apache2/sites-available/connect5.conf" +elif [ -f "/etc/apache2/sites-available/000-default-le-ssl.conf" ]; then + CONFIG_FILE="/etc/apache2/sites-available/000-default-le-ssl.conf" +elif [ -f "/etc/apache2/sites-available/default-ssl.conf" ]; then + CONFIG_FILE="/etc/apache2/sites-available/default-ssl.conf" +else + echo -e "${YELLOW}⚠️ Could not auto-detect config file${NC}" + echo "Available config files:" + ls -1 /etc/apache2/sites-available/ + echo "" + read -p "Enter the full path to your Apache config file: " CONFIG_FILE +fi + +echo -e "${GREEN}✅ Using config file: $CONFIG_FILE${NC}" +echo "" + +echo "Step 3: Backing up original config..." +cp "$CONFIG_FILE" "${CONFIG_FILE}.backup.$(date +%Y%m%d_%H%M%S)" +echo -e "${GREEN}✅ Backup created${NC}" +echo "" + +echo "Step 4: Checking if proxy rules already exist..." +if grep -q "ProxyPass /api" "$CONFIG_FILE"; then + echo -e "${YELLOW}⚠️ Proxy rules already exist in config file${NC}" + echo "Skipping modification to avoid duplicates." +else + echo "Adding proxy configuration..." + + # Create the proxy configuration + PROXY_CONFIG=" + # Connect-5 Node.js Proxy Configuration + ProxyPreserveHost On + ProxyPass /api http://localhost:3000/api + ProxyPassReverse /api http://localhost:3000/api + ProxyPass /socket.io http://localhost:3000/socket.io + ProxyPassReverse /socket.io http://localhost:3000/socket.io + + # WebSocket support + RewriteEngine On + RewriteCond %{HTTP:Upgrade} =websocket [NC] + RewriteRule /(.*) ws://localhost:3000/\$1 [P,L] +" + + # Insert before the closing tag + sed -i "/<\/VirtualHost>/i\\$PROXY_CONFIG" "$CONFIG_FILE" + + echo -e "${GREEN}✅ Proxy configuration added${NC}" +fi +echo "" + +echo "Step 5: Testing Apache configuration..." +if apache2ctl configtest 2>&1 | grep -q "Syntax OK"; then + echo -e "${GREEN}✅ Apache configuration is valid${NC}" +else + echo -e "${RED}❌ Apache configuration has errors!${NC}" + echo "Restoring backup..." + cp "${CONFIG_FILE}.backup."* "$CONFIG_FILE" + echo "Please check the configuration manually." + exit 1 +fi +echo "" + +echo "Step 6: Restarting Apache..." +systemctl restart apache2 +echo -e "${GREEN}✅ Apache restarted${NC}" +echo "" + +echo "Step 7: Checking if Node.js server is running..." +if pgrep -f "node server.js" > /dev/null; then + echo -e "${GREEN}✅ Node.js server is running${NC}" +else + echo -e "${YELLOW}⚠️ Node.js server is not running${NC}" + echo "Starting Node.js server..." + cd /home/github2/apps/app-connect5 + nohup node server.js > server.log 2>&1 & + sleep 2 + echo -e "${GREEN}✅ Node.js server started${NC}" +fi +echo "" + +echo "Step 8: Testing API endpoint..." +sleep 2 +HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://connect5.beyondcloud.technology/api/db-status) + +if [ "$HTTP_CODE" = "200" ]; then + echo -e "${GREEN}✅ API endpoint is working! (HTTP $HTTP_CODE)${NC}" + echo "" + echo "📊 Database Status:" + curl -s https://connect5.beyondcloud.technology/api/db-status | python3 -m json.tool 2>/dev/null || curl -s https://connect5.beyondcloud.technology/api/db-status +else + echo -e "${YELLOW}⚠️ API endpoint returned HTTP $HTTP_CODE${NC}" + echo "This might take a moment for DNS/cache to update." +fi +echo "" + +echo "==========================================" +echo -e "${GREEN}🎉 Configuration Complete!${NC}" +echo "" +echo "Next steps:" +echo "1. Visit https://connect5.beyondcloud.technology/" +echo "2. Check that the status bar shows 'Connected'" +echo "3. Test multiplayer functionality" +echo "" +echo "Logs:" +echo " Apache: sudo tail -f /var/log/apache2/error.log" +echo " Node.js: tail -f /home/github2/apps/app-connect5/server.log" +echo "" +echo "Backup saved to: ${CONFIG_FILE}.backup.*" +echo "=========================================="