312 lines
7.4 KiB
Markdown
312 lines
7.4 KiB
Markdown
# ⚖️ PM2 Guide vs Your Actual Setup - Comparison
|
||
|
||
This document compares what the `PM2_PRODUCTION_GUIDE.md` recommends vs what you're **actually** using in production.
|
||
|
||
---
|
||
|
||
## 📊 Quick Comparison Table
|
||
|
||
| Feature | PM2_PRODUCTION_GUIDE.md Recommends | Your Actual Setup | Recommendation |
|
||
|---------|-----------------------------------|-------------------|----------------|
|
||
| **Backend Start** | `pm2 start ecosystem.config.js` | `pm2 start src/server.js --name luckychit-api` | ⚠️ Consider using ecosystem.config.js |
|
||
| **Frontend Serving** | Express server or http-server | `pm2 serve build/web 8080 --spa` | ✅ Your way is fine |
|
||
| **Cluster Mode** | Enabled (uses all CPU cores) | Disabled (single instance) | ⚠️ Enable for better performance |
|
||
| **nginx** | Recommended for reverse proxy | Disabled | ⚠️ Enable for SSL & security |
|
||
| **SSL Certificate** | Let's Encrypt setup | Not configured | ⚠️ Needed for HTTPS |
|
||
| **Log Rotation** | pm2-logrotate installed | Not configured | ⚠️ Logs will grow forever |
|
||
| **Auto-restart on crash** | Yes (ecosystem.config.js) | Yes (PM2 default) | ✅ Working |
|
||
| **Auto-start on reboot** | Configured with `pm2 startup` | ✅ Configured | ✅ Working |
|
||
| **Memory Limit** | 1GB max (prevents leaks) | No limit | ⚠️ Consider adding |
|
||
| **Scheduled Restarts** | 3 AM daily | None | ⚠️ Optional but good |
|
||
| **Health Checks** | Endpoint configured | ✅ `/health` exists | ✅ Working |
|
||
| **Database Backups** | Automated with cron | Not configured | ⚠️ Critical! Set this up |
|
||
| **Production Branch** | `main` or `master` | `prodnew` | ✅ Any branch is fine |
|
||
|
||
---
|
||
|
||
## 🔍 Detailed Breakdown
|
||
|
||
### 1. Backend Process Management
|
||
|
||
#### Guide Recommends:
|
||
```bash
|
||
cd backend
|
||
pm2 start ecosystem.config.js --env production
|
||
```
|
||
|
||
**Features**:
|
||
- ✅ Cluster mode (utilizes all CPU cores)
|
||
- ✅ Auto-restart on crashes
|
||
- ✅ Memory limit (1GB)
|
||
- ✅ Log rotation
|
||
- ✅ Scheduled restarts (3 AM daily)
|
||
|
||
#### You're Using:
|
||
```bash
|
||
cd backend
|
||
pm2 start src/server.js --name luckychit-api
|
||
```
|
||
|
||
**Features**:
|
||
- ✅ Auto-restart on crashes (PM2 default)
|
||
- ❌ Single instance only
|
||
- ❌ No memory limit
|
||
- ❌ No automatic log rotation
|
||
- ❌ No scheduled restarts
|
||
|
||
**Impact**: Your setup works but doesn't scale well under heavy load.
|
||
|
||
**Quick Fix**:
|
||
```bash
|
||
# Read your ecosystem.config.js first
|
||
cd /home/luckychit/apps/chitfund/backend
|
||
cat ecosystem.config.js
|
||
|
||
# If it exists and looks good, use it:
|
||
pm2 delete luckychit-api
|
||
pm2 start ecosystem.config.js --env production
|
||
pm2 save
|
||
```
|
||
|
||
---
|
||
|
||
### 2. Frontend Serving
|
||
|
||
#### Guide Recommends:
|
||
```bash
|
||
# Option A: http-server
|
||
npm install -g http-server
|
||
pm2 start http-server --name "luckychit-web" -- -p 8080 -d false -c-1 build/web
|
||
|
||
# Option B: Express server
|
||
pm2 start server.js --name "luckychit-web"
|
||
```
|
||
|
||
#### You're Using:
|
||
```bash
|
||
pm2 serve /home/luckychit/apps/chitfund/luckychit/build/web 8080 --name luckychit-frontend --spa
|
||
```
|
||
|
||
**Verdict**: ✅ **Your way is perfectly fine!** PM2's built-in static server is great for SPAs.
|
||
|
||
---
|
||
|
||
### 3. nginx Reverse Proxy
|
||
|
||
#### Guide Recommends:
|
||
```nginx
|
||
server {
|
||
listen 80;
|
||
server_name chitfund.deepteklabs.com;
|
||
|
||
location /api {
|
||
proxy_pass http://localhost:3000;
|
||
}
|
||
|
||
location / {
|
||
proxy_pass http://localhost:8080;
|
||
}
|
||
}
|
||
```
|
||
|
||
#### You're Using:
|
||
```bash
|
||
# nginx disabled (from your history lines 253-254)
|
||
systemctl stop nginx
|
||
systemctl disable nginx
|
||
|
||
# Direct access to ports 3000 and 8080
|
||
```
|
||
|
||
**Issues**:
|
||
- ❌ No SSL/HTTPS (insecure for production)
|
||
- ❌ Ports directly exposed (security risk)
|
||
- ❌ No caching
|
||
- ❌ Can't use standard ports (80/443)
|
||
|
||
**Impact**: Users must access `http://192.168.8.148:8080` instead of `https://chitfund.deepteklabs.com`
|
||
|
||
---
|
||
|
||
### 4. Log Management
|
||
|
||
#### Guide Recommends:
|
||
```bash
|
||
pm2 install pm2-logrotate
|
||
pm2 set pm2-logrotate:max_size 10M
|
||
pm2 set pm2-logrotate:retain 30
|
||
```
|
||
|
||
#### You're Using:
|
||
- ❌ No log rotation configured
|
||
|
||
**Impact**: Logs will grow indefinitely and fill up disk space.
|
||
|
||
**Quick Fix**:
|
||
```bash
|
||
pm2 install pm2-logrotate
|
||
pm2 set pm2-logrotate:max_size 10M
|
||
pm2 set pm2-logrotate:retain 7
|
||
pm2 set pm2-logrotate:compress true
|
||
```
|
||
|
||
---
|
||
|
||
### 5. Database Backups
|
||
|
||
#### Guide Recommends:
|
||
Automated daily backups with cron:
|
||
```bash
|
||
0 2 * * * /path/to/backup.sh
|
||
```
|
||
|
||
#### You're Using:
|
||
- ❌ No automated backups
|
||
|
||
**Impact**: ⚠️ **CRITICAL** - No backup means data loss if database fails!
|
||
|
||
**Quick Fix** (create backup script):
|
||
```bash
|
||
#!/bin/bash
|
||
BACKUP_DIR="/home/luckychit/backups"
|
||
DATE=$(date +%Y%m%d_%H%M%S)
|
||
mkdir -p $BACKUP_DIR
|
||
|
||
pg_dump -U luckychit -h localhost luckychit > $BACKUP_DIR/backup_$DATE.sql
|
||
|
||
# Keep only last 7 days
|
||
find $BACKUP_DIR -name "backup_*.sql" -mtime +7 -delete
|
||
```
|
||
|
||
Add to crontab:
|
||
```bash
|
||
crontab -e
|
||
# Add: 0 2 * * * /home/luckychit/backup.sh
|
||
```
|
||
|
||
---
|
||
|
||
## 🎯 Recommended Immediate Actions
|
||
|
||
### Priority 1: CRITICAL ⚠️
|
||
1. **Set up database backups** - Do this TODAY
|
||
```bash
|
||
# Create backup script and set up cron
|
||
```
|
||
|
||
2. **Install log rotation** - Prevents disk full
|
||
```bash
|
||
pm2 install pm2-logrotate
|
||
```
|
||
|
||
### Priority 2: IMPORTANT 🔴
|
||
3. **Use ecosystem.config.js** - Better performance
|
||
```bash
|
||
pm2 delete luckychit-api
|
||
pm2 start ecosystem.config.js --env production
|
||
pm2 save
|
||
```
|
||
|
||
4. **Re-enable nginx** - For SSL and security
|
||
```bash
|
||
systemctl enable nginx
|
||
systemctl start nginx
|
||
# Configure for HTTPS
|
||
```
|
||
|
||
### Priority 3: NICE TO HAVE 🟡
|
||
5. **SSL Certificate** - Secure your site
|
||
6. **Memory limits** - Prevent crashes from memory leaks
|
||
7. **Scheduled restarts** - Keep app fresh
|
||
|
||
---
|
||
|
||
## 📝 Should You Switch to the Guide's Recommendations?
|
||
|
||
### Keep Your Current Setup If:
|
||
- ✅ Low traffic (< 1000 concurrent users)
|
||
- ✅ Internal tool (not public-facing)
|
||
- ✅ No sensitive data transmission
|
||
- ✅ Quick prototype/MVP stage
|
||
|
||
### Switch to Guide's Setup If:
|
||
- ⚠️ Going public with real users
|
||
- ⚠️ Handling sensitive data (passwords, payments)
|
||
- ⚠️ Need high availability
|
||
- ⚠️ Expect traffic growth
|
||
- ⚠️ Need HTTPS/SSL
|
||
|
||
---
|
||
|
||
## 🚀 Migration Path (Guide's Setup)
|
||
|
||
If you want to adopt the guide's recommendations:
|
||
|
||
### Step 1: Set Up ecosystem.config.js
|
||
```bash
|
||
cd /home/luckychit/apps/chitfund/backend
|
||
|
||
# Verify ecosystem.config.js exists
|
||
ls -la ecosystem.config.js
|
||
|
||
# Test it
|
||
pm2 start ecosystem.config.js --env production
|
||
pm2 logs
|
||
```
|
||
|
||
### Step 2: Enable nginx
|
||
```bash
|
||
sudo systemctl enable nginx
|
||
sudo systemctl start nginx
|
||
|
||
# Configure reverse proxy
|
||
sudo nano /etc/nginx/sites-available/luckychit
|
||
```
|
||
|
||
### Step 3: Add SSL
|
||
```bash
|
||
sudo apt install certbot python3-certbot-nginx
|
||
sudo certbot --nginx -d chitfund.deepteklabs.com
|
||
```
|
||
|
||
### Step 4: Set Up Backups
|
||
```bash
|
||
# Create backup script
|
||
nano ~/backup.sh
|
||
chmod +x ~/backup.sh
|
||
|
||
# Test it
|
||
./backup.sh
|
||
|
||
# Add to cron
|
||
crontab -e
|
||
```
|
||
|
||
### Step 5: Log Rotation
|
||
```bash
|
||
pm2 install pm2-logrotate
|
||
```
|
||
|
||
---
|
||
|
||
## 🎓 Summary
|
||
|
||
**Your Current Setup**:
|
||
- ✅ Works fine for development/testing
|
||
- ✅ Simple and easy to manage
|
||
- ⚠️ Missing production best practices
|
||
- ⚠️ Not secure for public use
|
||
|
||
**Guide's Recommended Setup**:
|
||
- ✅ Production-ready
|
||
- ✅ Scalable and secure
|
||
- ✅ Industry best practices
|
||
- ⚠️ More complex to set up
|
||
|
||
**Recommendation**: Start with **database backups** and **log rotation** immediately. Then gradually migrate to ecosystem.config.js and nginx as your app matures.
|
||
|
||
---
|
||
|
||
**The good news**: Your deployment workflow is solid! You just need to enhance the infrastructure around it. 🎉
|
||
|