Some checks failed
Deploy to Production / Deploy to turbotrades.dev (push) Has been cancelled
13 KiB
13 KiB
🚀 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
# 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:
git add .
git commit -m "Your update"
git push origin main
Gitea Actions will automatically deploy!
🔧 Detailed Setup
1. Server Prerequisites
Install Required Software
# 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
# 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
# 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
# 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
cd /root/ttbackend
nano .env
Required Environment Variables:
# 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
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
# 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
- Go to repository settings
- Enable "Actions" if not already enabled
- Workflow file is at
.github/workflows/deploy.yml
4. Test Deployment
# 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
# 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
# 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
# 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:
# 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
# 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
# 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
# Renew certificate
certbot renew
# Check certificate status
certbot certificates
# Test SSL
curl -I https://turbotrades.dev
WebSocket Connection Failed
# 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
# Check MongoDB status
systemctl status mongod
# Restart MongoDB
systemctl restart mongod
# Check connection
mongo turbotrades --eval "db.stats()"
Gitea Actions Failed
- Check Actions tab:
https://git.turbotrades.dev/iDefineHD/TurboTrades/actions - Click failed workflow to view logs
- Common issues:
- SSH key not configured
- Secrets not set
- Server unreachable
- Permission issues
502 Bad Gateway
# 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
- 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)
# 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
# Create backup script
nano /root/backup-turbotrades.sh
backup-turbotrades.sh:
#!/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"
# 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:
# 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:
instances: 4, // Use multiple CPU cores
exec_mode: "cluster",
MongoDB Indexes
mongo turbotrades
// 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
# 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! 🚀