chitfund/PRODUCTION_UPDATE_GUIDE.md

6.7 KiB

🔄 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)

# 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

# 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

# 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

# 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

# On production server
cd /home/luckychit/apps/chitfund/backend
git pull origin main
npm install
pm2 reload luckychit-api

Step 2: Update Frontend

# 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

# 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

# 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)

# Build
cd luckychit
flutter build web --release

# Deploy (local script)
./deploy-web.sh

# Deploy (auto-upload to server)
./deploy-web-auto.sh

Frontend (Android)

# 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

# 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

# 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:

cd backend
git status
git log -1

PM2 not picking up changes:

pm2 reload luckychit-api --update-env
# or
pm2 restart luckychit-api

Native module issues (bcrypt):

cd backend
./fix-bcrypt.sh

Frontend Still Shows Old Version

Browser cache:

  • Hard refresh: Ctrl+Shift+R
  • Or open in Incognito mode

Server cache:

# Clear nginx cache (if using nginx)
sudo rm -rf /var/cache/nginx/*
sudo systemctl restart nginx

Verify files updated:

# On server
ls -lh /var/www/luckychit/
# Check modification times

Force rebuild:

cd luckychit
flutter clean
rm -rf build/
flutter pub get
flutter build web --release

📊 Version Management

Check Current Versions

Backend:

# Check package.json
cat backend/package.json | grep version

# Or add to your API
# GET /api/version

Frontend:

# Check pubspec.yaml
cat luckychit/pubspec.yaml | grep version

Update Versions

Backend (package.json):

{
  "name": "luckychit-backend",
  "version": "1.0.2",
  ...
}

Frontend (pubspec.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

cd backend
git log --oneline -5  # See recent commits
git checkout <previous-commit-hash>
pm2 reload luckychit-api

Frontend Rollback

# 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:

    echo "$(date): Updated to version 1.0.2" >> deployment.log
    
  5. Monitor after deployment:

    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! 🎯