chitfund/README_DEPLOYMENT.md

320 lines
8.5 KiB
Markdown

# 🎯 LuckyChit Deployment - What's New
## What I've Created For You
Based on your bash history (lines 173-403), I've analyzed your **actual** production PM2 setup and created comprehensive deployment tools and documentation.
---
## 📦 New Files Created
### 🚀 Deployment Scripts (Ready to Use)
1. **`deploy-full.sh`** - Deploy both backend and frontend
2. **`deploy-backend-only.sh`** - Update backend only
3. **`deploy-frontend-only.sh`** - Update frontend only
4. **`backup-database.sh`** - Backup PostgreSQL database
5. **`restore-database.sh`** - Restore database from backup
6. **`setup-deployment-scripts.sh`** - Make all scripts executable
### 📚 Documentation Files
1. **`DEPLOYMENT_MASTER_GUIDE.md`** ⭐ - Start here! Master index of everything
2. **`QUICK_REFERENCE.md`** ⭐ - Your daily command cheat sheet
3. **`ACTUAL_PRODUCTION_SETUP.md`** - Documents your real production setup
4. **`PRODUCTION_DIFFERENCES.md`** - Compares your setup vs best practices
5. **`README_DEPLOYMENT.md`** - This file (what's new)
### 🔧 Configuration Updates
1. **`backend/ecosystem.config.js`** - Fixed to match your folder structure
- Changed `script: './server.js'``'./src/server.js'`
- Changed `name: 'luckychit-backend'``'luckychit-api'`
---
## 🎯 Your Production Setup (From History Analysis)
### What You're Running:
```bash
# Backend (port 3000)
pm2 start src/server.js --name luckychit-api
# Frontend (port 8080)
pm2 serve /home/luckychit/apps/chitfund/luckychit/build/web 8080 --name luckychit-frontend --spa
# Auto-start configured
pm2 startup systemd -u luckychit --hp /home/luckychit
pm2 save
```
### Key Findings:
-**Working**: Basic PM2 setup with auto-restart on reboot
- ⚠️ **Not Using**: ecosystem.config.js (but I fixed it for you)
- ⚠️ **Disabled**: nginx (you stopped it at line 253-254)
- ⚠️ **Missing**: Automated database backups
- ⚠️ **Missing**: Log rotation (logs will grow forever)
-**Branch**: Using `prodnew` for production
-**Ports**: Backend 3000, Frontend 8080
---
## 🚀 How to Use (Next Steps)
### Step 1: Copy Scripts to Production Server
From your dev machine:
```bash
# Option A: Git (if scripts are committed)
ssh luckychit@192.168.8.148
cd /home/luckychit/apps/chitfund
git pull origin prodnew
# Option B: SCP (copy directly)
scp deploy-*.sh backup-database.sh restore-database.sh setup-deployment-scripts.sh luckychit@192.168.8.148:/home/luckychit/apps/chitfund/
```
### Step 2: Make Scripts Executable
On production server:
```bash
cd /home/luckychit/apps/chitfund
chmod +x setup-deployment-scripts.sh
./setup-deployment-scripts.sh
```
### Step 3: Test Deployment Script
```bash
./deploy-full.sh
```
### Step 4: Set Up Automated Backups
```bash
# Test backup script first
./backup-database.sh
# Add to crontab for daily backups at 2 AM
crontab -e
# Add this line:
0 2 * * * /home/luckychit/apps/chitfund/backup-database.sh
```
---
## 📖 Which Document to Read When
### 🎯 For Daily Deployment:
**Read**: `QUICK_REFERENCE.md`
Quick commands for deploying, checking status, viewing logs.
### 🔍 To Understand Your Setup:
**Read**: `ACTUAL_PRODUCTION_SETUP.md`
Explains exactly how your production is configured based on your history.
### 📚 For Best Practices:
**Read**: `PM2_PRODUCTION_GUIDE.md` (already existed)
Industry-standard PM2 setup recommendations.
### ⚖️ To See What Could Be Better:
**Read**: `PRODUCTION_DIFFERENCES.md`
Side-by-side comparison of your setup vs recommended practices.
### 🎓 For Everything:
**Read**: `DEPLOYMENT_MASTER_GUIDE.md`
Master index that ties everything together.
---
## 🎉 Your Deployment Workflow (Simplified)
### Before (Manual):
```bash
cd /home/luckychit/apps/chitfund
git pull
cd backend
npm install
pm2 restart luckychit-api
cd ../luckychit
flutter pub get
flutter build web --release
pm2 restart luckychit-frontend
pm2 status
pm2 logs --lines 20
```
### After (Automated):
```bash
cd /home/luckychit/apps/chitfund
./deploy-full.sh
```
The script does everything automatically! ✨
---
## ⚠️ Important Issues Identified
### 1. bcrypt Error (You Hit This Multiple Times)
**Lines 204-214, 351-352**: Had to remove node_modules repeatedly
**Cause**: Installing on Windows, running on Linux
**Solution**: Always `npm install` on the server
**Your Scripts Now Handle This**: Check before installing
### 2. No Database Backups
**Critical**: You have no automated backups!
**Solution Created**: `backup-database.sh` script ready to use
### 3. No Log Rotation
**Impact**: Logs will grow forever and fill disk
**Quick Fix**:
```bash
pm2 install pm2-logrotate
```
### 4. Not Using ecosystem.config.js
**Impact**: Single process, no cluster mode, no memory limits
**I Fixed It**: Updated to match your folder structure
**To Use**: See `PRODUCTION_DIFFERENCES.md` for migration guide
---
## 📊 Comparison: Your Setup vs Best Practices
| Feature | You Have | Should Have | Fix |
|---------|----------|-------------|-----|
| PM2 Running | ✅ Yes | ✅ Yes | - |
| Auto-restart | ✅ Yes | ✅ Yes | - |
| Cluster Mode | ❌ No | ✅ Yes | Use ecosystem.config.js |
| Memory Limit | ❌ No | ✅ Yes | Use ecosystem.config.js |
| Log Rotation | ❌ No | ✅ Yes | `pm2 install pm2-logrotate` |
| DB Backups | ❌ No | ✅ Yes | Use `backup-database.sh` |
| nginx | ❌ Disabled | ✅ Enabled | Re-enable for SSL |
| SSL/HTTPS | ❌ No | ✅ Yes | Requires nginx |
---
## 🎓 Key Insights from Your History
### What Worked:
1. ✅ PM2 auto-restart on reboot (lines 174-175)
2. ✅ Simple deployment pattern (repeated successfully)
3. ✅ Health check endpoint at `/health`
4. ✅ Firewall configured for ports 3000, 8080
### Pain Points:
1. ⚠️ Repeated bcrypt errors (need to rebuild node_modules on server)
2. ⚠️ Manual deployment is repetitive (now automated!)
3. ⚠️ No backups (now have scripts!)
4. ⚠️ Frontend not updating sometimes (scripts handle clean rebuild)
### Unusual Patterns:
1. Line 395: Copied to `/var/www/luckychit/` but PM2 serves from `build/web` (not needed)
2. Lines 253-254: Disabled nginx (should re-enable for SSL)
3. Line 395: Using `prodnew` branch instead of `main` (that's fine)
---
## 🚨 Critical To-Do List
### Priority 1: Do Today
- [ ] Copy deployment scripts to server
- [ ] Make scripts executable (`./setup-deployment-scripts.sh`)
- [ ] Test deployment: `./deploy-full.sh`
- [ ] Set up database backups: `./backup-database.sh`
- [ ] Add backup to crontab (daily at 2 AM)
### Priority 2: This Week
- [ ] Install log rotation: `pm2 install pm2-logrotate`
- [ ] Consider using ecosystem.config.js (better performance)
- [ ] Re-enable nginx for SSL/HTTPS
### Priority 3: This Month
- [ ] Set up SSL certificate with Let's Encrypt
- [ ] Test disaster recovery with `./restore-database.sh`
- [ ] Review and tune PM2 configuration
---
## 💡 Pro Tips
### Tip 1: Bookmark QUICK_REFERENCE.md
Keep it open in your browser for instant access to commands.
### Tip 2: Test Backups Monthly
```bash
./restore-database.sh
```
Select yesterday's backup and test the restore process.
### Tip 3: Monitor PM2 Status
```bash
pm2 monit
```
Real-time CPU, memory, and logs.
### Tip 4: Use Reload Instead of Restart
```bash
pm2 reload luckychit-api # Zero downtime
```
Better than `pm2 restart` for production.
### Tip 5: Check Logs After Every Deployment
```bash
./deploy-full.sh
pm2 logs --lines 50 # Always verify!
```
---
## 📞 Need Help?
1. **Quick command?**`QUICK_REFERENCE.md`
2. **Deployment issue?**`DEPLOYMENT_MASTER_GUIDE.md`
3. **Understanding setup?**`ACTUAL_PRODUCTION_SETUP.md`
4. **Best practices?**`PM2_PRODUCTION_GUIDE.md`
---
## ✅ Summary
**What I Did**:
- ✅ Analyzed 230 lines of your bash history
- ✅ Documented your **real** production setup
- ✅ Created 6 deployment/backup scripts
- ✅ Created 5 comprehensive documentation files
- ✅ Fixed your ecosystem.config.js to match your setup
- ✅ Identified critical issues (no backups, log rotation, etc.)
**What You Get**:
- ✅ One-command deployments (`./deploy-full.sh`)
- ✅ Database backup/restore scripts
- ✅ Complete production documentation
- ✅ Quick reference guide for daily use
- ✅ Clear upgrade path to best practices
**What to Do Next**:
1. Copy scripts to production
2. Test deployment script
3. Set up automated backups
4. Bookmark QUICK_REFERENCE.md
---
## 🎉 You're Ready!
Your production deployment is now documented, automated, and easier to manage.
**Start with**: `DEPLOYMENT_MASTER_GUIDE.md` or `QUICK_REFERENCE.md`
**Happy deploying! 🚀**