156 lines
5.9 KiB
Bash
156 lines
5.9 KiB
Bash
#!/bin/bash
|
||
|
||
# 502 Error Diagnostic Script
|
||
# Run this on production server to diagnose Bad Gateway issues
|
||
|
||
echo "🔍 LuckyChit 502 Error Diagnostic"
|
||
echo "===================================="
|
||
echo ""
|
||
echo "Checking server status..."
|
||
echo ""
|
||
|
||
# 1. PM2 Status
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "1️⃣ PM2 Process Status"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
pm2 status
|
||
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "2️⃣ Port Listening Check"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
PORTS=$(netstat -tulpn 2>/dev/null | grep -E '(3000|8080)')
|
||
if [ -z "$PORTS" ]; then
|
||
echo "❌ No processes listening on ports 3000 or 8080"
|
||
else
|
||
echo "✅ Ports are listening:"
|
||
echo "$PORTS"
|
||
fi
|
||
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "3️⃣ Backend Health Check (localhost)"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
BACKEND_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/health 2>/dev/null)
|
||
if [ "$BACKEND_RESPONSE" = "200" ]; then
|
||
echo "✅ Backend responding: HTTP $BACKEND_RESPONSE"
|
||
curl -s http://localhost:3000/health | head -n 5
|
||
else
|
||
echo "❌ Backend not responding (HTTP $BACKEND_RESPONSE)"
|
||
fi
|
||
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "4️⃣ Frontend Health Check (localhost)"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
FRONTEND_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:8080 2>/dev/null)
|
||
if [ "$FRONTEND_RESPONSE" = "200" ]; then
|
||
echo "✅ Frontend responding: HTTP $FRONTEND_RESPONSE"
|
||
else
|
||
echo "❌ Frontend not responding (HTTP $FRONTEND_RESPONSE)"
|
||
fi
|
||
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "5️⃣ External Access Check (192.168.8.148)"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
EXTERNAL_BACKEND=$(curl -s -o /dev/null -w "%{http_code}" http://192.168.8.148:3000/health 2>/dev/null)
|
||
if [ "$EXTERNAL_BACKEND" = "200" ]; then
|
||
echo "✅ Backend accessible from IP: HTTP $EXTERNAL_BACKEND"
|
||
else
|
||
echo "❌ Backend not accessible from IP (HTTP $EXTERNAL_BACKEND)"
|
||
fi
|
||
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "6️⃣ Firewall Status"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
UFW_STATUS=$(sudo ufw status 2>/dev/null | grep -E '(3000|8080|80|443)')
|
||
if [ -z "$UFW_STATUS" ]; then
|
||
echo "⚠️ Firewall ports may not be open"
|
||
else
|
||
echo "✅ Firewall rules:"
|
||
echo "$UFW_STATUS"
|
||
fi
|
||
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "7️⃣ Disk Space"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
df -h | grep -E '(Filesystem|/$|/home)'
|
||
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "8️⃣ Memory Usage"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
free -h
|
||
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "9️⃣ PostgreSQL Status"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
POSTGRES_STATUS=$(sudo systemctl is-active postgresql 2>/dev/null)
|
||
if [ "$POSTGRES_STATUS" = "active" ]; then
|
||
echo "✅ PostgreSQL is running"
|
||
else
|
||
echo "❌ PostgreSQL is not running"
|
||
fi
|
||
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "🔟 Recent PM2 Error Logs"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
pm2 logs --err --lines 10 --nostream 2>/dev/null || echo "No recent errors"
|
||
|
||
echo ""
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo "✅ Diagnosis Complete!"
|
||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||
echo ""
|
||
|
||
# Summary and recommendations
|
||
echo "📋 SUMMARY & RECOMMENDATIONS:"
|
||
echo ""
|
||
|
||
# Check PM2 status
|
||
PM2_COUNT=$(pm2 jlist 2>/dev/null | grep -c '"pm2_env"')
|
||
if [ "$PM2_COUNT" -lt 2 ]; then
|
||
echo "⚠️ ISSUE: PM2 processes are missing or down"
|
||
echo " FIX: pm2 restart all OR recreate processes"
|
||
echo ""
|
||
fi
|
||
|
||
# Check ports
|
||
if [ -z "$PORTS" ]; then
|
||
echo "⚠️ ISSUE: No processes listening on required ports"
|
||
echo " FIX: Start PM2 processes"
|
||
echo ""
|
||
fi
|
||
|
||
# Check backend
|
||
if [ "$BACKEND_RESPONSE" != "200" ]; then
|
||
echo "⚠️ ISSUE: Backend not responding"
|
||
echo " FIX: pm2 restart luckychit-api"
|
||
echo " CHECK: pm2 logs luckychit-api"
|
||
echo ""
|
||
fi
|
||
|
||
# Check frontend
|
||
if [ "$FRONTEND_RESPONSE" != "200" ]; then
|
||
echo "⚠️ ISSUE: Frontend not responding"
|
||
echo " FIX: pm2 restart luckychit-frontend"
|
||
echo " CHECK: pm2 logs luckychit-frontend"
|
||
echo ""
|
||
fi
|
||
|
||
# Check PostgreSQL
|
||
if [ "$POSTGRES_STATUS" != "active" ]; then
|
||
echo "⚠️ ISSUE: PostgreSQL is not running"
|
||
echo " FIX: sudo systemctl start postgresql"
|
||
echo ""
|
||
fi
|
||
|
||
echo "📚 For detailed fixes, see: FIX_502_ERROR.md"
|
||
echo ""
|
||
|