feat: Implement comprehensive error handling and production deployment pipeline
Some checks failed
ParentFlow CI/CD Pipeline / Backend Tests (push) Has been cancelled
ParentFlow CI/CD Pipeline / Frontend Tests (push) Has been cancelled
ParentFlow CI/CD Pipeline / Security Scanning (push) Has been cancelled
ParentFlow CI/CD Pipeline / Build Docker Images (map[context:maternal-app/maternal-app-backend dockerfile:Dockerfile.production name:backend]) (push) Has been cancelled
ParentFlow CI/CD Pipeline / Build Docker Images (map[context:maternal-web dockerfile:Dockerfile.production name:frontend]) (push) Has been cancelled
ParentFlow CI/CD Pipeline / Deploy to Development (push) Has been cancelled
ParentFlow CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Lint and Test (push) Has been cancelled
CI/CD Pipeline / E2E Tests (push) Has been cancelled
CI/CD Pipeline / Build Application (push) Has been cancelled
Some checks failed
ParentFlow CI/CD Pipeline / Backend Tests (push) Has been cancelled
ParentFlow CI/CD Pipeline / Frontend Tests (push) Has been cancelled
ParentFlow CI/CD Pipeline / Security Scanning (push) Has been cancelled
ParentFlow CI/CD Pipeline / Build Docker Images (map[context:maternal-app/maternal-app-backend dockerfile:Dockerfile.production name:backend]) (push) Has been cancelled
ParentFlow CI/CD Pipeline / Build Docker Images (map[context:maternal-web dockerfile:Dockerfile.production name:frontend]) (push) Has been cancelled
ParentFlow CI/CD Pipeline / Deploy to Development (push) Has been cancelled
ParentFlow CI/CD Pipeline / Deploy to Production (push) Has been cancelled
CI/CD Pipeline / Lint and Test (push) Has been cancelled
CI/CD Pipeline / E2E Tests (push) Has been cancelled
CI/CD Pipeline / Build Application (push) Has been cancelled
## Error Handling System - Add centralized error handling utilities (errorHandler.ts) - Create reusable error components (ErrorMessage, ErrorToast) - Implement multilingual error support (preserves backend error messages in 5 languages) - Update 15+ forms and components with consistent error handling - Auth forms: login, register, forgot-password - Family management: family page, join family dialog - Child management: child dialog - All tracking forms: feeding, sleep, diaper, medicine, growth, activity ## Production Build Fixes - Fix backend TypeScript errors: InviteCode.uses → InviteCode.useCount (5 instances) - Remove non-existent savedFamily variable from registration response - Fix admin panel TypeScript errors: SimpleMDE toolbar type, PieChart label type ## User Experience Improvements - Auto-uppercase invite code and share code inputs - Visual feedback for case conversion with helper text - Improved form validation with error codes ## CI/CD Pipeline - Create comprehensive production deployment checklist (PRODUCTION_DEPLOYMENT_CHECKLIST.md) - Add automated pre-deployment check script (pre-deploy-check.sh) - Validates frontend, backend, and admin panel builds - Checks git status, branch, and sync state - Verifies environment files and migrations - Add quick start deployment guide (DEPLOYMENT_QUICK_START.md) - Add production deployment automation template (deploy-production.sh) ## Cleanup - Remove outdated push notifications documentation files - Remove outdated PWA implementation plan 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
745
PRODUCTION_DEPLOYMENT_CHECKLIST.md
Normal file
745
PRODUCTION_DEPLOYMENT_CHECKLIST.md
Normal file
@@ -0,0 +1,745 @@
|
||||
# Production Deployment Checklist & CI/CD Pipeline
|
||||
|
||||
**Project**: Maternal App (ParentFlow)
|
||||
**Last Updated**: October 9, 2025
|
||||
**Environment**: Development → Production
|
||||
|
||||
---
|
||||
|
||||
## Table of Contents
|
||||
1. [Pre-Deployment Checklist](#pre-deployment-checklist)
|
||||
2. [Development Server Steps](#development-server-steps)
|
||||
3. [Production Server Steps](#production-server-steps)
|
||||
4. [Database Sync Strategy](#database-sync-strategy)
|
||||
5. [Deployment Automation Scripts](#deployment-automation-scripts)
|
||||
6. [Rollback Procedure](#rollback-procedure)
|
||||
7. [Post-Deployment Verification](#post-deployment-verification)
|
||||
|
||||
---
|
||||
|
||||
## Pre-Deployment Checklist
|
||||
|
||||
### ✅ Code Quality & Testing
|
||||
|
||||
- [ ] All TypeScript compilation errors resolved
|
||||
- [ ] All ESLint warnings resolved
|
||||
- [ ] Frontend production build succeeds (`npm run build` in maternal-web)
|
||||
- [ ] Backend production build succeeds (`npm run build` in maternal-app-backend)
|
||||
- [ ] Admin panel production build succeeds (`npm run build` in parentflow-admin)
|
||||
- [ ] All unit tests pass
|
||||
- [ ] Critical user flows manually tested
|
||||
- [ ] No console errors in browser
|
||||
- [ ] API endpoints tested with Postman/curl
|
||||
|
||||
### ✅ Database
|
||||
|
||||
- [ ] All migrations created and tested locally
|
||||
- [ ] Database schema documented
|
||||
- [ ] Backup of production database created
|
||||
- [ ] Migration rollback scripts ready
|
||||
- [ ] Seed data scripts updated (if needed)
|
||||
|
||||
### ✅ Configuration
|
||||
|
||||
- [ ] Environment variables reviewed (`.env.production`)
|
||||
- [ ] API URLs point to production endpoints
|
||||
- [ ] Database connection strings verified
|
||||
- [ ] Redis/cache configuration verified
|
||||
- [ ] Email service configuration verified
|
||||
- [ ] File upload paths/S3 buckets verified
|
||||
- [ ] SSL certificates valid and not expiring soon
|
||||
|
||||
### ✅ Security
|
||||
|
||||
- [ ] No sensitive data in git history
|
||||
- [ ] No API keys in source code
|
||||
- [ ] Rate limiting configured
|
||||
- [ ] CORS settings reviewed
|
||||
- [ ] CSP headers configured
|
||||
- [ ] Authentication flows tested
|
||||
- [ ] Permission checks verified
|
||||
|
||||
### ✅ Performance
|
||||
|
||||
- [ ] Images optimized
|
||||
- [ ] Code splitting implemented
|
||||
- [ ] Lazy loading configured
|
||||
- [ ] Database indexes reviewed
|
||||
- [ ] Cache strategy implemented
|
||||
- [ ] CDN configured (if applicable)
|
||||
|
||||
---
|
||||
|
||||
## Development Server Steps
|
||||
|
||||
**Location**: `/root/maternal-app/` on development server
|
||||
|
||||
### Step 1: Clean Production Build (Frontend)
|
||||
|
||||
```bash
|
||||
cd /root/maternal-app/maternal-web
|
||||
|
||||
# Clean previous builds
|
||||
rm -rf .next
|
||||
rm -rf node_modules/.cache
|
||||
|
||||
# Production build
|
||||
npm run build
|
||||
|
||||
# Check for errors
|
||||
# Expected: "✓ Compiled successfully" message
|
||||
# Expected: No TypeScript or ESLint errors
|
||||
```
|
||||
|
||||
**Expected Output**:
|
||||
```
|
||||
✓ Compiled successfully
|
||||
✓ Generating static pages (39/39)
|
||||
Route (app) Size First Load JS
|
||||
...
|
||||
```
|
||||
|
||||
### Step 2: Production Build (Backend)
|
||||
|
||||
```bash
|
||||
cd /root/maternal-app/maternal-app/maternal-app-backend
|
||||
|
||||
# Clean build directory
|
||||
rm -rf dist
|
||||
|
||||
# Production build
|
||||
npm run build
|
||||
|
||||
# Check for errors
|
||||
# Expected: "Successfully compiled X files" message
|
||||
```
|
||||
|
||||
**Expected Output**:
|
||||
```
|
||||
Successfully compiled XX files with swc
|
||||
```
|
||||
|
||||
### Step 2.5: Production Build (Admin Panel)
|
||||
|
||||
```bash
|
||||
cd /root/maternal-app/parentflow-admin
|
||||
|
||||
# Clean previous builds
|
||||
rm -rf .next
|
||||
rm -rf node_modules/.cache
|
||||
|
||||
# Production build
|
||||
npm run build
|
||||
|
||||
# Check for errors
|
||||
# Expected: "✓ Compiled successfully" message
|
||||
```
|
||||
|
||||
**Expected Output**:
|
||||
```
|
||||
✓ Compiled successfully
|
||||
✓ Generating static pages (13/13)
|
||||
Route (app) Size First Load JS
|
||||
...
|
||||
```
|
||||
|
||||
### Step 3: Fix Any Build Errors
|
||||
|
||||
If errors occur:
|
||||
1. **TypeScript errors**: Fix type issues, missing imports
|
||||
2. **Dependency errors**: Run `npm install`
|
||||
3. **Environment errors**: Check `.env` files
|
||||
|
||||
**Common Issues**:
|
||||
- Missing `@types/*` packages
|
||||
- Incorrect import paths
|
||||
- Environment variable references
|
||||
- Missing database entities/columns
|
||||
|
||||
### Step 4: Database Migration Dry Run
|
||||
|
||||
```bash
|
||||
cd /root/maternal-app/maternal-app/maternal-app-backend
|
||||
|
||||
# Check pending migrations
|
||||
npm run migration:show
|
||||
|
||||
# Generate SQL for review (don't run yet)
|
||||
npm run migration:generate -- -n ReviewChanges
|
||||
|
||||
# Review generated migration file in src/database/migrations/
|
||||
```
|
||||
|
||||
### Step 5: Commit to Git
|
||||
|
||||
```bash
|
||||
cd /root/maternal-app
|
||||
|
||||
# Review changes
|
||||
git status
|
||||
git diff
|
||||
|
||||
# Stage changes
|
||||
git add .
|
||||
|
||||
# Commit with descriptive message
|
||||
git commit -m "feat: [Description of features/fixes]
|
||||
|
||||
- Feature 1 description
|
||||
- Feature 2 description
|
||||
- Bug fixes
|
||||
- Database migrations: [List migration files]
|
||||
|
||||
Deployment: Ready for production"
|
||||
|
||||
# Push to repository
|
||||
git push origin main
|
||||
```
|
||||
|
||||
### Step 6: Tag Release
|
||||
|
||||
```bash
|
||||
# Create version tag
|
||||
git tag -a v1.x.x -m "Release v1.x.x - [Brief description]"
|
||||
git push origin v1.x.x
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Production Server Steps
|
||||
|
||||
**Location**: Production server
|
||||
|
||||
### Step 1: Backup Current State
|
||||
|
||||
```bash
|
||||
# Backup database
|
||||
pg_dump -U postgres -d parentflowprod -F c -f /backup/parentflowprod_$(date +%Y%m%d_%H%M%S).dump
|
||||
|
||||
# Backup application directory
|
||||
tar -czf /backup/maternal-app_$(date +%Y%m%d_%H%M%S).tar.gz /var/www/maternal-app
|
||||
|
||||
# Verify backups
|
||||
ls -lh /backup/
|
||||
```
|
||||
|
||||
### Step 2: Pull Latest Code
|
||||
|
||||
```bash
|
||||
cd /var/www/maternal-app
|
||||
|
||||
# Stash any local changes (shouldn't be any)
|
||||
git stash
|
||||
|
||||
# Pull latest code
|
||||
git fetch origin
|
||||
git pull origin main
|
||||
|
||||
# Or checkout specific tag
|
||||
# git checkout v1.x.x
|
||||
|
||||
# Verify correct version
|
||||
git log -1 --oneline
|
||||
```
|
||||
|
||||
### Step 3: Install Dependencies
|
||||
|
||||
```bash
|
||||
# Frontend
|
||||
cd /var/www/maternal-app/maternal-web
|
||||
npm ci --production
|
||||
|
||||
# Backend
|
||||
cd /var/www/maternal-app/maternal-app/maternal-app-backend
|
||||
npm ci --production
|
||||
```
|
||||
|
||||
### Step 4: Run Database Migrations
|
||||
|
||||
```bash
|
||||
cd /var/www/maternal-app/maternal-app/maternal-app-backend
|
||||
|
||||
# Check pending migrations
|
||||
npm run migration:show
|
||||
|
||||
# Run migrations
|
||||
npm run migration:run
|
||||
|
||||
# Verify migrations applied
|
||||
npm run migration:show
|
||||
```
|
||||
|
||||
### Step 5: Build Applications
|
||||
|
||||
```bash
|
||||
# Build frontend
|
||||
cd /var/www/maternal-app/maternal-web
|
||||
npm run build
|
||||
|
||||
# Build backend
|
||||
cd /var/www/maternal-app/maternal-app/maternal-app-backend
|
||||
npm run build
|
||||
```
|
||||
|
||||
### Step 6: Restart Services
|
||||
|
||||
```bash
|
||||
# Restart backend (PM2)
|
||||
pm2 restart maternal-app-backend
|
||||
|
||||
# Restart frontend (PM2)
|
||||
pm2 restart maternal-web
|
||||
|
||||
# Or restart all
|
||||
pm2 restart all
|
||||
|
||||
# Check status
|
||||
pm2 status
|
||||
pm2 logs --lines 50
|
||||
```
|
||||
|
||||
### Step 7: Clear Caches
|
||||
|
||||
```bash
|
||||
# Clear Redis cache
|
||||
redis-cli FLUSHDB
|
||||
|
||||
# Clear Next.js cache (if needed)
|
||||
cd /var/www/maternal-app/maternal-web
|
||||
rm -rf .next/cache
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Database Sync Strategy
|
||||
|
||||
### Database Comparison Script
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# File: scripts/compare-databases.sh
|
||||
|
||||
DEV_DB="parentflowdev"
|
||||
PROD_DB="parentflowprod"
|
||||
DEV_HOST="10.0.0.207"
|
||||
PROD_HOST="production-db-host"
|
||||
|
||||
echo "Comparing database schemas..."
|
||||
|
||||
# Export schemas
|
||||
pg_dump -h $DEV_HOST -U postgres -d $DEV_DB --schema-only > /tmp/dev_schema.sql
|
||||
pg_dump -h $PROD_HOST -U postgres -d $PROD_DB --schema-only > /tmp/prod_schema.sql
|
||||
|
||||
# Compare
|
||||
diff /tmp/dev_schema.sql /tmp/prod_schema.sql > /tmp/schema_diff.txt
|
||||
|
||||
if [ -s /tmp/schema_diff.txt ]; then
|
||||
echo "⚠️ Schemas differ! Review /tmp/schema_diff.txt"
|
||||
cat /tmp/schema_diff.txt
|
||||
else
|
||||
echo "✅ Schemas are identical"
|
||||
fi
|
||||
```
|
||||
|
||||
### Migration Workflow
|
||||
|
||||
**Development → Production**:
|
||||
|
||||
1. **Create Migration** (Dev):
|
||||
```bash
|
||||
npm run migration:generate -- -n DescriptiveName
|
||||
```
|
||||
|
||||
2. **Test Migration** (Dev):
|
||||
```bash
|
||||
npm run migration:run
|
||||
npm run migration:revert # Test rollback
|
||||
npm run migration:run # Re-apply
|
||||
```
|
||||
|
||||
3. **Commit Migration** (Dev):
|
||||
```bash
|
||||
git add src/database/migrations/*
|
||||
git commit -m "feat: Add [description] migration"
|
||||
```
|
||||
|
||||
4. **Apply to Production** (Prod):
|
||||
```bash
|
||||
git pull origin main
|
||||
npm run migration:run
|
||||
```
|
||||
|
||||
### Manual Database Sync
|
||||
|
||||
If migrations are out of sync:
|
||||
|
||||
```sql
|
||||
-- Check migration history
|
||||
SELECT * FROM migrations ORDER BY executed_at DESC LIMIT 10;
|
||||
|
||||
-- Compare tables
|
||||
SELECT table_name
|
||||
FROM information_schema.tables
|
||||
WHERE table_schema = 'public'
|
||||
ORDER BY table_name;
|
||||
|
||||
-- Compare columns for specific table
|
||||
SELECT column_name, data_type, is_nullable
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'users'
|
||||
ORDER BY ordinal_position;
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Deployment Automation Scripts
|
||||
|
||||
### Auto-Deploy Script (Production Server)
|
||||
|
||||
Create: `/var/www/maternal-app/deploy.sh`
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -e # Exit on error
|
||||
|
||||
echo "======================================"
|
||||
echo "🚀 Starting Production Deployment"
|
||||
echo "======================================"
|
||||
|
||||
# Configuration
|
||||
APP_DIR="/var/www/maternal-app"
|
||||
BACKUP_DIR="/backup"
|
||||
BRANCH="main"
|
||||
LOG_FILE="/var/log/maternal-app-deploy-$(date +%Y%m%d_%H%M%S).log"
|
||||
|
||||
# Redirect output to log
|
||||
exec 1> >(tee -a "$LOG_FILE")
|
||||
exec 2>&1
|
||||
|
||||
echo "[$(date)] Deployment started"
|
||||
|
||||
# Step 1: Backup
|
||||
echo "📦 Creating backup..."
|
||||
pg_dump -U postgres -d parentflowprod -F c -f "$BACKUP_DIR/parentflowprod_$(date +%Y%m%d_%H%M%S).dump"
|
||||
tar -czf "$BACKUP_DIR/maternal-app_$(date +%Y%m%d_%H%M%S).tar.gz" "$APP_DIR" --exclude node_modules --exclude .next --exclude dist
|
||||
echo "✅ Backup complete"
|
||||
|
||||
# Step 2: Pull code
|
||||
echo "📥 Pulling latest code..."
|
||||
cd "$APP_DIR"
|
||||
git stash
|
||||
git fetch origin
|
||||
git pull origin "$BRANCH"
|
||||
COMMIT=$(git log -1 --oneline)
|
||||
echo "✅ Updated to: $COMMIT"
|
||||
|
||||
# Step 3: Install dependencies
|
||||
echo "📦 Installing dependencies..."
|
||||
cd "$APP_DIR/maternal-web"
|
||||
npm ci --production
|
||||
cd "$APP_DIR/maternal-app/maternal-app-backend"
|
||||
npm ci --production
|
||||
echo "✅ Dependencies installed"
|
||||
|
||||
# Step 4: Run migrations
|
||||
echo "🗄️ Running database migrations..."
|
||||
cd "$APP_DIR/maternal-app/maternal-app-backend"
|
||||
npm run migration:run
|
||||
echo "✅ Migrations complete"
|
||||
|
||||
# Step 5: Build applications
|
||||
echo "🔨 Building applications..."
|
||||
cd "$APP_DIR/maternal-web"
|
||||
npm run build
|
||||
cd "$APP_DIR/maternal-app/maternal-app-backend"
|
||||
npm run build
|
||||
echo "✅ Build complete"
|
||||
|
||||
# Step 6: Restart services
|
||||
echo "🔄 Restarting services..."
|
||||
pm2 restart all
|
||||
pm2 save
|
||||
echo "✅ Services restarted"
|
||||
|
||||
# Step 7: Health check
|
||||
echo "🏥 Running health checks..."
|
||||
sleep 5
|
||||
BACKEND_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3020/api/v1/health || echo "000")
|
||||
FRONTEND_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3030 || echo "000")
|
||||
|
||||
if [ "$BACKEND_STATUS" = "200" ] && [ "$FRONTEND_STATUS" = "200" ]; then
|
||||
echo "✅ Health checks passed"
|
||||
echo "[$(date)] Deployment successful!"
|
||||
echo "======================================"
|
||||
echo "🎉 Deployment Complete"
|
||||
echo "======================================"
|
||||
else
|
||||
echo "❌ Health checks failed! Backend: $BACKEND_STATUS, Frontend: $FRONTEND_STATUS"
|
||||
echo "⚠️ Consider rollback if issues persist"
|
||||
fi
|
||||
|
||||
# Send notification (optional)
|
||||
# curl -X POST https://your-webhook-url -d "Deployment complete: $COMMIT"
|
||||
```
|
||||
|
||||
Make executable:
|
||||
```bash
|
||||
chmod +x /var/www/maternal-app/deploy.sh
|
||||
```
|
||||
|
||||
Usage:
|
||||
```bash
|
||||
/var/www/maternal-app/deploy.sh
|
||||
```
|
||||
|
||||
### Pre-Deploy Check Script (Development Server)
|
||||
|
||||
Create: `/root/maternal-app/pre-deploy-check.sh`
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
echo "======================================"
|
||||
echo "🔍 Pre-Deployment Checks"
|
||||
echo "======================================"
|
||||
|
||||
ERRORS=0
|
||||
|
||||
# Check 1: Frontend build
|
||||
echo "Checking frontend build..."
|
||||
cd /root/maternal-app/maternal-web
|
||||
if npm run build; then
|
||||
echo "✅ Frontend build successful"
|
||||
else
|
||||
echo "❌ Frontend build failed"
|
||||
ERRORS=$((ERRORS + 1))
|
||||
fi
|
||||
|
||||
# Check 2: Backend build
|
||||
echo "Checking backend build..."
|
||||
cd /root/maternal-app/maternal-app/maternal-app-backend
|
||||
if npm run build; then
|
||||
echo "✅ Backend build successful"
|
||||
else
|
||||
echo "❌ Backend build failed"
|
||||
ERRORS=$((ERRORS + 1))
|
||||
fi
|
||||
|
||||
# Check 3: Uncommitted changes
|
||||
echo "Checking for uncommitted changes..."
|
||||
cd /root/maternal-app
|
||||
if [ -z "$(git status --porcelain)" ]; then
|
||||
echo "✅ No uncommitted changes"
|
||||
else
|
||||
echo "⚠️ Uncommitted changes detected:"
|
||||
git status --short
|
||||
fi
|
||||
|
||||
# Check 4: Pending migrations
|
||||
echo "Checking for pending migrations..."
|
||||
cd /root/maternal-app/maternal-app/maternal-app-backend
|
||||
PENDING=$(npm run migration:show 2>&1 | grep "pending" | wc -l)
|
||||
if [ "$PENDING" -gt 0 ]; then
|
||||
echo "⚠️ $PENDING pending migrations found"
|
||||
else
|
||||
echo "✅ No pending migrations"
|
||||
fi
|
||||
|
||||
# Summary
|
||||
echo "======================================"
|
||||
if [ $ERRORS -eq 0 ]; then
|
||||
echo "✅ All checks passed! Ready to deploy."
|
||||
echo "Next steps:"
|
||||
echo " 1. git add ."
|
||||
echo " 2. git commit -m 'your message'"
|
||||
echo " 3. git push origin main"
|
||||
echo " 4. Run deploy.sh on production server"
|
||||
else
|
||||
echo "❌ $ERRORS check(s) failed. Fix issues before deploying."
|
||||
exit 1
|
||||
fi
|
||||
echo "======================================"
|
||||
```
|
||||
|
||||
Make executable:
|
||||
```bash
|
||||
chmod +x /root/maternal-app/pre-deploy-check.sh
|
||||
```
|
||||
|
||||
Usage:
|
||||
```bash
|
||||
cd /root/maternal-app
|
||||
./pre-deploy-check.sh
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Rollback Procedure
|
||||
|
||||
### Quick Rollback (if deployment fails)
|
||||
|
||||
```bash
|
||||
# 1. Restore previous code
|
||||
cd /var/www/maternal-app
|
||||
git log -5 --oneline # Find previous commit
|
||||
git reset --hard <previous-commit-hash>
|
||||
|
||||
# 2. Restore database (if migrations ran)
|
||||
pg_restore -U postgres -d parentflowprod -c /backup/parentflowprod_YYYYMMDD_HHMMSS.dump
|
||||
|
||||
# 3. Rebuild
|
||||
cd /var/www/maternal-app/maternal-web && npm run build
|
||||
cd /var/www/maternal-app/maternal-app/maternal-app-backend && npm run build
|
||||
|
||||
# 4. Restart services
|
||||
pm2 restart all
|
||||
```
|
||||
|
||||
### Migration Rollback
|
||||
|
||||
```bash
|
||||
cd /var/www/maternal-app/maternal-app/maternal-app-backend
|
||||
|
||||
# Rollback last migration
|
||||
npm run migration:revert
|
||||
|
||||
# Rollback multiple migrations
|
||||
npm run migration:revert # Repeat N times
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Post-Deployment Verification
|
||||
|
||||
### Checklist
|
||||
|
||||
- [ ] Application accessible at production URL
|
||||
- [ ] Login functionality works
|
||||
- [ ] API endpoints responding
|
||||
- [ ] Database queries working
|
||||
- [ ] File uploads working
|
||||
- [ ] Email sending working
|
||||
- [ ] WebSocket connections working
|
||||
- [ ] No JavaScript errors in console
|
||||
- [ ] PM2 processes healthy (`pm2 status`)
|
||||
- [ ] Database connections stable
|
||||
- [ ] SSL certificate valid
|
||||
- [ ] Logs clean (no critical errors)
|
||||
|
||||
### Health Check Commands
|
||||
|
||||
```bash
|
||||
# Backend health
|
||||
curl https://api.maternal.noru1.ro/api/v1/health
|
||||
|
||||
# Frontend accessibility
|
||||
curl https://maternal.noru1.ro
|
||||
|
||||
# Check PM2 status
|
||||
pm2 status
|
||||
pm2 logs --lines 100
|
||||
|
||||
# Check database connections
|
||||
psql -U postgres -d parentflowprod -c "SELECT COUNT(*) FROM users;"
|
||||
|
||||
# Monitor logs
|
||||
tail -f /var/log/maternal-app/*.log
|
||||
pm2 logs --lines 100 --raw
|
||||
```
|
||||
|
||||
### Monitoring
|
||||
|
||||
```bash
|
||||
# CPU/Memory usage
|
||||
pm2 monit
|
||||
|
||||
# Database size
|
||||
psql -U postgres -c "SELECT pg_size_pretty(pg_database_size('parentflowprod'));"
|
||||
|
||||
# Active connections
|
||||
psql -U postgres -d parentflowprod -c "SELECT count(*) FROM pg_stat_activity;"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Deployment Frequency
|
||||
|
||||
**Recommended Schedule**:
|
||||
- **Hotfixes**: As needed (critical bugs)
|
||||
- **Minor Updates**: Weekly (Friday afternoons)
|
||||
- **Major Releases**: Bi-weekly or monthly
|
||||
- **Database Migrations**: Bundle with releases
|
||||
|
||||
**Best Practices**:
|
||||
- Deploy during low-traffic hours
|
||||
- Have team member available for 1 hour post-deployment
|
||||
- Test in staging environment first (if available)
|
||||
- Communicate deployment to users (if user-facing changes)
|
||||
|
||||
---
|
||||
|
||||
## Environment Variables
|
||||
|
||||
### Development (.env.local)
|
||||
```env
|
||||
DATABASE_HOST=10.0.0.207
|
||||
DATABASE_NAME=parentflowdev
|
||||
NODE_ENV=development
|
||||
API_URL=http://localhost:3020
|
||||
```
|
||||
|
||||
### Production (.env.production)
|
||||
```env
|
||||
DATABASE_HOST=production-db-host
|
||||
DATABASE_NAME=parentflowprod
|
||||
NODE_ENV=production
|
||||
API_URL=https://api.maternal.noru1.ro
|
||||
```
|
||||
|
||||
**Security Note**: Never commit `.env` files to git!
|
||||
|
||||
---
|
||||
|
||||
## Emergency Contacts
|
||||
|
||||
- **Developer**: [Your contact]
|
||||
- **DevOps**: [DevOps contact]
|
||||
- **Database Admin**: [DBA contact]
|
||||
- **Server Access**: [Server details]
|
||||
|
||||
---
|
||||
|
||||
## Changelog Template
|
||||
|
||||
```markdown
|
||||
# Release v1.x.x - YYYY-MM-DD
|
||||
|
||||
## New Features
|
||||
- Feature 1
|
||||
- Feature 2
|
||||
|
||||
## Improvements
|
||||
- Improvement 1
|
||||
- Improvement 2
|
||||
|
||||
## Bug Fixes
|
||||
- Fix 1
|
||||
- Fix 2
|
||||
|
||||
## Database Changes
|
||||
- Migration 1: Description
|
||||
- Migration 2: Description
|
||||
|
||||
## Breaking Changes
|
||||
- None / List breaking changes
|
||||
|
||||
## Deployment Notes
|
||||
- Special instructions if any
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: October 9, 2025
|
||||
**Version**: 1.0
|
||||
**Maintained By**: Development Team
|
||||
Reference in New Issue
Block a user