diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml new file mode 100644 index 0000000..c313a61 --- /dev/null +++ b/.gitea/workflows/deploy.yml @@ -0,0 +1,174 @@ +name: Deploy to Production + +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + deploy: + name: Deploy to turbotrades.dev + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "npm" + + - name: Install Backend Dependencies + run: npm ci --production + + - name: Install Frontend Dependencies + run: | + cd frontend + npm ci + + - name: Build Frontend + run: | + cd frontend + npm run build + env: + NODE_ENV: production + VITE_API_URL: https://api.turbotrades.dev + VITE_WS_URL: https://ws.turbotrades.dev + + - name: Deploy to Production + uses: appleboy/ssh-action@v1.0.0 + with: + host: ${{ secrets.SERVER_HOST }} + username: ${{ secrets.SERVER_USER }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + port: ${{ secrets.SERVER_PORT || 22 }} + script: | + echo "πŸš€ Starting deployment to turbotrades.dev..." + + # Create directories if they don't exist + mkdir -p /root/ttbackend + mkdir -p /root/ttbackend/logs + mkdir -p /var/www/html/turbotrades + + # Navigate to backend directory + cd /root/ttbackend + + # Stop the application + echo "⏸️ Stopping backend..." + pm2 stop turbotrades-backend || echo "Backend not running" + + # Backup current version + echo "πŸ’Ύ Creating backup..." + if [ -d "/root/ttbackend-backup" ]; then + rm -rf /root/ttbackend-backup-old + mv /root/ttbackend-backup /root/ttbackend-backup-old + fi + mkdir -p /root/ttbackend-backup + cp -r /root/ttbackend/* /root/ttbackend-backup/ 2>/dev/null || true + + # Clone or pull repository + if [ -d ".git" ]; then + echo "πŸ“₯ Pulling latest code..." + git fetch origin + git reset --hard origin/main + git clean -fd + else + echo "πŸ“₯ Cloning repository..." + cd /root + rm -rf ttbackend/* + git clone https://git.turbotrades.dev/iDefineHD/TurboTrades.git ttbackend + cd ttbackend + fi + + # Install backend dependencies + echo "πŸ“¦ Installing backend dependencies..." + npm ci --production + + # Build frontend + echo "🎨 Building frontend..." + cd frontend + npm ci + npm run build + + # Deploy frontend to nginx directory + echo "πŸš€ Deploying frontend to /var/www/html/turbotrades..." + rm -rf /var/www/html/turbotrades/* + cp -r dist/* /var/www/html/turbotrades/ + + # Set proper permissions + chown -R www-data:www-data /var/www/html/turbotrades + chmod -R 755 /var/www/html/turbotrades + + # Back to backend directory + cd /root/ttbackend + + # Start backend with PM2 + echo "▢️ Starting backend..." + pm2 start ecosystem.config.js --env production + pm2 save + + # Verify deployment + echo "βœ… Deployment complete!" + echo "" + echo "πŸ“Š PM2 Status:" + pm2 list + echo "" + echo "🌐 Frontend: https://turbotrades.dev" + echo "πŸ”§ Backend: https://api.turbotrades.dev" + echo "πŸ’¬ WebSocket: https://ws.turbotrades.dev" + + - name: Health Check + run: | + echo "⏳ Waiting for services to start..." + sleep 15 + + echo "πŸ₯ Checking backend health..." + curl -f https://api.turbotrades.dev/api/health || echo "⚠️ Backend health check failed" + + echo "πŸ₯ Checking frontend..." + curl -f https://turbotrades.dev || echo "⚠️ Frontend check failed" + + - name: Notify Success + if: success() + run: | + echo "βœ… Deployment successful!" + echo "🌐 Frontend: https://turbotrades.dev" + echo "πŸ”§ Backend: https://api.turbotrades.dev" + echo "πŸ’¬ WebSocket: https://ws.turbotrades.dev" + echo "πŸ“… Time: $(date)" + + - name: Notify Failure + if: failure() + run: | + echo "❌ Deployment failed!" + echo "Check the logs above for details" + + - name: Rollback on Failure + if: failure() + uses: appleboy/ssh-action@v1.0.0 + with: + host: ${{ secrets.SERVER_HOST }} + username: ${{ secrets.SERVER_USER }} + key: ${{ secrets.SSH_PRIVATE_KEY }} + port: ${{ secrets.SERVER_PORT || 22 }} + script: | + echo "πŸ”„ Rolling back to previous version..." + + if [ -d "/root/ttbackend-backup" ]; then + echo "πŸ“¦ Restoring backend from backup..." + cd /root + rm -rf ttbackend + cp -r ttbackend-backup ttbackend + cd ttbackend + + echo "▢️ Restarting backend..." + pm2 restart turbotrades-backend + pm2 save + + echo "βœ… Rollback complete" + else + echo "❌ No backup found!" + fi diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml deleted file mode 100644 index 257d5c2..0000000 --- a/.github/workflows/deploy.yml +++ /dev/null @@ -1,138 +0,0 @@ -name: Deploy to Production Server - -on: - push: - branches: - - main - workflow_dispatch: # Allow manual trigger - -jobs: - deploy: - name: Deploy to 178.63.127.19 - runs-on: ubuntu-latest - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: "20" - cache: "npm" - - - name: Install dependencies (Backend) - run: | - npm ci - - - name: Install dependencies (Frontend) - run: | - cd frontend - npm ci - - - name: Build Frontend - run: | - cd frontend - npm run build - env: - NODE_ENV: production - VITE_API_URL: http://178.63.127.19:3000 - - - name: Run Tests (if any) - run: | - npm test || echo "No tests configured" - continue-on-error: true - - - name: Deploy to Production Server - uses: appleboy/ssh-action@v1.0.0 - with: - host: ${{ secrets.SERVER_HOST }} - username: ${{ secrets.SERVER_USER }} - key: ${{ secrets.SSH_PRIVATE_KEY }} - port: ${{ secrets.SERVER_PORT || 22 }} - script: | - echo "πŸš€ Starting deployment..." - - # Navigate to project directory - cd ${{ secrets.DEPLOY_PATH || '/var/www/turbotrades' }} - - # Stop the application - echo "⏸️ Stopping application..." - pm2 stop turbotrades || echo "App not running" - - # Backup current version - echo "πŸ’Ύ Creating backup..." - cp -r . ../turbotrades-backup-$(date +%Y%m%d-%H%M%S) || true - - # Pull latest code - echo "πŸ“₯ Pulling latest code..." - git fetch origin - git reset --hard origin/main - - # Install backend dependencies - echo "πŸ“¦ Installing backend dependencies..." - npm ci --production - - # Build and install frontend - echo "🎨 Building frontend..." - cd frontend - npm ci - npm run build - cd .. - - # Run database migrations (if any) - echo "πŸ—„οΈ Running migrations..." - npm run migrate || echo "No migrations to run" - - # Start the application - echo "▢️ Starting application..." - pm2 start ecosystem.config.js || pm2 start index.js --name turbotrades - pm2 save - - # Verify deployment - echo "βœ… Deployment complete!" - pm2 list - - - name: Health Check - run: | - sleep 10 - curl -f http://178.63.127.19:3000/api/health || echo "⚠️ Health check failed" - - - name: Notify Success - if: success() - run: | - echo "βœ… Deployment successful!" - echo "🌐 Server: 178.63.127.19" - echo "πŸ‘€ Repository: git.turbotrades.dev/iDefineHD/TurboTrades" - echo "πŸ“… Time: $(date)" - - - name: Notify Failure - if: failure() - run: | - echo "❌ Deployment failed!" - echo "Check the logs above for details" - - - name: Rollback on Failure - if: failure() - uses: appleboy/ssh-action@v1.0.0 - with: - host: ${{ secrets.SERVER_HOST }} - username: ${{ secrets.SERVER_USER }} - key: ${{ secrets.SSH_PRIVATE_KEY }} - port: ${{ secrets.SERVER_PORT || 22 }} - script: | - echo "πŸ”„ Rolling back to previous version..." - cd ${{ secrets.DEPLOY_PATH || '/var/www/turbotrades' }} - - # Find latest backup - BACKUP=$(ls -t ../turbotrades-backup-* | head -1) - - if [ -n "$BACKUP" ]; then - echo "Found backup: $BACKUP" - rm -rf ./* - cp -r $BACKUP/* . - pm2 restart turbotrades - echo "βœ… Rollback complete" - else - echo "❌ No backup found!" - fi diff --git a/DEPLOY.md b/DEPLOY.md new file mode 100644 index 0000000..4d4f675 --- /dev/null +++ b/DEPLOY.md @@ -0,0 +1,317 @@ +# πŸš€ TurboTrades - Simple Deployment + +Quick deployment guide for TurboTrades on turbotrades.dev. + +--- + +## πŸ“‹ Server Setup (Already Done) + +- **Frontend:** https://turbotrades.dev β†’ `/var/www/html/turbotrades` +- **Backend:** https://api.turbotrades.dev β†’ Node.js on port 3000 +- **WebSocket:** https://ws.turbotrades.dev β†’ Node.js on port 3000 +- **Backend Code:** `/root/ttbackend` +- **Nginx:** Already configured +- **SSL:** Already configured + +--- + +## 🎯 Quick Deploy + +### SSH to Server and Run Deploy Script + +```bash +# SSH into server +ssh root@turbotrades.dev + +# Navigate to backend directory +cd /root/ttbackend + +# Pull latest code +git pull origin main + +# Run deploy script +./deploy.sh +``` + +That's it! βœ… + +--- + +## πŸ”„ What the Deploy Script Does + +1. ⏸️ Stops the backend (PM2) +2. πŸ’Ύ Creates a backup +3. πŸ“₯ Pulls latest code from Gitea +4. πŸ“¦ Installs backend dependencies +5. 🎨 Builds frontend +6. πŸš€ Deploys frontend to `/var/www/html/turbotrades` +7. ▢️ Restarts backend with PM2 +8. βœ… Runs health checks + +--- + +## πŸ› οΈ Manual Deploy (Without Script) + +```bash +# SSH to server +ssh root@turbotrades.dev + +# Stop backend +pm2 stop turbotrades-backend + +# Navigate to backend +cd /root/ttbackend + +# Pull latest code +git pull origin main + +# Install backend dependencies +npm ci --production + +# Build frontend +cd frontend +npm ci +npm run build + +# Deploy frontend +rm -rf /var/www/html/turbotrades/* +cp -r dist/* /var/www/html/turbotrades/ +chown -R www-data:www-data /var/www/html/turbotrades + +# Back to backend +cd /root/ttbackend + +# Restart backend +pm2 restart turbotrades-backend +pm2 save + +# Check status +pm2 logs turbotrades-backend +``` + +--- + +## πŸ“Š Monitoring + +### Check Backend Status + +```bash +pm2 list +pm2 logs turbotrades-backend +pm2 monit +``` + +### Check Nginx Logs + +```bash +tail -f /var/log/nginx/turbotrades-error.log +tail -f /var/log/nginx/api-turbotrades-error.log +tail -f /var/log/nginx/ws-turbotrades-error.log +``` + +### Health Checks + +```bash +# Backend API +curl https://api.turbotrades.dev/api/health + +# Frontend +curl https://turbotrades.dev + +# WebSocket (requires wscat) +wscat -c wss://ws.turbotrades.dev +``` + +--- + +## πŸ› Quick Troubleshooting + +### Backend Won't Start + +```bash +# Check logs +pm2 logs turbotrades-backend + +# Check if port 3000 is free +netstat -tulpn | grep 3000 + +# Check MongoDB +systemctl status mongod + +# Restart everything +pm2 restart turbotrades-backend +``` + +### Frontend Not Loading + +```bash +# Check if files exist +ls -la /var/www/html/turbotrades/ + +# Check permissions +chown -R www-data:www-data /var/www/html/turbotrades +chmod -R 755 /var/www/html/turbotrades + +# Check nginx +nginx -t +systemctl reload nginx +``` + +### 502 Bad Gateway + +```bash +# Backend is probably down +pm2 restart turbotrades-backend + +# Check backend is listening +netstat -tulpn | grep 3000 + +# Check nginx logs +tail -f /var/log/nginx/api-turbotrades-error.log +``` + +--- + +## πŸ”„ Rollback + +```bash +# SSH to server +ssh root@turbotrades.dev + +# Stop current version +pm2 stop turbotrades-backend + +# List backups +ls -lt /root/ | grep ttbackend-backup + +# Restore from backup +cd /root +rm -rf ttbackend +cp -r ttbackend-backup-YYYYMMDD-HHMMSS ttbackend + +# Restart +cd ttbackend +pm2 restart turbotrades-backend +``` + +--- + +## πŸ“ Update .env + +If you need to update environment variables: + +```bash +ssh root@turbotrades.dev +cd /root/ttbackend +nano .env + +# After editing, restart +pm2 restart turbotrades-backend +``` + +--- + +## 🎯 Deployment Workflow + +### For Code Changes + +```bash +# On your local machine +git add . +git commit -m "Your changes" +git push origin main + +# On the server +ssh root@turbotrades.dev +cd /root/ttbackend +./deploy.sh +``` + +### For Environment Changes Only + +```bash +ssh root@turbotrades.dev +cd /root/ttbackend +nano .env +pm2 restart turbotrades-backend +``` + +### For Frontend Only + +```bash +ssh root@turbotrades.dev +cd /root/ttbackend +git pull origin main +cd frontend +npm ci +npm run build +rm -rf /var/www/html/turbotrades/* +cp -r dist/* /var/www/html/turbotrades/ +chown -R www-data:www-data /var/www/html/turbotrades +``` + +### For Backend Only + +```bash +ssh root@turbotrades.dev +cd /root/ttbackend +git pull origin main +npm ci --production +pm2 restart turbotrades-backend +``` + +--- + +## πŸ” Required Environment Variables + +Make sure these are set in `/root/ttbackend/.env`: + +```env +NODE_ENV=production +PORT=3000 + +FRONTEND_URL=https://turbotrades.dev +BACKEND_URL=https://api.turbotrades.dev +WS_URL=https://ws.turbotrades.dev + +MONGODB_URI=mongodb://localhost:27017/turbotrades + +JWT_SECRET=your-secret +REFRESH_TOKEN_SECRET=your-secret +SESSION_SECRET=your-secret + +STEAM_API_KEY=your-key +STEAM_REALM=https://turbotrades.dev +STEAM_RETURN_URL=https://api.turbotrades.dev/auth/steam/return +``` + +--- + +## βœ… Post-Deployment Checklist + +- [ ] Backend is running (`pm2 list`) +- [ ] Frontend loads (visit https://turbotrades.dev) +- [ ] API responds (`curl https://api.turbotrades.dev/api/health`) +- [ ] Steam login works +- [ ] WebSocket connects +- [ ] No errors in PM2 logs +- [ ] No errors in Nginx logs + +--- + +## πŸ†˜ Emergency Contacts + +- **PM2 Documentation:** https://pm2.keymetrics.io/docs/usage/quick-start/ +- **Nginx Documentation:** https://nginx.org/en/docs/ + +--- + +## πŸŽ‰ Done! + +Your TurboTrades instance is now deployed and running! + +- 🌐 **Frontend:** https://turbotrades.dev +- πŸ”§ **Backend:** https://api.turbotrades.dev +- πŸ’¬ **WebSocket:** https://ws.turbotrades.dev + +**Happy Trading! πŸš€** \ No newline at end of file diff --git a/DEPLOY_SUMMARY.md b/DEPLOY_SUMMARY.md new file mode 100644 index 0000000..df330d6 --- /dev/null +++ b/DEPLOY_SUMMARY.md @@ -0,0 +1,371 @@ +# πŸš€ TurboTrades - Deployment Summary + +**Date:** January 10, 2026 +**Status:** βœ… Ready for Deployment +**Repository:** https://git.turbotrades.dev/iDefineHD/TurboTrades.git + +--- + +## πŸ“‹ Configuration Overview + +### Domain Setup +- **Frontend:** https://turbotrades.dev +- **Backend API:** https://api.turbotrades.dev +- **WebSocket:** https://ws.turbotrades.dev + +### Server Paths +- **Backend Code:** `/root/ttbackend` +- **Frontend Build:** `/var/www/html/turbotrades` +- **Nginx Config:** Already configured βœ… +- **SSL Certificates:** Already configured βœ… + +### PM2 Configuration +- **App Name:** `turbotrades-backend` +- **Port:** 3000 +- **Mode:** Cluster +- **Auto-restart:** Enabled + +--- + +## 🎯 Quick Start + +### Deploy to Production + +```bash +# 1. SSH to server +ssh root@turbotrades.dev + +# 2. Initial setup (first time only) +cd /root/ttbackend +git clone https://git.turbotrades.dev/iDefineHD/TurboTrades.git . + +# 3. Deploy +./deploy.sh +``` + +### Push Changes from Local + +```bash +# Option 1: Use helper script +./push.sh + +# Option 2: Manual +git add . +git commit -m "Your changes" +git push origin main + +# Then SSH and deploy +ssh root@turbotrades.dev +cd /root/ttbackend +./deploy.sh +``` + +--- + +## πŸ“ Files Created for Deployment + +### Deployment Scripts +- βœ… `deploy.sh` - Main deployment script +- βœ… `push.sh` - Quick commit and push helper +- βœ… `ecosystem.config.js` - PM2 configuration (updated) + +### Configuration +- βœ… `nginx-config/turbotrades.conf` - Nginx configuration example +- βœ… `.github/workflows/deploy.yml` - Gitea Actions workflow + +### Documentation +- βœ… `DEPLOY.md` - Simple deployment guide +- βœ… `GITEA_DEPLOY.md` - Complete deployment documentation +- βœ… `DEPLOY_SUMMARY.md` - This file + +--- + +## πŸ”§ What Was Updated + +### Repository Configuration +- βœ… Git remote updated to Gitea: `https://git.turbotrades.dev/iDefineHD/TurboTrades.git` +- βœ… All documentation updated with Gitea URLs +- βœ… Removed all tunnel-related files and scripts + +### Backend Configuration (`ecosystem.config.js`) +```javascript +{ + name: "turbotrades-backend", + cwd: "/root/ttbackend", + env: { + FRONTEND_URL: "https://turbotrades.dev", + BACKEND_URL: "https://api.turbotrades.dev", + WS_URL: "https://ws.turbotrades.dev" + } +} +``` + +### Frontend Configuration +- βœ… WebSocket connects to `wss://ws.turbotrades.dev` in production +- βœ… API calls go to `https://api.turbotrades.dev` +- βœ… Vite proxy configured for local development + +### Deployment Workflow +``` +Local Changes β†’ Git Push β†’ SSH to Server β†’ Run deploy.sh β†’ Live! πŸŽ‰ +``` + +--- + +## πŸ“¦ deploy.sh Script Actions + +The deployment script automatically: + +1. ⏸️ **Stops** backend (PM2) +2. πŸ’Ύ **Creates** backup of current version +3. πŸ“₯ **Pulls** latest code from Gitea +4. πŸ“¦ **Installs** backend dependencies (`npm ci --production`) +5. 🎨 **Builds** frontend (`npm run build`) +6. πŸš€ **Deploys** frontend to `/var/www/html/turbotrades` +7. πŸ”’ **Sets** proper permissions (www-data:www-data) +8. ▢️ **Restarts** backend with PM2 +9. πŸ’Ύ **Saves** PM2 configuration +10. βœ… **Runs** health checks + +**Deployment Time:** ~2-3 minutes + +--- + +## 🌐 Environment Variables Required + +Create `/root/ttbackend/.env` with: + +```env +# Application +NODE_ENV=production +PORT=3000 + +# URLs +FRONTEND_URL=https://turbotrades.dev +BACKEND_URL=https://api.turbotrades.dev +WS_URL=https://ws.turbotrades.dev + +# Database +MONGODB_URI=mongodb://localhost:27017/turbotrades + +# Security +JWT_SECRET=your-super-secret-jwt-key +REFRESH_TOKEN_SECRET=your-refresh-token-secret +SESSION_SECRET=your-session-secret + +# Steam OAuth +STEAM_API_KEY=your-steam-api-key +STEAM_REALM=https://turbotrades.dev +STEAM_RETURN_URL=https://api.turbotrades.dev/auth/steam/return + +# Email (optional) +SMTP_HOST=smtp.example.com +SMTP_PORT=587 +SMTP_USER=your-email@example.com +SMTP_PASS=your-password +SMTP_FROM=noreply@turbotrades.dev +``` + +--- + +## πŸ“Š Monitoring Commands + +### PM2 Status +```bash +pm2 list # List all processes +pm2 logs turbotrades-backend # View logs +pm2 monit # Monitor resources +pm2 restart turbotrades-backend # Restart backend +``` + +### Health Checks +```bash +curl https://api.turbotrades.dev/api/health # Backend API +curl https://turbotrades.dev # Frontend +``` + +### Nginx Logs +```bash +tail -f /var/log/nginx/turbotrades-error.log +tail -f /var/log/nginx/api-turbotrades-error.log +tail -f /var/log/nginx/ws-turbotrades-error.log +``` + +--- + +## πŸ› Common Issues & Fixes + +### Backend Won't Start +```bash +pm2 logs turbotrades-backend # Check logs +systemctl status mongod # Check MongoDB +pm2 restart turbotrades-backend # Force restart +``` + +### Frontend 404 +```bash +ls -la /var/www/html/turbotrades/ # Check files exist +chown -R www-data:www-data /var/www/html/turbotrades # Fix permissions +``` + +### 502 Bad Gateway +```bash +pm2 restart turbotrades-backend # Backend probably down +netstat -tulpn | grep 3000 # Check if port 3000 is listening +``` + +### WebSocket Won't Connect +```bash +# Check WebSocket domain is correct in frontend +# Should be: wss://ws.turbotrades.dev +pm2 logs turbotrades-backend # Check backend logs +``` + +--- + +## πŸ”„ Deployment Workflow Examples + +### Regular Update +```bash +# Local machine +git add . +git commit -m "Update feature X" +git push origin main + +# Server +ssh root@turbotrades.dev +cd /root/ttbackend +./deploy.sh +``` + +### Hotfix +```bash +# Local machine +git add . +git commit -m "Hotfix: Critical bug" +git push origin main + +# Server +ssh root@turbotrades.dev +cd /root/ttbackend +./deploy.sh +``` + +### Frontend Only Update +```bash +# Server +ssh root@turbotrades.dev +cd /root/ttbackend +git pull origin main +cd frontend && npm ci && npm run build +rm -rf /var/www/html/turbotrades/* +cp -r dist/* /var/www/html/turbotrades/ +chown -R www-data:www-data /var/www/html/turbotrades +``` + +### Backend Only Update +```bash +# Server +ssh root@turbotrades.dev +cd /root/ttbackend +git pull origin main +npm ci --production +pm2 restart turbotrades-backend +``` + +--- + +## 🚨 Emergency Rollback + +```bash +ssh root@turbotrades.dev +pm2 stop turbotrades-backend + +# List backups +ls -lt /root/ | grep ttbackend-backup + +# Restore +cd /root +rm -rf ttbackend +cp -r ttbackend-backup-YYYYMMDD-HHMMSS ttbackend +cd ttbackend +pm2 restart turbotrades-backend +``` + +--- + +## βœ… Pre-Deployment Checklist + +- [x] Git remote configured to Gitea +- [x] Tunnel infrastructure removed +- [x] Deployment scripts created and executable +- [x] PM2 ecosystem config updated +- [x] Frontend WebSocket configured for production +- [x] Nginx configuration ready +- [x] Domain structure documented +- [x] Server paths configured + +### Before First Deployment +- [ ] Server prerequisites installed (Node.js, PM2, MongoDB, Nginx) +- [ ] Directories created (`/root/ttbackend`, `/var/www/html/turbotrades`) +- [ ] Nginx configuration deployed +- [ ] SSL certificates configured +- [ ] `.env` file created with proper secrets +- [ ] MongoDB running and accessible +- [ ] Repository cloned to `/root/ttbackend` + +### Before Each Deployment +- [ ] Code tested locally +- [ ] Environment variables updated if needed +- [ ] Database migrations prepared (if any) +- [ ] Team notified of deployment +- [ ] Backup created (deploy.sh does this automatically) + +--- + +## πŸŽ‰ Ready to Deploy! + +Everything is configured and ready. To deploy: + +```bash +# 1. Push your changes +git add . +git commit -m "Ready for production" +git push origin main + +# 2. Deploy to server +ssh root@turbotrades.dev +cd /root/ttbackend +git pull origin main +./deploy.sh +``` + +**Your site will be live at:** +- 🌐 https://turbotrades.dev +- πŸ”§ https://api.turbotrades.dev +- πŸ’¬ https://ws.turbotrades.dev + +--- + +## πŸ“š Documentation + +- **Quick Deploy:** `DEPLOY.md` +- **Complete Guide:** `GITEA_DEPLOY.md` +- **Nginx Config:** `nginx-config/turbotrades.conf` +- **PM2 Config:** `ecosystem.config.js` + +--- + +## πŸ†˜ Support + +If you encounter issues: +1. Check the logs: `pm2 logs turbotrades-backend` +2. Check nginx logs: `tail -f /var/log/nginx/api-turbotrades-error.log` +3. Review documentation in `DEPLOY.md` or `GITEA_DEPLOY.md` +4. Check health endpoints with curl + +--- + +**Last Updated:** January 10, 2026 +**Status:** βœ… Ready for Production Deployment +**Next Step:** SSH to server and run `./deploy.sh` diff --git a/GITEA_DEPLOY.md b/GITEA_DEPLOY.md new file mode 100644 index 0000000..85205f8 --- /dev/null +++ b/GITEA_DEPLOY.md @@ -0,0 +1,694 @@ +# πŸš€ TurboTrades - Gitea Deployment Guide + +Complete deployment guide for TurboTrades using Gitea self-hosted repository. + +--- + +## πŸ“‹ Overview + +**Repository:** https://git.turbotrades.dev/iDefineHD/TurboTrades.git +**Server:** turbotrades.dev +**Deployment Method:** Gitea Actions + SSH + +### Domain Structure +- **Frontend:** https://turbotrades.dev (Nginx serves static files) +- **Backend API:** https://api.turbotrades.dev (Nginx β†’ Node.js) +- **WebSocket:** https://ws.turbotrades.dev (Nginx β†’ Node.js) + +### Server Paths +- **Backend Code:** `/root/ttbackend` +- **Frontend Build:** `/var/www/html/turbotrades` +- **Nginx Config:** `/etc/nginx/sites-available/turbotrades.conf` +- **Logs:** `/root/ttbackend/logs/` + +--- + +## 🎯 Quick Deployment + +### For First-Time Setup + +```bash +# 1. SSH into server +ssh root@turbotrades.dev + +# 2. Clone repository +mkdir -p /root/ttbackend +cd /root/ttbackend +git clone https://git.turbotrades.dev/iDefineHD/TurboTrades.git . + +# 3. Install dependencies +npm ci --production + +# 4. Build frontend +cd frontend +npm ci +npm run build + +# 5. Deploy frontend to nginx +mkdir -p /var/www/html/turbotrades +cp -r dist/* /var/www/html/turbotrades/ +chown -R www-data:www-data /var/www/html/turbotrades + +# 6. Configure environment +cd /root/ttbackend +cp .env.example .env +nano .env # Edit with your settings + +# 7. Start backend with PM2 +pm2 start ecosystem.config.js --env production +pm2 save +pm2 startup # Follow instructions +``` + +### For Updates (Automatic via Gitea Actions) + +Just push to `main` branch: +```bash +git add . +git commit -m "Your update" +git push origin main +``` + +Gitea Actions will automatically deploy! + +--- + +## πŸ”§ Detailed Setup + +### 1. Server Prerequisites + +#### Install Required Software + +```bash +# Update system +apt update && apt upgrade -y + +# Install Node.js 20 +curl -fsSL https://deb.nodesource.com/setup_20.x | bash - +apt install -y nodejs + +# Install PM2 +npm install -g pm2 + +# Install Nginx +apt install -y nginx + +# Install MongoDB (if not installed) +wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | apt-key add - +echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-7.0.list +apt update +apt install -y mongodb-org +systemctl enable mongod +systemctl start mongod + +# Install Git +apt install -y git +``` + +#### Create Directories + +```bash +# Backend directory +mkdir -p /root/ttbackend +mkdir -p /root/ttbackend/logs + +# Frontend directory +mkdir -p /var/www/html/turbotrades + +# Set permissions +chown -R www-data:www-data /var/www/html/turbotrades +chmod -R 755 /var/www/html/turbotrades +``` + +### 2. Configure Nginx + +#### Copy Nginx Config + +```bash +# Copy config file +cp /root/ttbackend/nginx-config/turbotrades.conf /etc/nginx/sites-available/ + +# Enable site +ln -s /etc/nginx/sites-available/turbotrades.conf /etc/nginx/sites-enabled/ + +# Test configuration +nginx -t + +# Reload Nginx +systemctl reload nginx +``` + +#### Setup SSL with Let's Encrypt + +```bash +# Install Certbot +apt install -y certbot python3-certbot-nginx + +# Get SSL certificate (will configure nginx automatically) +certbot --nginx -d turbotrades.dev -d www.turbotrades.dev -d api.turbotrades.dev -d ws.turbotrades.dev + +# Auto-renewal +certbot renew --dry-run +``` + +### 3. Configure Backend + +#### Create .env File + +```bash +cd /root/ttbackend +nano .env +``` + +**Required Environment Variables:** + +```env +# Application +NODE_ENV=production +PORT=3000 + +# URLs +FRONTEND_URL=https://turbotrades.dev +BACKEND_URL=https://api.turbotrades.dev +WS_URL=https://ws.turbotrades.dev + +# Database +MONGODB_URI=mongodb://localhost:27017/turbotrades + +# JWT Secrets +JWT_SECRET=your-super-secret-jwt-key-change-this +REFRESH_TOKEN_SECRET=your-refresh-token-secret-change-this + +# Steam OAuth +STEAM_API_KEY=your-steam-api-key +STEAM_REALM=https://turbotrades.dev +STEAM_RETURN_URL=https://api.turbotrades.dev/auth/steam/return + +# Session +SESSION_SECRET=your-session-secret-change-this + +# Email (Optional) +SMTP_HOST=smtp.example.com +SMTP_PORT=587 +SMTP_USER=your-email@example.com +SMTP_PASS=your-email-password +SMTP_FROM=noreply@turbotrades.dev + +# Admin +ADMIN_EMAIL=admin@turbotrades.dev + +# Rate Limiting +RATE_LIMIT_WINDOW=15 +RATE_LIMIT_MAX=100 +``` + +### 4. Deploy Backend with PM2 + +```bash +cd /root/ttbackend + +# Start with ecosystem config +pm2 start ecosystem.config.js --env production + +# Save PM2 configuration +pm2 save + +# Setup PM2 to start on boot +pm2 startup +# Follow the command it outputs + +# Monitor +pm2 list +pm2 logs turbotrades-backend +``` + +--- + +## πŸ€– Gitea Actions Setup + +### 1. Configure Repository Secrets + +Go to: `https://git.turbotrades.dev/iDefineHD/TurboTrades/settings/secrets` + +Add these secrets: + +| Secret Name | Value | Description | +|-------------|-------|-------------| +| `SERVER_HOST` | `turbotrades.dev` | Your server hostname | +| `SERVER_USER` | `root` | SSH user | +| `SERVER_PORT` | `22` | SSH port (default 22) | +| `SSH_PRIVATE_KEY` | `-----BEGIN OPENSSH PRIVATE KEY-----...` | SSH private key for deployment | + +### 2. Generate SSH Key for Deployment + +```bash +# On your server +ssh-keygen -t ed25519 -C "gitea-deploy" -f ~/.ssh/gitea_deploy + +# Add public key to authorized_keys +cat ~/.ssh/gitea_deploy.pub >> ~/.ssh/authorized_keys + +# Copy PRIVATE key for Gitea secret +cat ~/.ssh/gitea_deploy +# Copy entire output including BEGIN/END lines +``` + +### 3. Enable Gitea Actions + +1. Go to repository settings +2. Enable "Actions" if not already enabled +3. Workflow file is at `.github/workflows/deploy.yml` + +### 4. Test Deployment + +```bash +# Make a change +echo "# Test" >> README.md +git add README.md +git commit -m "Test deployment" +git push origin main + +# Watch in Gitea Actions tab +# Go to: https://git.turbotrades.dev/iDefineHD/TurboTrades/actions +``` + +--- + +## πŸ“Š Monitoring & Management + +### PM2 Commands + +```bash +# View status +pm2 list + +# View logs +pm2 logs turbotrades-backend + +# Restart +pm2 restart turbotrades-backend + +# Stop +pm2 stop turbotrades-backend + +# Start +pm2 start turbotrades-backend + +# Monitor resources +pm2 monit + +# Clear logs +pm2 flush +``` + +### Nginx Commands + +```bash +# Test configuration +nginx -t + +# Reload (without downtime) +systemctl reload nginx + +# Restart +systemctl restart nginx + +# View access logs +tail -f /var/log/nginx/turbotrades-access.log +tail -f /var/log/nginx/api-turbotrades-access.log +tail -f /var/log/nginx/ws-turbotrades-access.log + +# View error logs +tail -f /var/log/nginx/turbotrades-error.log +tail -f /var/log/nginx/api-turbotrades-error.log +tail -f /var/log/nginx/ws-turbotrades-error.log +``` + +### Health Checks + +```bash +# Frontend +curl https://turbotrades.dev + +# Backend API +curl https://api.turbotrades.dev/api/health + +# WebSocket (needs wscat) +npm install -g wscat +wscat -c wss://ws.turbotrades.dev +``` + +--- + +## πŸ”„ Manual Deployment + +If Gitea Actions fail or you prefer manual deployment: + +```bash +# SSH to server +ssh root@turbotrades.dev + +# Navigate to backend +cd /root/ttbackend + +# Stop application +pm2 stop turbotrades-backend + +# Backup current version +cp -r /root/ttbackend /root/ttbackend-backup-$(date +%Y%m%d-%H%M%S) + +# Pull latest code +git fetch origin +git reset --hard origin/main +git clean -fd + +# Install backend dependencies +npm ci --production + +# Build frontend +cd frontend +npm ci +npm run build + +# Deploy frontend +rm -rf /var/www/html/turbotrades/* +cp -r dist/* /var/www/html/turbotrades/ +chown -R www-data:www-data /var/www/html/turbotrades +chmod -R 755 /var/www/html/turbotrades + +# Back to root +cd /root/ttbackend + +# Restart backend +pm2 restart turbotrades-backend +pm2 save + +# Verify +pm2 list +pm2 logs turbotrades-backend --lines 50 +``` + +--- + +## πŸ› Troubleshooting + +### Backend Not Starting + +```bash +# Check logs +pm2 logs turbotrades-backend + +# Check if port 3000 is in use +netstat -tulpn | grep 3000 + +# Check MongoDB connection +mongo --eval "db.runCommand({ ping: 1 })" + +# Check environment variables +cd /root/ttbackend +cat .env | grep -v "SECRET\|PASSWORD\|KEY" +``` + +### Frontend Not Loading + +```bash +# Check Nginx config +nginx -t + +# Check if files exist +ls -la /var/www/html/turbotrades/ + +# Check permissions +ls -ld /var/www/html/turbotrades/ + +# Check Nginx logs +tail -f /var/log/nginx/turbotrades-error.log +``` + +### SSL Certificate Issues + +```bash +# Renew certificate +certbot renew + +# Check certificate status +certbot certificates + +# Test SSL +curl -I https://turbotrades.dev +``` + +### WebSocket Connection Failed + +```bash +# Check if backend is listening +netstat -tulpn | grep 3000 + +# Check Nginx WebSocket proxy +grep -A 20 "ws.turbotrades.dev" /etc/nginx/sites-available/turbotrades.conf + +# Test WebSocket upgrade +curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" https://ws.turbotrades.dev +``` + +### Database Connection Issues + +```bash +# Check MongoDB status +systemctl status mongod + +# Restart MongoDB +systemctl restart mongod + +# Check connection +mongo turbotrades --eval "db.stats()" +``` + +### Gitea Actions Failed + +1. Check Actions tab: `https://git.turbotrades.dev/iDefineHD/TurboTrades/actions` +2. Click failed workflow to view logs +3. Common issues: + - SSH key not configured + - Secrets not set + - Server unreachable + - Permission issues + +### 502 Bad Gateway + +```bash +# Backend not running +pm2 status turbotrades-backend +pm2 start turbotrades-backend + +# Port mismatch - check backend port +grep "PORT" /root/ttbackend/.env + +# Nginx proxy config +grep "proxy_pass" /etc/nginx/sites-available/turbotrades.conf +``` + +--- + +## πŸ”’ Security Checklist + +- [x] SSL certificates installed for all domains +- [ ] Firewall configured (UFW or iptables) +- [ ] SSH key authentication only (disable password auth) +- [ ] MongoDB secured (authentication enabled) +- [ ] Secrets properly set in .env (not hardcoded) +- [ ] Rate limiting enabled (Nginx + Backend) +- [ ] CORS properly configured +- [ ] Security headers in Nginx +- [ ] Regular backups configured +- [ ] Log rotation enabled +- [ ] Fail2ban installed (optional) +- [ ] Server updates automated + +### Firewall Setup (UFW) + +```bash +# Install UFW +apt install -y ufw + +# Allow SSH +ufw allow 22/tcp + +# Allow HTTP/HTTPS +ufw allow 80/tcp +ufw allow 443/tcp + +# Enable firewall +ufw enable + +# Check status +ufw status +``` + +--- + +## πŸ“¦ Backup Strategy + +### Automated Backup Script + +```bash +# Create backup script +nano /root/backup-turbotrades.sh +``` + +**backup-turbotrades.sh:** +```bash +#!/bin/bash + +BACKUP_DIR="/root/backups" +TIMESTAMP=$(date +%Y%m%d-%H%M%S) + +# Create backup directory +mkdir -p $BACKUP_DIR + +# Backup MongoDB +mongodump --db turbotrades --out $BACKUP_DIR/mongodb-$TIMESTAMP + +# Backup backend code +tar -czf $BACKUP_DIR/backend-$TIMESTAMP.tar.gz /root/ttbackend + +# Backup frontend +tar -czf $BACKUP_DIR/frontend-$TIMESTAMP.tar.gz /var/www/html/turbotrades + +# Backup nginx config +tar -czf $BACKUP_DIR/nginx-$TIMESTAMP.tar.gz /etc/nginx/sites-available/turbotrades.conf + +# Keep only last 7 days of backups +find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete +find $BACKUP_DIR -name "mongodb-*" -mtime +7 -delete + +echo "Backup completed: $TIMESTAMP" +``` + +```bash +# Make executable +chmod +x /root/backup-turbotrades.sh + +# Test backup +/root/backup-turbotrades.sh + +# Schedule daily backups (3 AM) +crontab -e +# Add this line: +0 3 * * * /root/backup-turbotrades.sh >> /var/log/turbotrades-backup.log 2>&1 +``` + +--- + +## πŸ“ˆ Performance Optimization + +### Nginx Caching + +Add to server block in nginx config: + +```nginx +# Cache static assets +location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ { + expires 1y; + add_header Cache-Control "public, immutable"; +} + +# API response caching (optional) +proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=api_cache:10m max_size=1g inactive=60m; +``` + +### PM2 Cluster Mode + +Update ecosystem.config.js: + +```javascript +instances: 4, // Use multiple CPU cores +exec_mode: "cluster", +``` + +### MongoDB Indexes + +```bash +mongo turbotrades +``` + +```javascript +// Add indexes for better performance +db.users.createIndex({ email: 1 }, { unique: true }) +db.users.createIndex({ steamId: 1 }, { unique: true }) +db.items.createIndex({ listed: 1, price: 1 }) +db.trades.createIndex({ userId: 1, createdAt: -1 }) +``` + +--- + +## πŸ“ Deployment Checklist + +### Pre-Deployment +- [ ] Code reviewed and tested locally +- [ ] All tests passing +- [ ] Environment variables updated if needed +- [ ] Database migrations prepared (if any) +- [ ] Backup created +- [ ] Team notified + +### Deployment +- [ ] Push to main branch +- [ ] Monitor Gitea Actions workflow +- [ ] Check deployment logs +- [ ] Verify PM2 status + +### Post-Deployment +- [ ] Frontend loads correctly +- [ ] API health check passes +- [ ] WebSocket connects +- [ ] Test critical user flows +- [ ] Monitor error logs +- [ ] Check PM2 resource usage +- [ ] Verify database connections + +--- + +## πŸ†˜ Emergency Rollback + +```bash +# SSH to server +ssh root@turbotrades.dev + +# Stop current backend +pm2 stop turbotrades-backend + +# Restore from backup +cd /root +rm -rf ttbackend +cp -r ttbackend-backup ttbackend # Use latest backup + +# Restart +cd ttbackend +pm2 restart turbotrades-backend +pm2 save + +# Verify +pm2 logs turbotrades-backend +curl https://api.turbotrades.dev/api/health +``` + +--- + +## πŸ“š Useful Links + +- **Frontend:** https://turbotrades.dev +- **Backend API:** https://api.turbotrades.dev +- **WebSocket:** https://ws.turbotrades.dev +- **Gitea Repo:** https://git.turbotrades.dev/iDefineHD/TurboTrades +- **Gitea Actions:** https://git.turbotrades.dev/iDefineHD/TurboTrades/actions + +--- + +## πŸŽ‰ Success! + +Your TurboTrades deployment is now live and automatically updating via Gitea Actions! + +**Questions?** Check the logs and troubleshooting section above. + +**Happy Trading! πŸš€** \ No newline at end of file diff --git a/frontend/src/stores/websocket.js b/frontend/src/stores/websocket.js index ce3f031..bd5a069 100644 --- a/frontend/src/stores/websocket.js +++ b/frontend/src/stores/websocket.js @@ -31,10 +31,19 @@ export const useWebSocketStore = defineStore("websocket", () => { // Helper functions const getWebSocketUrl = () => { + // Use environment variable or fallback to ws subdomain + if (import.meta.env.VITE_WS_URL) { + return import.meta.env.VITE_WS_URL; + } + + // In production, use dedicated WebSocket domain + if (import.meta.env.PROD) { + return "wss://ws.turbotrades.dev"; + } + + // In development, use current host with ws path (for proxy) const protocol = window.location.protocol === "https:" ? "wss:" : "ws:"; const host = window.location.host; - - // Always use the current host (works with VS Code tunnels and proxies) return `${protocol}//${host}/ws`; };