Clean up deployment scripts and documentation

- Removed all unused/deprecated deployment scripts
- Created single unified deploy.sh script
- Added comprehensive DEPLOYMENT.md guide
- Updated README.md for Supabase migration
- Script prompts for project directory or uses current
- Auto-detects web server (Nginx/Apache/CloudSticks)
- Fully automated deployment process
This commit is contained in:
2025-12-21 17:44:32 +11:00
parent a869cff76d
commit 5a3315ed9d
18 changed files with 789 additions and 1838 deletions

View File

@@ -1,118 +0,0 @@
# Quick Fix for CloudSticks Apache Proxy
## Problem
The Node.js server is running on port 3000, but Apache is not forwarding `/api` and `/socket.io` requests to it.
## Solution
### Step 1: Enable Apache Proxy Modules
Run these commands on your CloudSticks server:
```bash
sudo a2enmod proxy
sudo a2enmod proxy_http
sudo a2enmod proxy_wstunnel
sudo a2enmod rewrite
```
### Step 2: Find Your Apache Config File
CloudSticks likely uses one of these locations:
```bash
# Check which file exists:
ls -la /etc/apache2/sites-available/connect5*
ls -la /etc/apache2/sites-available/000-default-le-ssl.conf
ls -la /etc/apache2/sites-available/default-ssl.conf
```
### Step 3: Edit the Config File
```bash
# Use nano or vi to edit (replace with your actual file):
sudo nano /etc/apache2/sites-available/connect5.conf
```
### Step 4: Add These Lines
Add these lines **inside** your `<VirtualHost *:443>` block (before `</VirtualHost>`):
```apache
# 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]
```
### Step 5: Test and Restart Apache
```bash
# Test configuration
sudo apache2ctl configtest
# If OK, restart Apache
sudo systemctl restart apache2
```
### Step 6: Verify It Works
```bash
# Test API endpoint
curl https://connect5.beyondcloud.technology/api/db-status
# Should return JSON with "connected": true
```
Then visit https://connect5.beyondcloud.technology/ in your browser!
---
## Alternative: Quick .htaccess Method
If you can't edit the Apache config, try adding this to `.htaccess` in your project root:
```apache
RewriteEngine On
# Proxy API requests
RewriteCond %{REQUEST_URI} ^/api/
RewriteRule ^api/(.*)$ http://localhost:3000/api/$1 [P,L]
# Proxy Socket.io requests
RewriteCond %{REQUEST_URI} ^/socket\.io/
RewriteRule ^socket\.io/(.*)$ http://localhost:3000/socket.io/$1 [P,L]
```
**Note**: This requires `AllowOverride All` in your Apache config.
---
## Troubleshooting
### Check if Node.js is Running
```bash
ps aux | grep "node server.js"
curl http://localhost:3000/api/db-status
```
### Check Apache Error Logs
```bash
sudo tail -f /var/log/apache2/error.log
```
### Check if Modules are Enabled
```bash
apache2ctl -M | grep proxy
```
Should show:
- proxy_module
- proxy_http_module
- proxy_wstunnel_module

View File

