Clean up tunnel infrastructure and migrate to Gitea
Some checks failed
Deploy to Production Server / Deploy to 178.63.127.19 (push) Has been cancelled

This commit is contained in:
2026-01-10 23:54:31 +00:00
parent 63c578b0ae
commit 53d0c89d17
8 changed files with 2220 additions and 172 deletions

812
DEPLOYMENT_GUIDE.md Normal file
View File

@@ -0,0 +1,812 @@
# TurboTrades Deployment Guide
Complete guide to deploy TurboTrades to your production server at `178.63.127.19`
---
## 📋 Table of Contents
1. [Prerequisites](#prerequisites)
2. [Server Setup](#server-setup)
3. [GitHub Secrets Configuration](#github-secrets-configuration)
4. [Initial Deployment](#initial-deployment)
5. [Automatic Deployments](#automatic-deployments)
6. [Manual Deployment](#manual-deployment)
7. [Monitoring & Maintenance](#monitoring--maintenance)
8. [Troubleshooting](#troubleshooting)
9. [Rollback Procedures](#rollback-procedures)
---
## 🔧 Prerequisites
### On Your Local Machine:
- [x] Git installed
- [x] GitHub account with repository access
- [x] SSH access to server (178.63.127.19)
### On Your Server (178.63.127.19):
- [ ] Ubuntu/Debian Linux
- [ ] Node.js 18+ installed
- [ ] MongoDB installed and running
- [ ] PM2 process manager
- [ ] Nginx (optional, for reverse proxy)
- [ ] Git installed
---
## 🖥️ Server Setup
### Step 1: SSH into Your Server
```bash
ssh root@178.63.127.19
# Or with specific user:
ssh yourusername@178.63.127.19
```
### Step 2: Install Required Software
```bash
# Update system
sudo apt update && sudo apt upgrade -y
# Install Node.js 20.x
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# Install MongoDB
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
sudo apt update
sudo apt install -y mongodb-org
# Start MongoDB
sudo systemctl start mongod
sudo systemctl enable mongod
# Install PM2 globally
sudo npm install -g pm2
# Install Git
sudo apt install -y git
# Install Nginx (optional)
sudo apt install -y nginx
```
### Step 3: Create Deployment Directory
```bash
# Create directory
sudo mkdir -p /var/www/turbotrades
sudo chown -R $USER:$USER /var/www/turbotrades
# Navigate to directory
cd /var/www/turbotrades
```
### Step 4: Generate SSH Deploy Key (Optional but Recommended)
```bash
# Generate SSH key for deployment
ssh-keygen -t ed25519 -C "deploy@turbotrades" -f ~/.ssh/turbotrades_deploy_key
# Display public key (add to GitHub Deploy Keys)
cat ~/.ssh/turbotrades_deploy_key.pub
# Display private key (add to GitHub Secrets)
cat ~/.ssh/turbotrades_deploy_key
```
### Step 5: Clone Repository
```bash
cd /var/www/turbotrades
git clone https://git.turbotrades.dev/iDefineHD/TurboTrades.git .
# Or with SSH key:
git clone git@git.turbotrades.dev:iDefineHD/TurboTrades.git .
```
### Step 6: Create Environment File
```bash
cd /var/www/turbotrades
nano .env
```
Add the following configuration:
```env
# Server Configuration
NODE_ENV=production
PORT=3000
HOST=0.0.0.0
# Database
MONGODB_URI=mongodb://localhost:27017/turbotrades
# Session Secret (Generate a secure random string)
SESSION_SECRET=your-super-secret-session-key-change-this
# Steam API
STEAM_API_KEY=your-steam-api-key-here
STEAM_RETURN_URL=http://178.63.127.19:3000/auth/steam/return
# JWT Secret (Generate a secure random string)
JWT_SECRET=your-super-secret-jwt-key-change-this
JWT_ACCESS_EXPIRY=15m
JWT_REFRESH_EXPIRY=7d
# CORS
CORS_ORIGIN=http://178.63.127.19
# Redis (if using)
REDIS_URL=redis://localhost:6379
# Admin Steam IDs (comma-separated)
ADMIN_STEAM_IDS=76561198000000000,76561198111111111
# Bot Configuration
STEAM_BOT_USERNAME=your-bot-username
STEAM_BOT_PASSWORD=your-bot-password
STEAM_BOT_SHARED_SECRET=your-bot-shared-secret
STEAM_BOT_IDENTITY_SECRET=your-bot-identity-secret
# CSGOFloat API (optional)
CSGOFLOAT_API_KEY=your-csgofloat-api-key
# Pricing API (optional)
PRICING_API_KEY=your-pricing-api-key
```
Save and exit (Ctrl+X, Y, Enter)
### Step 7: Install Dependencies
```bash
# Backend dependencies
npm ci --production
# Frontend dependencies and build
cd frontend
npm ci
npm run build
cd ..
```
### Step 8: Setup PM2
```bash
# Start application with PM2
pm2 start ecosystem.config.js --env production
# Save PM2 configuration
pm2 save
# Setup PM2 to start on boot
pm2 startup
# Follow the instructions provided by the command above
# Check status
pm2 status
pm2 logs turbotrades
```
### Step 9: Configure Nginx (Optional but Recommended)
```bash
sudo nano /etc/nginx/sites-available/turbotrades
```
Add the following configuration:
```nginx
server {
listen 80;
server_name 178.63.127.19 yourdomain.com;
# Frontend (Vite build)
location / {
root /var/www/turbotrades/frontend/dist;
try_files $uri $uri/ /index.html;
# Cache static assets
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
# Backend API
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_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;
proxy_cache_bypass $http_upgrade;
}
# WebSocket support
location /ws {
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_set_header X-Real-IP $remote_addr;
}
# Auth routes
location /auth {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Host $host;
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;
}
}
```
Enable the site:
```bash
sudo ln -s /etc/nginx/sites-available/turbotrades /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
```
### Step 10: Configure Firewall
```bash
# Allow SSH, HTTP, and HTTPS
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status
```
---
## 🔐 GitHub Secrets Configuration
### Step 1: Go to GitHub Repository Settings
1. Go to your repository: `https://git.turbotrades.dev/iDefineHD/TurboTrades`
2. Click **Settings****Secrets** (or CI/CD settings depending on Gitea version)
3. Click **New repository secret**
### Step 2: Add Required Secrets
Add each of these secrets:
#### `SERVER_HOST`
```
178.63.127.19
```
#### `SERVER_USER`
```
root
```
(or your SSH username)
#### `SERVER_PORT`
```
22
```
#### `SSH_PRIVATE_KEY`
```
-----BEGIN OPENSSH PRIVATE KEY-----
[Your private key content from ~/.ssh/turbotrades_deploy_key]
-----END OPENSSH PRIVATE KEY-----
```
#### `DEPLOY_PATH`
```
/var/www/turbotrades
```
### Step 3: Add Deploy Key to GitHub (If Using SSH)
1. Go to **Settings****Deploy keys**
2. Click **Add deploy key**
3. Title: `Production Server 178.63.127.19`
4. Key: Paste your public key from `~/.ssh/turbotrades_deploy_key.pub`
5. ✅ Check **Allow write access** (if needed)
6. Click **Add key**
---
## 🚀 Initial Deployment
### Method 1: Manual Initial Setup (Recommended)
Already completed in [Server Setup](#server-setup) above!
### Method 2: Using PM2 Deploy
```bash
# From your local machine
pm2 deploy ecosystem.config.js production setup
pm2 deploy ecosystem.config.js production
```
---
## 🔄 Automatic Deployments
### How It Works
The CI/CD workflow (`.github/workflows/deploy.yml`) automatically deploys when:
1. You push to the `main` branch
2. You manually trigger the workflow
### Deployment Process
1. **Trigger**: Push to `main` branch
```bash
git add .
git commit -m "feat: Add new feature"
git push origin main
```
2. **CI/CD Pipeline**: Automatically runs
- ✅ Checks out code
- ✅ Builds frontend
- ✅ Runs tests
- ✅ Deploys to server via SSH
- ✅ Restarts PM2
- ✅ Runs health check
- ✅ Rolls back if failed
3. **Monitor**: Check repository Actions tab for progress
### Manual Trigger
1. Go to **Actions** tab on GitHub
2. Select **Deploy to Production Server**
3. Click **Run workflow**
4. Select branch (usually `main`)
5. Click **Run workflow**
---
## 🛠️ Manual Deployment
### Quick Deploy (SSH to Server)
```bash
# SSH into server
ssh root@178.63.127.19
# Navigate to project
cd /var/www/turbotrades
# Pull latest changes
git pull origin main
# Install dependencies
npm ci --production
cd frontend && npm ci && npm run build && cd ..
# Restart application
pm2 restart turbotrades
# Check status
pm2 status
pm2 logs turbotrades --lines 50
```
### Using PM2 Deploy Command
```bash
# From your local machine
pm2 deploy ecosystem.config.js production update
```
---
## 📊 Monitoring & Maintenance
### Check Application Status
```bash
# SSH into server
ssh root@178.63.127.19
# Check PM2 status
pm2 status
# View logs
pm2 logs turbotrades
# View last 100 lines
pm2 logs turbotrades --lines 100
# View only errors
pm2 logs turbotrades --err
# Monitor in real-time
pm2 monit
```
### Check Server Resources
```bash
# CPU and Memory usage
htop
# Disk usage
df -h
# Check MongoDB status
sudo systemctl status mongod
# Check Nginx status
sudo systemctl status nginx
```
### Database Backup
```bash
# Create backup directory
mkdir -p /var/backups/turbotrades
# Backup MongoDB
mongodump --out /var/backups/turbotrades/backup-$(date +%Y%m%d-%H%M%S)
# Automated daily backup (add to crontab)
crontab -e
# Add this line:
0 2 * * * mongodump --out /var/backups/turbotrades/backup-$(date +\%Y\%m\%d)
```
### View Application Logs
```bash
# PM2 logs
pm2 logs turbotrades
# Application logs (if file-based)
tail -f /var/www/turbotrades/logs/app.log
# Nginx access logs
tail -f /var/log/nginx/access.log
# Nginx error logs
tail -f /var/log/nginx/error.log
```
### Restart Services
```bash
# Restart application
pm2 restart turbotrades
# Restart all PM2 apps
pm2 restart all
# Restart MongoDB
sudo systemctl restart mongod
# Restart Nginx
sudo systemctl restart nginx
# Reload Nginx (without downtime)
sudo systemctl reload nginx
```
---
## 🐛 Troubleshooting
### Issue: Application Won't Start
```bash
# Check PM2 logs
pm2 logs turbotrades --err
# Check if port is already in use
sudo lsof -i :3000
# Check environment variables
pm2 show turbotrades
# Restart with fresh environment
pm2 delete turbotrades
pm2 start ecosystem.config.js --env production
```
### Issue: Cannot Connect to Database
```bash
# Check MongoDB status
sudo systemctl status mongod
# Start MongoDB
sudo systemctl start mongod
# Check MongoDB logs
sudo tail -f /var/log/mongodb/mongod.log
# Test MongoDB connection
mongosh
```
### Issue: "Permission Denied" Errors
```bash
# Fix ownership
sudo chown -R $USER:$USER /var/www/turbotrades
# Fix permissions
chmod -R 755 /var/www/turbotrades
```
### Issue: CI/CD Deployment Fails
1. **Check CI/CD logs**
- Go to repository Actions tab
- Click on failed workflow
- Review error messages
2. **Verify Secrets**
- Settings → Secrets and variables → Actions
- Ensure all secrets are set correctly
3. **Test SSH Connection Manually**
```bash
ssh root@178.63.127.19
```
4. **Check Deployment Path**
```bash
ssh root@178.63.127.19 "ls -la /var/www/turbotrades"
```
### Issue: 502 Bad Gateway (Nginx)
```bash
# Check if app is running
pm2 status
# Restart application
pm2 restart turbotrades
# Check Nginx configuration
sudo nginx -t
# View Nginx error logs
sudo tail -f /var/log/nginx/error.log
```
### Issue: Out of Memory
```bash
# Check memory usage
free -h
# Increase PM2 memory limit
pm2 stop turbotrades
# Edit ecosystem.config.js and increase max_memory_restart
pm2 start ecosystem.config.js
# Add swap space (if needed)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
```
---
## ⏮️ Rollback Procedures
### Automatic Rollback
The CI/CD workflow automatically rolls back if deployment fails.
### Manual Rollback
#### Method 1: Using Backups
```bash
# SSH into server
ssh root@178.63.127.19
# List backups
ls -lt /var/www/ | grep turbotrades-backup
# Restore from backup
cd /var/www
rm -rf turbotrades/*
cp -r turbotrades-backup-YYYYMMDD-HHMMSS/* turbotrades/
# Restart application
cd turbotrades
pm2 restart turbotrades
```
#### Method 2: Using Git
```bash
# SSH into server
ssh root@178.63.127.19
cd /var/www/turbotrades
# View commit history
git log --oneline
# Rollback to specific commit
git reset --hard COMMIT_HASH
# Reinstall dependencies
npm ci --production
cd frontend && npm ci && npm run build && cd ..
# Restart
pm2 restart turbotrades
```
#### Method 3: Rollback to Previous Tag
```bash
# SSH into server
cd /var/www/turbotrades
# List tags
git tag -l
# Checkout specific tag
git checkout v1.0.0
# Rebuild and restart
npm ci --production
cd frontend && npm ci && npm run build && cd ..
pm2 restart turbotrades
```
---
## 📝 Deployment Checklist
### Before Deployment
- [ ] All tests pass locally
- [ ] Environment variables configured
- [ ] Database migrations ready (if any)
- [ ] Backup current production data
- [ ] Notify team about deployment
### During Deployment
- [ ] Monitor CI/CD workflow
- [ ] Watch server logs
- [ ] Check PM2 status
- [ ] Verify health endpoint
### After Deployment
- [ ] Test critical features
- [ ] Check error logs
- [ ] Verify database connectivity
- [ ] Test admin panel
- [ ] Test user authentication
- [ ] Monitor performance metrics
---
## 🔒 Security Best Practices
1. **Keep Secrets Safe**
- Never commit `.env` file
- Use GitHub Secrets for sensitive data
- Rotate secrets regularly
2. **Keep Software Updated**
```bash
sudo apt update && sudo apt upgrade
npm update
```
3. **Enable Firewall**
```bash
sudo ufw enable
sudo ufw status
```
4. **Use HTTPS** (Recommended)
```bash
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d yourdomain.com
```
5. **Regular Backups**
- Database backups daily
- Code backups before deployment
- Test restore procedures
---
## 📞 Support & Resources
### Useful Commands
```bash
# Full deployment script
cd /var/www/turbotrades && \
git pull origin main && \
npm ci --production && \
cd frontend && npm ci && npm run build && cd .. && \
pm2 restart turbotrades && \
pm2 logs turbotrades --lines 20
# Quick restart
pm2 restart turbotrades && pm2 logs turbotrades
# Check everything
pm2 status && \
sudo systemctl status mongod && \
sudo systemctl status nginx
```
### Logs Locations
- PM2 Logs: `~/.pm2/logs/`
- Application Logs: `/var/www/turbotrades/logs/`
- Nginx Access: `/var/log/nginx/access.log`
- Nginx Error: `/var/log/nginx/error.log`
- MongoDB: `/var/log/mongodb/mongod.log`
### Performance Monitoring
```bash
# Install monitoring tools
sudo npm install -g pm2-logrotate
pm2 install pm2-logrotate
# Monitor resources
pm2 monit
htop
```
---
## 🎯 Quick Reference
### Deploy from Local Machine
```bash
git add .
git commit -m "Your message"
git push origin main
# CI/CD pipeline handles the rest!
```
### Manual Deploy on Server
```bash
ssh root@178.63.127.19
cd /var/www/turbotrades
git pull && npm ci --production && cd frontend && npm ci && npm run build && cd .. && pm2 restart turbotrades
```
### Check Status
```bash
ssh root@178.63.127.19 "pm2 status && pm2 logs turbotrades --lines 20"
```
### Emergency Restart
```bash
ssh root@178.63.127.19 "pm2 restart turbotrades"
```
---
**🎉 Your deployment is now automated and production-ready!**
For issues or questions, check the troubleshooting section or review the logs.