chitfund/PRODUCTION_UPDATE_GUIDE.md

396 lines
6.7 KiB
Markdown

# 🔄 Production Update Quick Guide - LuckyChit
Quick reference for updating backend and frontend in production.
---
## 🎯 What Changed?
-**Backend only?** → Update Node.js backend
-**Frontend only?** → Rebuild & redeploy Flutter app
-**Both?** → Update backend first, then frontend
---
## 🔧 Backend Updates (Node.js API)
### Quick Update (Zero Downtime)
```bash
# On production server
cd /home/luckychit/apps/chitfund/backend
# Pull latest code
git pull origin main
# Install dependencies (if package.json changed)
npm install
# Reload with zero downtime
pm2 reload luckychit-api
# Or use the deployment script
./deploy.sh production
# Check status
pm2 logs luckychit-api --lines 50
```
**Time:** ~30 seconds
**Downtime:** None (zero-downtime reload)
---
## 📱 Frontend Updates (Flutter UI)
### Option A: Web Deployment (Fastest)
#### Step 1: Build on Your Machine
```bash
# On your Windows dev machine
cd C:\Users\sunde\workspace\chitfund\luckychit
# Build for production
flutter clean
flutter pub get
flutter build web --release
```
#### Step 2: Upload to Server
```bash
# Option 1: Using SCP
scp -r build/web/* user@your-server:/var/www/luckychit/
# Option 2: Using the auto-deploy script (edit config first)
chmod +x deploy-web-auto.sh
./deploy-web-auto.sh
# Option 3: Manual copy (if you have server access)
# Copy build/web/* to /var/www/luckychit/ on server
```
#### Step 3: Clear Cache (Important!)
Users need to hard refresh their browser:
- **Chrome/Edge:** Ctrl + Shift + R
- **Firefox:** Ctrl + Shift + R
- **Mac:** Cmd + Shift + R
**Time:** ~2-3 minutes
**Downtime:** None
### Option B: Android App Update
```bash
# On your machine
cd luckychit
# Update version in pubspec.yaml first!
# version: 1.0.2+3 # Increment this
# Build
chmod +x build-android.sh
./build-android.sh
# Upload to Play Store or distribute APK
```
**Time:** ~5-10 minutes (build only)
**Downtime:** None
---
## 🚀 Complete Update Workflow (Both Backend + Frontend)
### Step 1: Update Backend First
```bash
# On production server
cd /home/luckychit/apps/chitfund/backend
git pull origin main
npm install
pm2 reload luckychit-api
```
### Step 2: Update Frontend
```bash
# On your Windows machine
cd C:\Users\sunde\workspace\chitfund\luckychit
flutter clean
flutter pub get
flutter build web --release
# Upload to server
scp -r build/web/* user@server:/var/www/luckychit/
```
### Step 3: Verify Everything Works
```bash
# Test backend API
curl http://your-server:3000/api/health
# Test frontend (visit in browser)
# https://your-domain.com
# Hard refresh: Ctrl+Shift+R
```
---
## 📋 Quick Commands Cheat Sheet
### Backend
```bash
# Status
pm2 list
# Logs
pm2 logs luckychit-api
# Restart
pm2 restart luckychit-api
# Reload (zero downtime)
pm2 reload luckychit-api
# Monitor
pm2 monit
```
### Frontend (Web)
```bash
# Build
cd luckychit
flutter build web --release
# Deploy (local script)
./deploy-web.sh
# Deploy (auto-upload to server)
./deploy-web-auto.sh
```
### Frontend (Android)
```bash
# Build
cd luckychit
./build-android.sh
# Output:
# - build/app/outputs/flutter-apk/app-release.apk
# - build/app/outputs/bundle/release/app-release.aab
```
---
## ⚡ Fast Updates (Development Mode)
### Backend Hot Reload
```bash
# On server, use nodemon for auto-restart on file changes
npm install -g nodemon
pm2 delete luckychit-api
pm2 start nodemon --name "luckychit-api" -- backend/server.js --watch
```
### Frontend Hot Reload
```bash
# On your machine, run in dev mode
cd luckychit
flutter run -d web-server --web-port 8080
# Changes auto-reload in browser
```
---
## 🔍 Troubleshooting Updates
### Backend Won't Update
**Check if code actually changed:**
```bash
cd backend
git status
git log -1
```
**PM2 not picking up changes:**
```bash
pm2 reload luckychit-api --update-env
# or
pm2 restart luckychit-api
```
**Native module issues (bcrypt):**
```bash
cd backend
./fix-bcrypt.sh
```
### Frontend Still Shows Old Version
**Browser cache:**
- Hard refresh: Ctrl+Shift+R
- Or open in Incognito mode
**Server cache:**
```bash
# Clear nginx cache (if using nginx)
sudo rm -rf /var/cache/nginx/*
sudo systemctl restart nginx
```
**Verify files updated:**
```bash
# On server
ls -lh /var/www/luckychit/
# Check modification times
```
**Force rebuild:**
```bash
cd luckychit
flutter clean
rm -rf build/
flutter pub get
flutter build web --release
```
---
## 📊 Version Management
### Check Current Versions
**Backend:**
```bash
# Check package.json
cat backend/package.json | grep version
# Or add to your API
# GET /api/version
```
**Frontend:**
```bash
# Check pubspec.yaml
cat luckychit/pubspec.yaml | grep version
```
### Update Versions
**Backend (`package.json`):**
```json
{
"name": "luckychit-backend",
"version": "1.0.2",
...
}
```
**Frontend (`pubspec.yaml`):**
```yaml
version: 1.0.2+3
# Format: major.minor.patch+buildNumber
```
---
## 🎯 Pre-Deployment Checklist
### Before Updating Backend
- [ ] Code tested locally
- [ ] Database migrations ready (if any)
- [ ] Environment variables updated (if needed)
- [ ] No breaking API changes (or frontend updated too)
### Before Updating Frontend
- [ ] Backend API compatible
- [ ] Version number incremented
- [ ] Tested locally with production backend
- [ ] Build completes without errors
### After Updating
- [ ] Backend: `pm2 logs` shows no errors
- [ ] Frontend: Hard refresh shows new UI
- [ ] Test critical features
- [ ] Check error logs
- [ ] Monitor for 10-15 minutes
---
## 🚨 Emergency Rollback
### Backend Rollback
```bash
cd backend
git log --oneline -5 # See recent commits
git checkout <previous-commit-hash>
pm2 reload luckychit-api
```
### Frontend Rollback
```bash
# On your machine
cd luckychit
git checkout <previous-commit-hash>
flutter build web --release
scp -r build/web/* user@server:/var/www/luckychit/
```
---
## 📞 Need Help?
**Detailed Guides:**
- Backend: `PM2_PRODUCTION_GUIDE.md`
- Frontend: `FLUTTER_DEPLOYMENT_GUIDE.md`
- Troubleshooting: `DEPLOYMENT_TROUBLESHOOTING.md`
**Quick Start:**
- PM2 Quick Start: `PM2_QUICK_START.md`
---
## 💡 Pro Tips
1. **Always update backend before frontend** (ensures API compatibility)
2. **Test in staging first** if you have a staging server
3. **Update during low traffic times** (early morning, late night)
4. **Keep a deployment log:**
```bash
echo "$(date): Updated to version 1.0.2" >> deployment.log
```
5. **Monitor after deployment:**
```bash
pm2 monit # Backend monitoring
# Watch error logs for 10-15 minutes
```
6. **Communicate with users:**
- Add a banner: "Maintenance in progress"
- Or: "New version deployed, please refresh"
---
**Remember: Backend → Zero downtime | Frontend → Hard refresh needed! 🎯**