diff --git a/PRODUCTION_DEPLOY.md b/PRODUCTION_DEPLOY.md new file mode 100644 index 0000000..f7ec8c6 --- /dev/null +++ b/PRODUCTION_DEPLOY.md @@ -0,0 +1,251 @@ +# Production Deployment Guide + +## Quick Deployment + +### Option 1: Automated Script (Recommended) + +1. **Upload the deployment script** to your production server: + ```bash + scp deploy-production.sh user@connect5.beyondcloud.technology:/tmp/ + ``` + +2. **SSH into your server**: + ```bash + ssh user@connect5.beyondcloud.technology + ``` + +3. **Update the script path** (if needed): + ```bash + nano /tmp/deploy-production.sh + # Change PROJECT_DIR to your actual path + ``` + +4. **Make it executable and run**: + ```bash + chmod +x /tmp/deploy-production.sh + sudo /tmp/deploy-production.sh + ``` + +--- + +### Option 2: Manual Steps + +If you prefer manual deployment: + +1. **SSH into production server**: + ```bash + ssh user@connect5.beyondcloud.technology + ``` + +2. **Navigate to project**: + ```bash + cd /var/www/html/connect5.beyondcloud.technology # Your actual path + ``` + +3. **Pull latest code**: + ```bash + git pull origin main + npm install + ``` + +4. **Create db.config.js**: + ```bash + nano db.config.js + ``` + + Paste: + ```javascript + module.exports = { + supabaseUrl: 'https://wxtirlphaphwbrgsjyop.supabase.co', + supabaseAnonKey: 'sb_publishable_Onh4nNYCV99d2eGidQIpqA_9PBkY8zs', + supabasePassword: 't1hWsackxbYzRIPD', + postgresConnectionString: 'postgresql://postgres:t1hWsackxbYzRIPD@db.wxtirlphaphwbrgsjyop.supabase.co:5432/postgres' + }; + ``` + + Save with `Ctrl+X`, `Y`, `Enter` + +5. **Restart server**: + ```bash + pm2 restart connect5 + # or if not running: + pm2 start server.js --name connect5 + pm2 save + ``` + +6. **Check status**: + ```bash + pm2 status + pm2 logs connect5 + ``` + +--- + +## Verification + +### 1. Test API Endpoint +```bash +curl https://connect5.beyondcloud.technology/api/db-status +``` + +Should return JSON like: +```json +{ + "connected": true, + "latency": 45, + "writeCapable": true, + "database": "Supabase PostgreSQL" +} +``` + +### 2. Test in Browser + +1. Visit https://connect5.beyondcloud.technology/ +2. Check status bar at bottom: + - **SQL**: Connected (green) + - **Latency**: ~45ms + - **Write**: Enabled (green) +3. Click "Multiplayer" +4. Enter a username +5. Should see "Welcome back, [username]!" + +### 3. Test Multiplayer + +1. Open two browser windows +2. Register different usernames in each +3. Send a challenge from one to the other +4. Accept and play a game +5. Verify stats update after game ends + +--- + +## Troubleshooting + +### API Returns 404 + +**Check if Node.js is running**: +```bash +pm2 status +``` + +**Check Apache proxy**: +```bash +sudo nano /etc/apache2/sites-available/connect5.conf +``` + +Should have: +```apache +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 +``` + +**Restart Apache**: +```bash +sudo systemctl restart apache2 +``` + +### WebSocket Connection Fails + +**Enable Apache modules**: +```bash +sudo a2enmod proxy +sudo a2enmod proxy_http +sudo a2enmod proxy_wstunnel +sudo a2enmod rewrite +sudo systemctl restart apache2 +``` + +### Database Connection Fails + +**Check Supabase credentials**: +```bash +cat db.config.js +``` + +**Test connection**: +```bash +node -e "const {supabase} = require('./database'); supabase.from('players').select('id').limit(1).then(console.log)" +``` + +### Server Won't Start + +**Check logs**: +```bash +pm2 logs connect5 --lines 50 +``` + +**Check port availability**: +```bash +sudo netstat -tlnp | grep 3000 +``` + +--- + +## Post-Deployment + +### Monitor Server +```bash +pm2 monit +``` + +### View Logs +```bash +pm2 logs connect5 --lines 100 +``` + +### Restart if Needed +```bash +pm2 restart connect5 +``` + +### Update Later +```bash +cd /var/www/html/connect5.beyondcloud.technology +git pull origin main +npm install +pm2 restart connect5 +``` + +--- + +## Apache Configuration Reference + +If you need to set up Apache proxy from scratch: + +```apache + + ServerName connect5.beyondcloud.technology + + DocumentRoot /var/www/html/connect5.beyondcloud.technology + + + Options -Indexes +FollowSymLinks + AllowOverride All + Require all granted + + + # Proxy API and Socket.io to Node.js + 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] + + # SSL + SSLEngine on + SSLCertificateFile /etc/letsencrypt/live/connect5.beyondcloud.technology/fullchain.pem + SSLCertificateKeyFile /etc/letsencrypt/live/connect5.beyondcloud.technology/privkey.pem + +``` + +Apply changes: +```bash +sudo systemctl restart apache2 +``` diff --git a/deploy-production.sh b/deploy-production.sh new file mode 100644 index 0000000..7f36535 --- /dev/null +++ b/deploy-production.sh @@ -0,0 +1,118 @@ +#!/bin/bash +# Production Deployment Script for Connect-5 Supabase Migration +# Run this on your production server + +set -e # Exit on error + +echo "๐Ÿš€ Connect-5 Production Deployment" +echo "====================================" +echo "" + +# Configuration +PROJECT_DIR="/var/www/html/connect5.beyondcloud.technology" # Update this path +NODE_PORT=3000 +PM2_APP_NAME="connect5" + +# Colors for output +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +RED='\033[0;31m' +NC='\033[0m' # No Color + +# Step 1: Navigate to project directory +echo "๐Ÿ“ Navigating to project directory..." +cd "$PROJECT_DIR" || { echo -e "${RED}โŒ Project directory not found!${NC}"; exit 1; } +echo -e "${GREEN}โœ… In directory: $(pwd)${NC}" +echo "" + +# Step 2: Pull latest code +echo "๐Ÿ“ฅ Pulling latest code from GitHub..." +git pull origin main || { echo -e "${RED}โŒ Git pull failed!${NC}"; exit 1; } +echo -e "${GREEN}โœ… Code updated${NC}" +echo "" + +# Step 3: Install dependencies +echo "๐Ÿ“ฆ Installing dependencies..." +npm install || { echo -e "${RED}โŒ npm install failed!${NC}"; exit 1; } +echo -e "${GREEN}โœ… Dependencies installed${NC}" +echo "" + +# Step 4: Check if db.config.js exists +echo "๐Ÿ” Checking for db.config.js..." +if [ ! -f "db.config.js" ]; then + echo -e "${YELLOW}โš ๏ธ db.config.js not found!${NC}" + echo "Creating db.config.js from template..." + + cat > db.config.js << 'EOF' +// Database Configuration File +// IMPORTANT: This file contains sensitive credentials +// DO NOT commit this file to git - it's in .gitignore + +// Supabase Configuration +module.exports = { + supabaseUrl: 'https://wxtirlphaphwbrgsjyop.supabase.co', + supabaseAnonKey: 'sb_publishable_Onh4nNYCV99d2eGidQIpqA_9PBkY8zs', + supabasePassword: 't1hWsackxbYzRIPD', + + // Optional: Direct PostgreSQL connection + postgresConnectionString: 'postgresql://postgres:t1hWsackxbYzRIPD@db.wxtirlphaphwbrgsjyop.supabase.co:5432/postgres' +}; +EOF + + echo -e "${GREEN}โœ… db.config.js created${NC}" +else + echo -e "${GREEN}โœ… db.config.js already exists${NC}" +fi +echo "" + +# Step 5: Restart Node.js server with PM2 +echo "๐Ÿ”„ Restarting Node.js server..." +if pm2 list | grep -q "$PM2_APP_NAME"; then + echo "Restarting existing PM2 process..." + pm2 restart "$PM2_APP_NAME" || { echo -e "${RED}โŒ PM2 restart failed!${NC}"; exit 1; } +else + echo "Starting new PM2 process..." + pm2 start server.js --name "$PM2_APP_NAME" || { echo -e "${RED}โŒ PM2 start failed!${NC}"; exit 1; } +fi + +pm2 save +echo -e "${GREEN}โœ… Server restarted${NC}" +echo "" + +# Step 6: Show server status +echo "๐Ÿ“Š Server Status:" +pm2 status +echo "" + +# Step 7: Test API endpoint +echo "๐Ÿงช Testing API endpoint..." +sleep 2 # Give server time to start +API_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:$NODE_PORT/api/db-status) + +if [ "$API_RESPONSE" = "200" ]; then + echo -e "${GREEN}โœ… API endpoint responding (HTTP $API_RESPONSE)${NC}" +else + echo -e "${YELLOW}โš ๏ธ API endpoint returned HTTP $API_RESPONSE${NC}" + echo "Check logs with: pm2 logs $PM2_APP_NAME" +fi +echo "" + +# Step 8: Show recent logs +echo "๐Ÿ“‹ Recent server logs:" +pm2 logs "$PM2_APP_NAME" --lines 20 --nostream +echo "" + +# Final instructions +echo "====================================" +echo -e "${GREEN}๐ŸŽ‰ Deployment Complete!${NC}" +echo "" +echo "Next steps:" +echo "1. Visit https://connect5.beyondcloud.technology/" +echo "2. Check the status bar shows 'Connected'" +echo "3. Test multiplayer functionality" +echo "" +echo "Useful commands:" +echo " pm2 logs $PM2_APP_NAME - View server logs" +echo " pm2 restart $PM2_APP_NAME - Restart server" +echo " pm2 stop $PM2_APP_NAME - Stop server" +echo "===================================="