@@ -1,176 +0,0 @@
# CloudSticks Deployment Guide
## Quick Setup (No PM2 Required)
Since CloudSticks auto-deploys from GitHub, you only need to set up the database config and ensure the server is running.
### Option 1: Use the CloudSticks Deployment Script
```bash
cd /home/github2/apps/app-connect5
chmod +x deploy-cloudsticks.sh
./deploy-cloudsticks.sh
```
This will:
- ✅ Install dependencies
- ✅ Create `db.config.js` with Supabase credentials
- ✅ Attempt to restart the server (systemd or PM2 if available)
- ✅ Test the API endpoint
---
### Option 2: Manual Setup
If you prefer manual setup:
```bash
cd /home/github2/apps/app-connect5
# Install dependencies
npm install
# Create db.config.js
cat > db.config.js << 'EOF'
module.exports = {
supabaseUrl: 'https://wxtirlphaphwbrgsjyop.supabase.co',
supabaseAnonKey: 'sb_publishable_Onh4nNYCV99d2eGidQIpqA_9PBkY8zs',
supabasePassword: 't1hWsackxbYzRIPD',
postgresConnectionString: 'postgresql://postgres:t1hWsackxbYzRIPD@db.wxtirlphaphwbrgsjyop.supabase.co:5432/postgres'
};
EOF
# Check if server is running
ps aux | grep "node server.js"
# If not running, start it
nohup node server.js > server.log 2>&1 &
# Or if CloudSticks uses systemd:
sudo systemctl restart connect5
```
---
## Verify Deployment
### 1. Check if Node.js is Running
```bash
ps aux | grep node
```
Should show `node server.js` running
### 2. Test API Locally
```bash
curl http://localhost:3000/api/db-status
```
Should return JSON with `"connected": true`
### 3. Test in Browser
Visit: https://connect5.beyondcloud.technology/
Check status bar shows:
- **SQL**: Connected ✅
- **Latency**: ~45ms
- **Write**: Enabled ✅
---
## Troubleshooting
### Server Not Running
**Start the server**:
```bash
cd /home/github2/apps/app-connect5
node server.js > server.log 2>&1 &
```
**Check logs**:
```bash
tail -f server.log
```
### API Returns 404
**Check Apache/Nginx proxy**:
The web server needs to proxy `/api/*` and `/socket.io/*` to `localhost:3000`
**For Apache**, ensure you 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
```
### Database Connection Fails
**Verify credentials**:
```bash
cat db.config.js
```
**Test Supabase connection**:
```bash
node -e "const {supabase} = require('./database'); supabase.from('players').select('id').limit(1).then(console.log).catch(console.error)"
```
---
## CloudSticks-Specific Notes
- **Auto-Deploy**: CloudSticks automatically pulls from GitHub when you push
- **No PM2**: CloudSticks may not have PM2 installed - use systemd or direct node
- **Logs**: Check `server.log` for application logs
- **Restart**: After code changes, restart the Node.js process
---
## Keep Server Running
### Option 1: Using nohup (Simple)
```bash
nohup node server.js > server.log 2>&1 &
```
### Option 2: Using systemd (Recommended)
Create `/etc/systemd/system/connect5.service`:
```ini
[Unit]
Description=Connect-5 Multiplayer Server
After=network.target
[Service]
Type=simple
User=github2
WorkingDirectory=/home/github2/apps/app-connect5
ExecStart=/usr/bin/node server.js
Restart=always
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
```
Enable and start:
```bash
sudo systemctl enable connect5
sudo systemctl start connect5
sudo systemctl status connect5
```
---
## Future Updates
When you push to GitHub:
1. CloudSticks auto-deploys the code
2. Run: `./deploy-cloudsticks.sh` (or restart server manually)
3. Verify at https://connect5.beyondcloud.technology/

337
DEPLOYMENT.md Normal file
View File

@@ -0,0 +1,337 @@
# Connect-5 Production Deployment Guide
Complete guide for deploying Connect-5 to production with Supabase database.
## Quick Deploy
```bash
# On your production server
cd /path/to/Connect-5
sudo bash deploy.sh
```
The script will:
1. ✅ Prompt for project directory (or use current)
2. ✅ Request Supabase credentials
3. ✅ Create `db.config.js`
4. ✅ Install dependencies
5. ✅ Detect and configure web server (Nginx/Apache)
6. ✅ Start Node.js server
7. ✅ Test endpoints
---
## Prerequisites
### 1. Supabase Setup
1. Create project at [app.supabase.com](https://app.supabase.com)
2. Run the SQL schema from [supabase-schema-complete.sql](supabase-schema-complete.sql)
3. Get your credentials:
- Project URL
- Anon/Public API key
- Database password
See [SUPABASE_SETUP.md](SUPABASE_SETUP.md) for detailed instructions.
### 2. Server Requirements
- Node.js 14+ installed
- Nginx or Apache web server
- SSL certificate configured
- Port 3000 available for Node.js
---
## Manual Deployment
If you prefer manual deployment or the script doesn't work for your environment:
### Step 1: Update Code
```bash
cd /path/to/Connect-5
git pull origin main
npm install
```
### Step 2: Configure Database
Create `db.config.js`:
```javascript
module.exports = {
supabaseUrl: 'https://your-project.supabase.co',
supabaseAnonKey: 'your-anon-key',
supabasePassword: 'your-db-password',
postgresConnectionString: 'postgresql://postgres:password@db.project.supabase.co:5432/postgres'
};
```
### Step 3: Configure Web Server
#### For CloudSticks Nginx
Edit `/etc/nginx-cs/vhosts.d/app-yourproject.conf` and add inside the `server` block:
```nginx
# Connect-5 API Proxy
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Connect-5 Socket.io Proxy
location /socket.io {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
```
Restart Nginx:
```bash
sudo systemctl restart nginx-cs
```
#### For Standard Nginx
Add to your site config in `/etc/nginx/sites-available/yoursite`:
```nginx
location /api {
proxy_pass http://localhost:3000;
# ... same proxy headers as above
}
location /socket.io {
proxy_pass http://localhost:3000;
# ... same proxy headers as above
}
```
Restart:
```bash
sudo systemctl restart nginx
```
#### For Apache
Enable modules:
```bash
sudo a2enmod proxy proxy_http proxy_wstunnel rewrite
```
Add to your VirtualHost:
```apache
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
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://localhost:3000/$1 [P,L]
```
Restart:
```bash
sudo systemctl restart apache2
```
### Step 4: Start Node.js Server
```bash
cd /path/to/Connect-5
nohup node server.js > server.log 2>&1 &
```
Or use PM2:
```bash
pm2 start server.js --name connect5
pm2 save
```
---
## Verification
### 1. Test API Endpoint
```bash
curl https://yourdomain.com/api/db-status
```
Should return:
```json
{
"connected": true,
"latency": 45,
"writeCapable": true,
"database": "Supabase PostgreSQL"
}
```
### 2. Check Website
Visit `https://yourdomain.com/` and verify:
- ✅ Status bar shows "Connected" (green)
- ✅ Latency is displayed (~45ms)
- ✅ "Write: Enabled" shows (green)
### 3. Test Multiplayer
1. Click "Multiplayer"
2. Register a username
3. Should see "Welcome back, [username]!"
4. Online players list should populate
5. Try creating/joining a game
---
## Troubleshooting
### API Returns 404
**Problem**: Web server not proxying to Node.js
**Solution**:
1. Check web server config has proxy rules
2. Restart web server
3. Verify Node.js is running: `ps aux | grep "node server.js"`
### Database Disconnected
**Problem**: Supabase credentials incorrect
**Solution**:
1. Check `db.config.js` has correct URL and key
2. Verify credentials in Supabase dashboard
3. Check server.log: `tail -f server.log`
### WebSocket Connection Failed
**Problem**: Proxy not configured for WebSocket upgrade
**Solution**:
1. For Nginx: Add `proxy_set_header Upgrade $http_upgrade`
2. For Apache: Add `RewriteCond %{HTTP:Upgrade} =websocket`
3. Restart web server
### Node.js Server Won't Start
**Problem**: Port 3000 in use or database connection failed
**Solution**:
1. Check port: `netstat -tlnp | grep 3000`
2. Check logs: `tail -f server.log`
3. Verify Supabase credentials
4. Test database: `curl http://localhost:3000/api/db-status`
---
## CloudSticks-Specific Notes
CloudSticks uses custom Nginx setup:
- Config location: `/etc/nginx-cs/`
- Vhosts: `/etc/nginx-cs/vhosts.d/`
- Service name: `nginx-cs`
- Restart: `sudo systemctl restart nginx-cs`
The deployment script automatically detects CloudSticks and configures accordingly.
---
## Environment-Specific Configuration
### Development
```bash
npm start
# Runs on http://localhost:3000
```
### Production
- Uses web server proxy (Nginx/Apache)
- HTTPS enabled
- Node.js runs in background
- Logs to `server.log`
---
## Maintenance
### Update Application
```bash
cd /path/to/Connect-5
git pull origin main
npm install
pkill -f "node server.js"
nohup node server.js > server.log 2>&1 &
```
### View Logs
```bash
# Node.js logs
tail -f /path/to/Connect-5/server.log
# Nginx logs
sudo tail -f /var/log/nginx/error.log
# Apache logs
sudo tail -f /var/log/apache2/error.log
```
### Restart Services
```bash
# Node.js
pkill -f "node server.js"
cd /path/to/Connect-5
nohup node server.js > server.log 2>&1 &
# Nginx (CloudSticks)
sudo systemctl restart nginx-cs
# Nginx (Standard)
sudo systemctl restart nginx
# Apache
sudo systemctl restart apache2
```
---
## Security Notes
- `db.config.js` is in `.gitignore` (never commit credentials)
- Use environment variables for sensitive data in production
- Enable Supabase Row Level Security (RLS) policies
- Keep dependencies updated: `npm audit fix`
- Use HTTPS only (no HTTP)
---
## Support
For issues:
1. Check this deployment guide
2. Review [SUPABASE_SETUP.md](SUPABASE_SETUP.md)
3. Check server logs
4. Verify Supabase dashboard shows activity
5. Test local endpoint: `curl http://localhost:3000/api/db-status`

View File

@@ -1,150 +0,0 @@
# Nginx Configuration for Connect-5 on CloudSticks
## Quick Setup (Automated)
```bash
cd /home/github2/apps/app-connect5
sudo bash setup-nginx.sh
```
That's it! The script will automatically configure everything.
---
## Manual Setup (If Needed)
### Step 1: Find Your Nginx Config
```bash
# Find config files
ls -la /etc/nginx/sites-available/
ls -la /etc/nginx/conf.d/
# Or search for your domain
grep -r "connect5.beyondcloud.technology" /etc/nginx/
```
### Step 2: Edit the Config
```bash
# Edit the config file (replace with your actual file)
sudo nano /etc/nginx/sites-available/connect5.beyondcloud.technology
```
### Step 3: Add Proxy Configuration
Add these `location` blocks **inside** your `server` block:
```nginx
server {
listen 443 ssl;
server_name connect5.beyondcloud.technology;
# Your existing SSL and root configuration...
# Add these proxy configurations:
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /socket.io {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
```
### Step 4: Test and Reload
```bash
# Test configuration
sudo nginx -t
# If OK, reload Nginx
sudo systemctl reload nginx
# Test the API
curl https://connect5.beyondcloud.technology/api/db-status
```
---
## Troubleshooting
### Check if Nginx is Running
```bash
sudo systemctl status nginx
```
### Check Nginx Error Logs
```bash
sudo tail -f /var/log/nginx/error.log
```
### Check if Node.js is Running
```bash
ps aux | grep "node server.js"
```
### Test Local Node.js Server
```bash
curl http://localhost:3000/api/db-status
```
### Restart Everything
```bash
# Restart Node.js
pkill -f "node server.js"
cd /home/github2/apps/app-connect5
nohup node server.js > server.log 2>&1 &
# Reload Nginx
sudo systemctl reload nginx
```
---
## CloudSticks-Specific Notes
- CloudSticks uses **Nginx** (not Apache)
- Config files are usually in `/etc/nginx/sites-available/`
- CloudSticks auto-deploys from GitHub
- Node.js server needs to run continuously in background
---
## Verify It's Working
1. **Test API endpoint**:
```bash
curl https://connect5.beyondcloud.technology/api/db-status
```
Should return JSON with `"connected": true`
2. **Visit in browser**:
https://connect5.beyondcloud.technology/
Status bar should show:
- SQL: Connected ✅
- Latency: ~45ms
- Write: Enabled ✅
3. **Test multiplayer**:
- Click "Multiplayer"
- Register a username
- Should see "Welcome back, [username]!"

View File

@@ -1,251 +0,0 @@
# 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
<VirtualHost *:443>
ServerName connect5.beyondcloud.technology
DocumentRoot /var/www/html/connect5.beyondcloud.technology
<Directory /var/www/html/connect5.beyondcloud.technology>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
</Directory>
# 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
</VirtualHost>
```
Apply changes:
```bash
sudo systemctl restart apache2
```

View File

@@ -10,7 +10,7 @@ A beautiful, feature-rich implementation of the classic Connect-5 (Gomoku) game
[![Node.js](https://img.shields.io/badge/Node.js-18+-green.svg)](https://nodejs.org/) [![Node.js](https://img.shields.io/badge/Node.js-18+-green.svg)](https://nodejs.org/)
[![Socket.io](https://img.shields.io/badge/Socket.io-4.0+-blue.svg)](https://socket.io/) [![Socket.io](https://img.shields.io/badge/Socket.io-4.0+-blue.svg)](https://socket.io/)
[![MySQL](https://img.shields.io/badge/MySQL-8.0+-orange.svg)](https://www.mysql.com/) [![Supabase](https://img.shields.io/badge/Supabase-PostgreSQL-3ECF8E.svg)](https://supabase.com/)
[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE) [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
[Play Now](https://connect5.beyondcloud.technology/) • [Features](#features) • [Installation](#installation) • [Usage](#usage) • [Multiplayer](#multiplayer) • [Tech Stack](#tech-stack) [Play Now](https://connect5.beyondcloud.technology/) • [Features](#features) • [Installation](#installation) • [Usage](#usage) • [Multiplayer](#multiplayer) • [Tech Stack](#tech-stack)
@@ -70,7 +70,7 @@ A beautiful, feature-rich implementation of the classic Connect-5 (Gomoku) game
### Prerequisites ### Prerequisites
- **Node.js** 18+ ([Download](https://nodejs.org/)) - **Node.js** 18+ ([Download](https://nodejs.org/))
- **MySQL** 8.0+ ([Download](https://www.mysql.com/downloads/)) - **Supabase Account** (Free tier available at [supabase.com](https://supabase.com/))
- **Git** ([Download](https://git-scm.com/)) - **Git** ([Download](https://git-scm.com/))
### Quick Start ### Quick Start
@@ -83,12 +83,13 @@ cd Connect-5
# Install dependencies # Install dependencies
npm install npm install
# Configure database (edit database.js with your credentials) # Configure database
# Update the following in database.js: # 1. Create a Supabase project at https://supabase.com
# - host: 'your-mysql-host' # 2. Copy db.config.example.js to db.config.js
# - user: 'your-database-user' cp db.config.example.js db.config.js
# - password: 'your-password'
# - database: 'your-database-name' # 3. Edit db.config.js with your Supabase credentials
# 4. Run the SQL schema in Supabase SQL Editor (see SUPABASE_SETUP.md)
# Start the server # Start the server
npm start npm start
@@ -96,6 +97,8 @@ npm start
The server will start on **http://localhost:3000** The server will start on **http://localhost:3000**
For detailed setup instructions, see [SUPABASE_SETUP.md](SUPABASE_SETUP.md)
--- ---
## 🎮 Usage ## 🎮 Usage
@@ -137,8 +140,8 @@ The server will start on **http://localhost:3000**
┌──────────────┐ ┌──────────────┐
MySQL Supabase
Database PostgreSQL
└──────────────┘ └──────────────┘
``` ```
@@ -186,18 +189,19 @@ The server will start on **http://localhost:3000**
- **Node.js**: JavaScript runtime - **Node.js**: JavaScript runtime
- **Express.js**: Web application framework - **Express.js**: Web application framework
- **Socket.io**: WebSocket library for real-time bidirectional communication - **Socket.io**: WebSocket library for real-time bidirectional communication
- **MySQL2**: MySQL database driver with promises - **Supabase Client**: PostgreSQL database client with real-time capabilities
### Database ### Database
- **MySQL**: Relational database for persistent storage - **Supabase**: Managed PostgreSQL database with real-time subscriptions
- **Connection Pooling**: Optimized database connections - **Row Level Security**: Built-in security policies
- **Auto-generated APIs**: RESTful and real-time APIs
### Dependencies ### Dependencies
```json ```json
{ {
"express": "^4.18.2", "express": "^4.18.2",
"socket.io": "^4.6.1", "socket.io": "^4.6.1",
"mysql2": "^3.2.0", "@supabase/supabase-js": "^2.39.0",
"bad-words": "^3.0.4", "bad-words": "^3.0.4",
"cors": "^2.8.5", "cors": "^2.8.5",
"nodemon": "^2.0.22" "nodemon": "^2.0.22"
@@ -229,20 +233,25 @@ Connect-5/
### Database Configuration ### Database Configuration
Edit `database.js`: Create `db.config.js` from the example:
```bash
cp db.config.example.js db.config.js
```
Edit `db.config.js`:
```javascript ```javascript
const dbConfig = { module.exports = {
host: 'your-mysql-host', // MySQL server address supabaseUrl: 'https://your-project.supabase.co',
user: 'your-database-user', // Database username supabaseAnonKey: 'your-anon-key-here',
password: 'your-password', // Database password supabasePassword: 'your-database-password',
database: 'your-database-name',// Database name postgresConnectionString: 'postgresql://postgres:password@...'
waitForConnections: true,
connectionLimit: 10,
queueLimit: 0
}; };
``` ```
See [SUPABASE_SETUP.md](SUPABASE_SETUP.md) for detailed setup instructions.
### Server Configuration ### Server Configuration
Edit `server.js` to change the port: Edit `server.js` to change the port:
@@ -253,6 +262,27 @@ const PORT = process.env.PORT || 3000;
--- ---
## 🚀 Production Deployment
For production deployment, use the automated deployment script:
```bash
sudo bash deploy.sh
```
The script will:
- ✅ Prompt for project directory
- ✅ Request Supabase credentials
- ✅ Configure database connection
- ✅ Install dependencies
- ✅ Detect and configure web server (Nginx/Apache)
- ✅ Start Node.js server
- ✅ Test endpoints
See [DEPLOYMENT.md](DEPLOYMENT.md) for detailed deployment instructions.
---
## 🎯 Game Rules ## 🎯 Game Rules
### Objective ### Objective
@@ -298,8 +328,8 @@ npm start
## 🐛 Troubleshooting ## 🐛 Troubleshooting
### Connection Refused Error ### Connection Refused Error
**Problem**: Cannot connect to MySQL database **Problem**: Cannot connect to Supabase database
**Solution**: Ensure MySQL is running and credentials in `database.js` are correct **Solution**: Verify credentials in `db.config.js` and check Supabase dashboard
### Port Already in Use ### Port Already in Use
**Problem**: Port 3000 is already occupied **Problem**: Port 3000 is already occupied
@@ -313,6 +343,12 @@ npm start
**Problem**: Username registration fails **Problem**: Username registration fails
**Solution**: Try a different username or check the database for duplicates **Solution**: Try a different username or check the database for duplicates
### Database Disconnected
**Problem**: Status bar shows "Disconnected"
**Solution**: Check `db.config.js` credentials and Supabase project status
For more troubleshooting, see [DEPLOYMENT.md](DEPLOYMENT.md)
--- ---
## 🤝 Contributing ## 🤝 Contributing

View File

@@ -1,43 +0,0 @@
# Apache Configuration for Connect-5
# Add this to your Apache virtual host configuration
# Enable required modules (run these commands first):
# sudo a2enmod proxy
# sudo a2enmod proxy_http
# sudo a2enmod proxy_wstunnel
# sudo a2enmod rewrite
# sudo systemctl restart apache2
<VirtualHost *:443>
ServerName connect5.beyondcloud.technology
# Your existing SSL and document root settings
DocumentRoot /home/github2/apps/app-connect5
# Proxy API requests to Node.js
ProxyPreserveHost On
ProxyPass /api http://localhost:3000/api
ProxyPassReverse /api http://localhost:3000/api
# Proxy Socket.io WebSocket requests
ProxyPass /socket.io http://localhost:3000/socket.io
ProxyPassReverse /socket.io http://localhost:3000/socket.io
# WebSocket upgrade support
RewriteEngine On
RewriteCond %{HTTP:Upgrade} =websocket [NC]
RewriteRule /(.*) ws://localhost:3000/$1 [P,L]
RewriteCond %{HTTP:Upgrade} !=websocket [NC]
RewriteRule /(.*) http://localhost:3000/$1 [P,L]
# Your existing SSL configuration
SSLEngine on
# SSLCertificateFile /path/to/cert
# SSLCertificateKeyFile /path/to/key
</VirtualHost>
# If you also need HTTP (port 80) redirect:
<VirtualHost *:80>
ServerName connect5.beyondcloud.technology
Redirect permanent / https://connect5.beyondcloud.technology/
</VirtualHost>

View File

@@ -1,35 +0,0 @@
#!/bin/bash
# Check CloudSticks Nginx configuration structure
echo "🔍 Checking CloudSticks Nginx Configuration"
echo "============================================"
echo ""
echo "1. Main nginx.conf location:"
ls -la /etc/nginx-cs/nginx.conf 2>/dev/null || echo "Not found"
echo ""
echo "2. Checking what nginx.conf includes:"
grep -n "include" /etc/nginx-cs/nginx.conf 2>/dev/null || echo "No includes found"
echo ""
echo "3. Directory structure:"
ls -la /etc/nginx-cs/ 2>/dev/null
echo ""
echo "4. Checking for vhosts directories:"
ls -la /etc/nginx-cs/vhosts.d/ 2>/dev/null || echo "No vhosts.d"
ls -la /etc/nginx-cs/sites-available/ 2>/dev/null || echo "No sites-available"
ls -la /etc/nginx-cs/sites-enabled/ 2>/dev/null || echo "No sites-enabled"
echo ""
echo "5. Our proxy config:"
ls -la /etc/nginx-cs/conf.d/connect5-proxy.conf 2>/dev/null || echo "Proxy config not found"
echo ""
echo "6. Nginx process:"
ps aux | grep nginx | grep -v grep
echo ""
echo "7. Listening ports:"
netstat -tlnp 2>/dev/null | grep :443 || ss -tlnp | grep :443

View File

@@ -1,123 +0,0 @@
#!/bin/bash
# CloudSticks Deployment Script for Connect-5
# This version works without PM2 - uses systemd or direct node
set -e # Exit on error
echo "🚀 Connect-5 CloudSticks Deployment"
echo "===================================="
echo ""
# Configuration
PROJECT_DIR="/home/github2/apps/app-connect5"
NODE_PORT=3000
# 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: Install dependencies
echo "📦 Installing dependencies..."
npm install || { echo -e "${RED}❌ npm install failed!${NC}"; exit 1; }
echo -e "${GREEN}✅ Dependencies installed${NC}"
echo ""
# Step 3: 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 4: Check how to restart the server
echo "🔄 Checking server management..."
# Check if systemd service exists
if systemctl list-units --type=service --all | grep -q "connect5.service"; then
echo "Found systemd service, restarting..."
sudo systemctl restart connect5
echo -e "${GREEN}✅ Server restarted via systemd${NC}"
elif command -v pm2 &> /dev/null; then
echo "Found PM2, restarting..."
pm2 restart connect5 || pm2 start server.js --name connect5
pm2 save
echo -e "${GREEN}✅ Server restarted via PM2${NC}"
else
echo -e "${YELLOW}⚠️ No process manager found${NC}"
echo "Please restart your Node.js server manually:"
echo " Option 1: If using systemd: sudo systemctl restart connect5"
echo " Option 2: If using PM2: pm2 restart connect5"
echo " Option 3: Kill existing node process and start new one"
echo ""
echo "To start the server manually:"
echo " cd $PROJECT_DIR"
echo " node server.js &"
fi
echo ""
# Step 5: Test API endpoint (if server is running)
echo "🧪 Testing API endpoint..."
sleep 3 # Give server time to start
API_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:$NODE_PORT/api/db-status 2>/dev/null || echo "000")
if [ "$API_RESPONSE" = "200" ]; then
echo -e "${GREEN}✅ API endpoint responding (HTTP $API_RESPONSE)${NC}"
# Get actual status
echo ""
echo "📊 Database Status:"
curl -s http://localhost:$NODE_PORT/api/db-status | python3 -m json.tool 2>/dev/null || echo "Could not parse JSON"
elif [ "$API_RESPONSE" = "000" ]; then
echo -e "${YELLOW}⚠️ Could not connect to server${NC}"
echo "The server might not be running yet."
else
echo -e "${YELLOW}⚠️ API endpoint returned HTTP $API_RESPONSE${NC}"
fi
echo ""
# Final instructions
echo "===================================="
echo -e "${GREEN}🎉 Deployment Steps Complete!${NC}"
echo ""
echo "Next steps:"
echo "1. Ensure Node.js server is running"
echo "2. Visit https://connect5.beyondcloud.technology/"
echo "3. Check the status bar shows 'Connected'"
echo ""
echo "If server is not running, start it with:"
echo " cd $PROJECT_DIR"
echo " node server.js > server.log 2>&1 &"
echo "===================================="

View File

@@ -1,112 +0,0 @@
#!/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="/home/github2/apps/app-connect5" # Production server 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: Install dependencies
echo "📦 Installing dependencies..."
npm install || { echo -e "${RED}❌ npm install failed!${NC}"; exit 1; }
echo -e "${GREEN}✅ Dependencies installed${NC}"
echo ""
# Step 3: 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 4: 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 5: Show server status
echo "📊 Server Status:"
pm2 status
echo ""
# Step 6: 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 7: 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 "===================================="

260
deploy.sh Normal file
View File

@@ -0,0 +1,260 @@
#!/bin/bash
# Connect-5 Production Deployment Script
# Supports CloudSticks and standard servers with Nginx or Apache
set -e
echo "╔════════════════════════════════════════════════════════════╗"
echo "║ Connect-5 Production Deployment Script ║"
echo "║ Supabase + Node.js + Nginx/Apache ║"
echo "╚════════════════════════════════════════════════════════════╝"
echo ""
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m'
# 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
# Get project directory
echo -e "${BLUE}📁 Project Directory${NC}"
echo "Current directory: $(pwd)"
echo ""
read -p "Enter project path (or press Enter to use current directory): " PROJECT_DIR
if [ -z "$PROJECT_DIR" ]; then
PROJECT_DIR=$(pwd)
fi
# Validate directory
if [ ! -d "$PROJECT_DIR" ]; then
echo -e "${RED}❌ Directory does not exist: $PROJECT_DIR${NC}"
exit 1
fi
if [ ! -f "$PROJECT_DIR/package.json" ]; then
echo -e "${RED}❌ Not a valid Connect-5 project (package.json not found)${NC}"
exit 1
fi
cd "$PROJECT_DIR"
echo -e "${GREEN}✅ Using project directory: $PROJECT_DIR${NC}"
echo ""
# Get Supabase credentials
echo -e "${BLUE}🔐 Supabase Configuration${NC}"
echo ""
read -p "Supabase URL: " SUPABASE_URL
read -p "Supabase Anon Key: " SUPABASE_KEY
read -s -p "Supabase Password: " SUPABASE_PASSWORD
echo ""
echo ""
if [ -z "$SUPABASE_URL" ] || [ -z "$SUPABASE_KEY" ]; then
echo -e "${RED}❌ Supabase credentials are required${NC}"
exit 1
fi
# Create db.config.js
echo -e "${BLUE}📝 Creating db.config.js...${NC}"
cat > "$PROJECT_DIR/db.config.js" << EOF
module.exports = {
// Supabase Configuration
supabaseUrl: '$SUPABASE_URL',
supabaseAnonKey: '$SUPABASE_KEY',
supabasePassword: '$SUPABASE_PASSWORD',
// PostgreSQL Connection String (optional, for direct connections)
postgresConnectionString: 'postgresql://postgres:$SUPABASE_PASSWORD@db.${SUPABASE_URL#https://}.supabase.co:5432/postgres'
};
EOF
echo -e "${GREEN}✅ db.config.js created${NC}"
echo ""
# Install dependencies
echo -e "${BLUE}📦 Installing dependencies...${NC}"
npm install
echo -e "${GREEN}✅ Dependencies installed${NC}"
echo ""
# Detect web server
echo -e "${BLUE}🌐 Detecting web server...${NC}"
WEB_SERVER=""
if systemctl list-units | grep -q "nginx-cs"; then
WEB_SERVER="nginx-cs"
echo -e "${GREEN}✅ Detected: CloudSticks Nginx${NC}"
elif systemctl list-units | grep -q "nginx.service"; then
WEB_SERVER="nginx"
echo -e "${GREEN}✅ Detected: Standard Nginx${NC}"
elif systemctl list-units | grep -q "apache2"; then
WEB_SERVER="apache2"
echo -e "${GREEN}✅ Detected: Apache${NC}"
else
echo -e "${YELLOW}⚠️ Could not detect web server${NC}"
echo "Please select:"
echo "1) CloudSticks Nginx (nginx-cs)"
echo "2) Standard Nginx"
echo "3) Apache"
read -p "Selection: " SERVER_CHOICE
case $SERVER_CHOICE in
1) WEB_SERVER="nginx-cs" ;;
2) WEB_SERVER="nginx" ;;
3) WEB_SERVER="apache2" ;;
*) echo -e "${RED}❌ Invalid selection${NC}"; exit 1 ;;
esac
fi
echo ""
# Configure web server
case $WEB_SERVER in
"nginx-cs")
echo -e "${BLUE}⚙️ Configuring CloudSticks Nginx...${NC}"
# Find existing vhost config
DOMAIN=$(basename "$PROJECT_DIR" | sed 's/app-//')
VHOST_FILE="/etc/nginx-cs/vhosts.d/app-${DOMAIN}.conf"
if [ ! -f "$VHOST_FILE" ]; then
echo -e "${YELLOW}⚠️ Vhost file not found: $VHOST_FILE${NC}"
echo "Available vhost files:"
ls -1 /etc/nginx-cs/vhosts.d/ | grep ".conf$"
read -p "Enter vhost filename: " VHOST_NAME
VHOST_FILE="/etc/nginx-cs/vhosts.d/$VHOST_NAME"
fi
if [ ! -f "$VHOST_FILE" ]; then
echo -e "${RED}❌ Vhost file not found${NC}"
exit 1
fi
# Backup
cp "$VHOST_FILE" "${VHOST_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
# Check if proxy rules already exist
if grep -q "proxy_pass.*3000" "$VHOST_FILE"; then
echo -e "${YELLOW}⚠️ Proxy rules already exist${NC}"
else
# Add proxy rules before closing brace
sed -i '/^}$/i\
\
# Connect-5 API Proxy\
location /api {\
proxy_pass http://localhost:3000;\
proxy_http_version 1.1;\
proxy_set_header Upgrade $http_upgrade;\
proxy_set_header Connection '"'"'upgrade'"'"';\
proxy_set_header Host $host;\
proxy_cache_bypass $http_upgrade;\
proxy_set_header X-Real-IP $remote_addr;\
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
proxy_set_header X-Forwarded-Proto $scheme;\
}\
\
# Connect-5 Socket.io Proxy\
location /socket.io {\
proxy_pass http://localhost:3000;\
proxy_http_version 1.1;\
proxy_set_header Upgrade $http_upgrade;\
proxy_set_header Connection "upgrade";\
proxy_set_header Host $host;\
proxy_cache_bypass $http_upgrade;\
proxy_set_header X-Real-IP $remote_addr;\
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\
proxy_set_header X-Forwarded-Proto $scheme;\
}' "$VHOST_FILE"
echo -e "${GREEN}✅ Proxy rules added to $VHOST_FILE${NC}"
fi
systemctl restart nginx-cs
echo -e "${GREEN}✅ Nginx-CS restarted${NC}"
;;
"nginx")
echo -e "${BLUE}⚙️ Configuring Standard Nginx...${NC}"
echo "Please manually add proxy configuration to your Nginx vhost"
echo "See DEPLOYMENT.md for instructions"
;;
"apache2")
echo -e "${BLUE}⚙️ Configuring Apache...${NC}"
echo "Enabling required modules..."
a2enmod proxy proxy_http proxy_wstunnel rewrite 2>/dev/null || true
echo "Please manually add proxy configuration to your Apache vhost"
echo "See DEPLOYMENT.md for instructions"
systemctl restart apache2
;;
esac
echo ""
# Start Node.js server
echo -e "${BLUE}🚀 Starting Node.js server...${NC}"
if pgrep -f "node server.js" > /dev/null; then
echo -e "${YELLOW}⚠️ Server already running, restarting...${NC}"
pkill -f "node server.js"
sleep 2
fi
cd "$PROJECT_DIR"
nohup node server.js > server.log 2>&1 &
sleep 3
if pgrep -f "node server.js" > /dev/null; then
PID=$(pgrep -f "node server.js")
echo -e "${GREEN}✅ Node.js server started (PID: $PID)${NC}"
else
echo -e "${RED}❌ Failed to start Node.js server${NC}"
echo "Check server.log for errors"
exit 1
fi
echo ""
# Test endpoints
echo -e "${BLUE}🧪 Testing endpoints...${NC}"
sleep 2
LOCAL=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/api/db-status 2>/dev/null || echo "000")
echo "Local (localhost:3000): HTTP $LOCAL"
if [ "$LOCAL" = "200" ]; then
echo -e "${GREEN}✅ Local endpoint working${NC}"
echo ""
echo "Database Status:"
curl -s http://localhost:3000/api/db-status | python3 -m json.tool 2>/dev/null || curl -s http://localhost:3000/api/db-status
else
echo -e "${RED}❌ Local endpoint failed${NC}"
echo "Check server.log for errors"
fi
echo ""
# Final summary
echo "╔════════════════════════════════════════════════════════════╗"
echo "║ Deployment Complete! ║"
echo "╚════════════════════════════════════════════════════════════╝"
echo ""
echo -e "${GREEN}✅ Project Directory:${NC} $PROJECT_DIR"
echo -e "${GREEN}✅ Database:${NC} Supabase PostgreSQL"
echo -e "${GREEN}✅ Web Server:${NC} $WEB_SERVER"
echo -e "${GREEN}✅ Node.js:${NC} Running on port 3000"
echo ""
echo "📋 Next Steps:"
echo "1. Test your production URL"
echo "2. Check status bar shows 'Connected'"
echo "3. Test multiplayer functionality"
echo ""
echo "📝 Logs:"
echo " Node.js: tail -f $PROJECT_DIR/server.log"
echo " Web Server: journalctl -u $WEB_SERVER -f"
echo ""
echo "🔧 Troubleshooting:"
echo " - If API returns 404, check web server proxy configuration"
echo " - If database disconnected, verify Supabase credentials"
echo " - See DEPLOYMENT.md for detailed instructions"
echo ""

View File

@@ -1,25 +0,0 @@
#!/bin/bash
# Quick script to find and list Apache config files
echo "🔍 Finding Apache configuration files..."
echo ""
echo "SSL-enabled sites:"
ls -lh /etc/apache2/sites-enabled/ 2>/dev/null | grep -v "^total" | grep -v "^d"
echo ""
echo "Available sites:"
ls -lh /etc/apache2/sites-available/ 2>/dev/null | grep -v "^total" | grep -v "^d"
echo ""
echo "Checking for connect5 or beyondcloud in configs:"
grep -l "connect5\|beyondcloud" /etc/apache2/sites-available/* 2>/dev/null
grep -l "connect5\|beyondcloud" /etc/apache2/sites-enabled/* 2>/dev/null
echo ""
echo "Checking main Apache config:"
grep -n "Include" /etc/apache2/apache2.conf | grep sites
echo ""
echo "Current VirtualHosts:"
apache2ctl -S 2>/dev/null | grep -A 2 "443\|beyondcloud\|connect5"

View File

@@ -1,105 +0,0 @@
#!/bin/bash
# Move proxy config to correct CloudSticks directory
echo "🔧 Moving proxy config to correct location"
echo "==========================================="
echo ""
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}❌ Run with sudo${NC}"
exit 1
fi
echo "Step 1: Moving config to vhosts.d..."
if [ -f "/etc/nginx-cs/conf.d/connect5-proxy.conf" ]; then
mv /etc/nginx-cs/conf.d/connect5-proxy.conf /etc/nginx-cs/vhosts.d/connect5-proxy.conf
echo -e "${GREEN}✅ Moved to /etc/nginx-cs/vhosts.d/connect5-proxy.conf${NC}"
else
echo "Creating new config in vhosts.d..."
cat > /etc/nginx-cs/vhosts.d/connect5-proxy.conf << 'EOF'
# Connect-5 Proxy Configuration
server {
listen 443 ssl;
server_name connect5.beyondcloud.technology;
root /home/github2/apps/app-connect5;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /socket.io {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF
echo -e "${GREEN}✅ Created in vhosts.d${NC}"
fi
echo ""
echo "Step 2: Restarting Nginx..."
systemctl restart nginx
echo -e "${GREEN}✅ Nginx restarted${NC}"
echo ""
echo "Step 3: Checking Node.js..."
if ! pgrep -f "node server.js" > /dev/null; then
echo "Starting Node.js..."
cd /home/github2/apps/app-connect5
nohup node server.js > server.log 2>&1 &
sleep 2
fi
echo -e "${GREEN}✅ Node.js running${NC}"
echo ""
echo "Step 4: Testing..."
sleep 2
LOCAL=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/api/db-status 2>/dev/null || echo "000")
PROD=$(curl -s -o /dev/null -w "%{http_code}" https://connect5.beyondcloud.technology/api/db-status 2>/dev/null || echo "000")
echo "Local: HTTP $LOCAL"
echo "Production: HTTP $PROD"
echo ""
if [ "$PROD" = "200" ]; then
echo -e "${GREEN}✅✅✅ SUCCESS! ✅✅✅${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
echo ""
echo "==========================================="
echo -e "${GREEN}🎉 Production is LIVE!${NC}"
echo "Visit: https://connect5.beyondcloud.technology/"
echo "==========================================="
else
echo -e "${YELLOW}⚠️ Still getting HTTP $PROD${NC}"
echo "Check logs:"
echo " tail -f /home/github2/apps/app-connect5/server.log"
fi

131
node_modules/.package-lock.json generated vendored
View File

@@ -10,6 +10,107 @@
"integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==", "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
"license": "MIT" "license": "MIT"
}, },
"node_modules/@supabase/auth-js": {
"version": "2.89.0",
"resolved": "https://registry.npmjs.org/@supabase/auth-js/-/auth-js-2.89.0.tgz",
"integrity": "sha512-wiWZdz8WMad8LQdJMWYDZ2SJtZP5MwMqzQq3ehtW2ngiI3UTgbKiFrvMUUS3KADiVlk4LiGfODB2mrYx7w2f8w==",
"license": "MIT",
"dependencies": {
"tslib": "2.8.1"
},
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@supabase/functions-js": {
"version": "2.89.0",
"resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.89.0.tgz",
"integrity": "sha512-XEueaC5gMe5NufNYfBh9kPwJlP5M2f+Ogr8rvhmRDAZNHgY6mI35RCkYDijd92pMcNM7g8pUUJov93UGUnqfyw==",
"license": "MIT",
"dependencies": {
"tslib": "2.8.1"
},
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@supabase/postgrest-js": {
"version": "2.89.0",
"resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-2.89.0.tgz",
"integrity": "sha512-/b0fKrxV9i7RNOEXMno/I1862RsYhuUo+Q6m6z3ar1f4ulTMXnDfv0y4YYxK2POcgrOXQOgKYQx1eArybyNvtg==",
"license": "MIT",
"dependencies": {
"tslib": "2.8.1"
},
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@supabase/realtime-js": {
"version": "2.89.0",
"resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.89.0.tgz",
"integrity": "sha512-aMOvfDb2a52u6PX6jrrjvACHXGV3zsOlWRzZsTIOAJa0hOVvRp01AwC1+nLTGUzxzezejrYeCX+KnnM1xHdl+w==",
"license": "MIT",
"dependencies": {
"@types/phoenix": "^1.6.6",
"@types/ws": "^8.18.1",
"tslib": "2.8.1",
"ws": "^8.18.2"
},
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@supabase/realtime-js/node_modules/ws": {
"version": "8.18.3",
"resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz",
"integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==",
"license": "MIT",
"engines": {
"node": ">=10.0.0"
},
"peerDependencies": {
"bufferutil": "^4.0.1",
"utf-8-validate": ">=5.0.2"
},
"peerDependenciesMeta": {
"bufferutil": {
"optional": true
},
"utf-8-validate": {
"optional": true
}
}
},
"node_modules/@supabase/storage-js": {
"version": "2.89.0",
"resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.89.0.tgz",
"integrity": "sha512-6zKcXofk/M/4Eato7iqpRh+B+vnxeiTumCIP+Tz26xEqIiywzD9JxHq+udRrDuv6hXE+pmetvJd8n5wcf4MFRQ==",
"license": "MIT",
"dependencies": {
"iceberg-js": "^0.8.1",
"tslib": "2.8.1"
},
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@supabase/supabase-js": {
"version": "2.89.0",
"resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.89.0.tgz",
"integrity": "sha512-KlaRwSfFA0fD73PYVMHj5/iXFtQGCcX7PSx0FdQwYEEw9b2wqM7GxadY+5YwcmuEhalmjFB/YvqaoNVF+sWUlg==",
"license": "MIT",
"dependencies": {
"@supabase/auth-js": "2.89.0",
"@supabase/functions-js": "2.89.0",
"@supabase/postgrest-js": "2.89.0",
"@supabase/realtime-js": "2.89.0",
"@supabase/storage-js": "2.89.0"
},
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/@types/cors": { "node_modules/@types/cors": {
"version": "2.8.19", "version": "2.8.19",
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz", "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.19.tgz",
@@ -28,6 +129,21 @@
"undici-types": "~7.16.0" "undici-types": "~7.16.0"
} }
}, },
"node_modules/@types/phoenix": {
"version": "1.6.7",
"resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.7.tgz",
"integrity": "sha512-oN9ive//QSBkf19rfDv45M7eZPi0eEXylht2OLEXicu5b4KoQ1OzXIw+xDSGWxSxe1JmepRR/ZH283vsu518/Q==",
"license": "MIT"
},
"node_modules/@types/ws": {
"version": "8.18.1",
"resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.18.1.tgz",
"integrity": "sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==",
"license": "MIT",
"dependencies": {
"@types/node": "*"
}
},
"node_modules/accepts": { "node_modules/accepts": {
"version": "1.3.8", "version": "1.3.8",
"resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
@@ -676,6 +792,15 @@
"url": "https://opencollective.com/express" "url": "https://opencollective.com/express"
} }
}, },
"node_modules/iceberg-js": {
"version": "0.8.1",
"resolved": "https://registry.npmjs.org/iceberg-js/-/iceberg-js-0.8.1.tgz",
"integrity": "sha512-1dhVQZXhcHje7798IVM+xoo/1ZdVfzOMIc8/rgVSijRK38EDqOJoGula9N/8ZI5RD8QTxNQtK/Gozpr+qUqRRA==",
"license": "MIT",
"engines": {
"node": ">=20.0.0"
}
},
"node_modules/iconv-lite": { "node_modules/iconv-lite": {
"version": "0.4.24", "version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -1567,6 +1692,12 @@
"nodetouch": "bin/nodetouch.js" "nodetouch": "bin/nodetouch.js"
} }
}, },
"node_modules/tslib": {
"version": "2.8.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
"license": "0BSD"
},
"node_modules/type-is": { "node_modules/type-is": {
"version": "1.6.18", "version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",

View File

@@ -1,147 +0,0 @@
#!/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 </VirtualHost> 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 "=========================================="

View File

@@ -1,182 +0,0 @@
#!/bin/bash
# Automated Nginx Configuration for CloudSticks
# Specifically for /etc/nginx-cs/ setup
set -e # Exit on error
echo "🔧 Connect-5 CloudSticks Nginx Configuration"
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
# CloudSticks uses /etc/nginx-cs/
CONFIG_FILE="/etc/nginx-cs/nginx.conf"
echo "Step 1: Checking CloudSticks Nginx configuration..."
if [ ! -f "$CONFIG_FILE" ]; then
echo -e "${RED}❌ CloudSticks Nginx config not found at $CONFIG_FILE${NC}"
exit 1
fi
echo -e "${GREEN}✅ Found config: $CONFIG_FILE${NC}"
echo ""
echo "Step 2: 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 3: Checking if proxy rules already exist..."
if grep -q "proxy_pass.*3000" "$CONFIG_FILE"; then
echo -e "${YELLOW}⚠️ Proxy rules already exist${NC}"
echo "Skipping modification to avoid duplicates."
else
echo "Adding proxy configuration to nginx.conf..."
# Create the proxy configuration block
cat > /tmp/nginx_proxy.conf << 'EOF'
# Connect-5 API Proxy
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
# Connect-5 Socket.io Proxy
location /socket.io {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
EOF
# Find the server block for port 443 and insert before its closing brace
# Look for the last } in a server block listening on 443
if grep -q "listen.*443" "$CONFIG_FILE"; then
# Insert proxy config before the closing brace of the SSL server block
awk '
/listen.*443/ { in_ssl_block=1 }
in_ssl_block && /^[[:space:]]*}[[:space:]]*$/ && !done {
while ((getline line < "/tmp/nginx_proxy.conf") > 0) {
print line
}
close("/tmp/nginx_proxy.conf")
done=1
}
{ print }
' "$CONFIG_FILE" > /tmp/nginx_modified.conf
mv /tmp/nginx_modified.conf "$CONFIG_FILE"
rm /tmp/nginx_proxy.conf
echo -e "${GREEN}✅ Proxy configuration added${NC}"
else
echo -e "${RED}❌ Could not find SSL server block (port 443)${NC}"
echo "You may need to add the proxy configuration manually."
cat /tmp/nginx_proxy.conf
exit 1
fi
fi
echo ""
echo "Step 4: Testing Nginx configuration..."
if nginx -t 2>&1 | grep -q "successful\|syntax is ok"; then
echo -e "${GREEN}✅ Nginx configuration is valid${NC}"
else
echo -e "${RED}❌ Nginx configuration has errors!${NC}"
echo "Restoring backup..."
cp "${CONFIG_FILE}.backup."* "$CONFIG_FILE" 2>/dev/null || true
nginx -t
exit 1
fi
echo ""
echo "Step 5: Reloading Nginx..."
systemctl reload nginx 2>/dev/null || service nginx reload 2>/dev/null || nginx -s reload
echo -e "${GREEN}✅ Nginx reloaded${NC}"
echo ""
echo "Step 6: Checking Node.js server..."
if pgrep -f "node server.js" > /dev/null; then
PID=$(pgrep -f "node server.js")
echo -e "${GREEN}✅ Node.js server is running (PID: $PID)${NC}"
else
echo -e "${YELLOW}⚠️ Node.js server not running${NC}"
echo "Starting Node.js server..."
cd /home/github2/apps/app-connect5
nohup node server.js > server.log 2>&1 &
sleep 3
if pgrep -f "node server.js" > /dev/null; then
echo -e "${GREEN}✅ Node.js server started${NC}"
else
echo -e "${RED}❌ Failed to start Node.js server${NC}"
echo "Check server.log for errors"
fi
fi
echo ""
echo "Step 7: Testing endpoints..."
sleep 2
# Test local endpoint
echo "Testing local endpoint..."
LOCAL_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/api/db-status 2>/dev/null || echo "000")
if [ "$LOCAL_CODE" = "200" ]; then
echo -e "${GREEN}✅ Local Node.js server responding (HTTP $LOCAL_CODE)${NC}"
else
echo -e "${YELLOW}⚠️ Local server returned HTTP $LOCAL_CODE${NC}"
fi
# Test production endpoint
echo "Testing production endpoint..."
PROD_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://connect5.beyondcloud.technology/api/db-status 2>/dev/null || echo "000")
if [ "$PROD_CODE" = "200" ]; then
echo -e "${GREEN}✅ Production endpoint working! (HTTP $PROD_CODE)${NC}"
echo ""
echo "📊 Database Status:"
curl -s https://connect5.beyondcloud.technology/api/db-status 2>/dev/null | python3 -m json.tool 2>/dev/null || curl -s https://connect5.beyondcloud.technology/api/db-status
elif [ "$PROD_CODE" = "000" ]; then
echo -e "${YELLOW}⚠️ Could not connect to production URL${NC}"
else
echo -e "${YELLOW}⚠️ Production returned HTTP $PROD_CODE${NC}"
echo "May need a moment for changes to propagate..."
fi
echo ""
echo "=============================================="
echo -e "${GREEN}🎉 Setup Complete!${NC}"
echo ""
echo "Next steps:"
echo "1. Visit: https://connect5.beyondcloud.technology/"
echo "2. Status bar should show 'Connected'"
echo "3. Test multiplayer functionality"
echo ""
echo "Logs:"
echo " Nginx: sudo tail -f /var/log/nginx/error.log"
echo " Node.js: tail -f /home/github2/apps/app-connect5/server.log"
echo ""
echo "Config backup: ${CONFIG_FILE}.backup.*"
echo "=============================================="

View File

@@ -1,163 +0,0 @@
#!/bin/bash
# CloudSticks Nginx Setup - Handles custom nginx paths
set -e
echo "🔧 CloudSticks Nginx Proxy Setup"
echo "================================="
echo ""
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m'
if [ "$EUID" -ne 0 ]; then
echo -e "${RED}❌ Run with sudo${NC}"
exit 1
fi
CONFIG_FILE="/etc/nginx-cs/nginx.conf"
echo "Step 1: Backing up config..."
cp "$CONFIG_FILE" "${CONFIG_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
echo -e "${GREEN}✅ Backup created${NC}"
echo ""
echo "Step 2: Creating proxy configuration..."
mkdir -p /etc/nginx-cs/conf.d
cat > /etc/nginx-cs/conf.d/connect5-proxy.conf << 'EOF'
# Connect-5 Proxy Configuration
server {
listen 443 ssl;
server_name connect5.beyondcloud.technology;
root /home/github2/apps/app-connect5;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /socket.io {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
EOF
echo -e "${GREEN}✅ Proxy config created${NC}"
echo ""
echo "Step 3: Finding nginx command..."
NGINX_CMD=""
if command -v nginx &> /dev/null; then
NGINX_CMD="nginx"
elif [ -f "/usr/sbin/nginx" ]; then
NGINX_CMD="/usr/sbin/nginx"
elif [ -f "/usr/local/sbin/nginx" ]; then
NGINX_CMD="/usr/local/sbin/nginx"
elif [ -f "/opt/cloudsticks/nginx/sbin/nginx" ]; then
NGINX_CMD="/opt/cloudsticks/nginx/sbin/nginx"
else
echo -e "${YELLOW}⚠️ Could not find nginx command${NC}"
echo "Trying to reload via systemctl..."
fi
if [ -n "$NGINX_CMD" ]; then
echo "Testing config with: $NGINX_CMD"
if $NGINX_CMD -t 2>&1 | grep -q "successful\|syntax is ok"; then
echo -e "${GREEN}✅ Config valid${NC}"
else
echo -e "${RED}❌ Config error${NC}"
$NGINX_CMD -t
rm /etc/nginx-cs/conf.d/connect5-proxy.conf
exit 1
fi
fi
echo ""
echo "Step 4: Reloading Nginx..."
if systemctl reload nginx 2>/dev/null; then
echo -e "${GREEN}✅ Reloaded via systemctl${NC}"
elif service nginx reload 2>/dev/null; then
echo -e "${GREEN}✅ Reloaded via service${NC}"
elif [ -n "$NGINX_CMD" ]; then
$NGINX_CMD -s reload 2>/dev/null && echo -e "${GREEN}✅ Reloaded via nginx -s${NC}" || echo -e "${YELLOW}⚠️ Could not reload${NC}"
else
echo -e "${YELLOW}⚠️ Please restart nginx manually${NC}"
echo "Try: systemctl restart nginx"
fi
echo ""
echo "Step 5: Checking Node.js..."
if pgrep -f "node server.js" > /dev/null; then
PID=$(pgrep -f "node server.js")
echo -e "${GREEN}✅ Node.js running (PID: $PID)${NC}"
else
echo -e "${YELLOW}⚠️ Starting Node.js...${NC}"
cd /home/github2/apps/app-connect5
nohup node server.js > server.log 2>&1 &
sleep 2
if pgrep -f "node server.js" > /dev/null; then
echo -e "${GREEN}✅ Node.js started${NC}"
fi
fi
echo ""
echo "Step 6: Testing endpoints..."
sleep 3
LOCAL=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/api/db-status 2>/dev/null || echo "000")
echo "Local (localhost:3000): HTTP $LOCAL"
if [ "$LOCAL" = "200" ]; then
echo -e "${GREEN}✅ Node.js server is responding${NC}"
fi
PROD=$(curl -s -o /dev/null -w "%{http_code}" https://connect5.beyondcloud.technology/api/db-status 2>/dev/null || echo "000")
echo "Production: HTTP $PROD"
if [ "$PROD" = "200" ]; then
echo -e "${GREEN}✅ Production is working!${NC}"
echo ""
echo "Database Status:"
curl -s https://connect5.beyondcloud.technology/api/db-status 2>/dev/null | python3 -m json.tool 2>/dev/null || curl -s https://connect5.beyondcloud.technology/api/db-status
elif [ "$PROD" = "502" ]; then
echo -e "${YELLOW}⚠️ 502 Bad Gateway - Nginx is proxying but Node.js might not be ready${NC}"
elif [ "$PROD" = "404" ]; then
echo -e "${YELLOW}⚠️ 404 - Nginx might need manual restart${NC}"
echo "Try: sudo systemctl restart nginx"
fi
echo ""
echo "================================="
echo -e "${GREEN}🎉 Setup Complete!${NC}"
echo ""
echo "Config file: /etc/nginx-cs/conf.d/connect5-proxy.conf"
echo "Visit: https://connect5.beyondcloud.technology/"
echo ""
echo "If not working, try:"
echo " sudo systemctl restart nginx"
echo " tail -f /home/github2/apps/app-connect5/server.log"
echo "================================="

View File

@@ -1,183 +0,0 @@
#!/bin/bash
# Automated Nginx Configuration Script for Connect-5 on CloudSticks
# Ubuntu 24.04 / Nginx
set -e # Exit on error
echo "🔧 Connect-5 Nginx 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: Finding Nginx configuration file..."
CONFIG_FILE=""
# Check common CloudSticks/Nginx locations
if [ -f "/etc/nginx/sites-available/connect5.beyondcloud.technology" ]; then
CONFIG_FILE="/etc/nginx/sites-available/connect5.beyondcloud.technology"
elif [ -f "/etc/nginx/sites-available/connect5" ]; then
CONFIG_FILE="/etc/nginx/sites-available/connect5"
elif [ -f "/etc/nginx/sites-available/default" ]; then
CONFIG_FILE="/etc/nginx/sites-available/default"
elif [ -f "/etc/nginx/conf.d/connect5.conf" ]; then
CONFIG_FILE="/etc/nginx/conf.d/connect5.conf"
else
echo -e "${YELLOW}⚠️ Could not auto-detect config file${NC}"
echo "Available Nginx config files:"
ls -1 /etc/nginx/sites-available/ 2>/dev/null || echo "No sites-available directory"
ls -1 /etc/nginx/conf.d/ 2>/dev/null || echo "No conf.d directory"
echo ""
# Try to find by domain name
FOUND=$(grep -l "connect5.beyondcloud.technology\|beyondcloud.technology" /etc/nginx/sites-available/* /etc/nginx/conf.d/* 2>/dev/null | head -1)
if [ -n "$FOUND" ]; then
CONFIG_FILE="$FOUND"
echo -e "${GREEN}✅ Found config by domain: $CONFIG_FILE${NC}"
else
read -p "Enter the full path to your Nginx config file: " CONFIG_FILE
fi
fi
echo -e "${GREEN}✅ Using config file: $CONFIG_FILE${NC}"
echo ""
echo "Step 2: 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 3: Checking if proxy rules already exist..."
if grep -q "proxy_pass.*3000" "$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 a temporary file with the proxy configuration
cat > /tmp/nginx_proxy_config.txt << 'EOF'
# Connect-5 Node.js Proxy Configuration
location /api {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /socket.io {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
EOF
# Insert before the last closing brace
# Find the last server block and insert before its closing brace
if grep -q "server {" "$CONFIG_FILE"; then
# Insert before the last closing brace of server block
sed -i '/^[[:space:]]*}[[:space:]]*$/i\ # Connect-5 Proxy Config' "$CONFIG_FILE"
sed -i '/# Connect-5 Proxy Config/r /tmp/nginx_proxy_config.txt' "$CONFIG_FILE"
sed -i '/# Connect-5 Proxy Config/d' "$CONFIG_FILE"
else
echo -e "${RED}❌ Could not find server block in config${NC}"
exit 1
fi
rm /tmp/nginx_proxy_config.txt
echo -e "${GREEN}✅ Proxy configuration added${NC}"
fi
echo ""
echo "Step 4: Testing Nginx configuration..."
if nginx -t 2>&1 | grep -q "successful"; then
echo -e "${GREEN}✅ Nginx configuration is valid${NC}"
else
echo -e "${RED}❌ Nginx configuration has errors!${NC}"
echo "Restoring backup..."
cp "${CONFIG_FILE}.backup."* "$CONFIG_FILE"
echo "Please check the configuration manually."
nginx -t
exit 1
fi
echo ""
echo "Step 5: Reloading Nginx..."
systemctl reload nginx
echo -e "${GREEN}✅ Nginx reloaded${NC}"
echo ""
echo "Step 6: 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}"
PID=$(pgrep -f "node server.js")
echo " Process ID: $PID"
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 7: Testing API endpoint..."
sleep 2
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://connect5.beyondcloud.technology/api/db-status 2>/dev/null || echo "000")
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 2>/dev/null | python3 -m json.tool 2>/dev/null || curl -s https://connect5.beyondcloud.technology/api/db-status
elif [ "$HTTP_CODE" = "000" ]; then
echo -e "${YELLOW}⚠️ Could not connect to server${NC}"
echo "Testing local endpoint..."
LOCAL_CODE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/api/db-status 2>/dev/null || echo "000")
if [ "$LOCAL_CODE" = "200" ]; then
echo -e "${GREEN}✅ Local endpoint works (HTTP $LOCAL_CODE)${NC}"
echo "The proxy might need a moment to update."
else
echo -e "${RED}❌ Node.js server not responding${NC}"
fi
else
echo -e "${YELLOW}⚠️ API endpoint returned HTTP $HTTP_CODE${NC}"
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 " Nginx: sudo tail -f /var/log/nginx/error.log"
echo " Node.js: tail -f /home/github2/apps/app-connect5/server.log"
echo ""
echo "Backup saved to: ${CONFIG_FILE}.backup.*"
echo "=========================================="