Documentation
Getting Started
Documentation Index Installation Details Quickstart
Architecture
Alert Geometry Coverage Data Flow Sequences Design Standards Display System Architecture Eas Decoding Summary Eas Monitor V3 Architecture Sdr Service Architecture System Architecture Theory Of Operation
Development
Agents Certification Reliability Plan Component Library Contributing Fcc Part11 Compliance Matrix Javascript Api Releasing Sdr Frequency Validation User Interface Guide
Hardware
Alpha Led Guide Argon40 Zigbee Setup Gpio Guide Gps Hat Setup Hwsetup Helper Neopixel Led Control Sdr Setup Serial To Ethernet Adapters Vfd Display Setup Waveshare Rs232 Wifi Setup
Guides
Alert Signals Analytics And Reporting Api Key Management Application Settings Audio Monitoring Audit Log Review Database Backups Disk Space Cleanup Eas Config Tool Eas Test Signal Pipeline Hardware Quickstart Health Monitoring Help Https Setup Icecast Streaming Setup Ipaws Feed Integration Local Authorities Local Mail Server Manual Eas Events Mfa Totp Setup Notifications One Button Upgrade Setup Instructions Smart Setup Ssl Web Ui Guide Tailscale Setup Tts Normalization
Troubleshooting
Audio Sdr Fix Tool Firewall Requirements Polling Not Working Sdr Master Troubleshooting Guide Troubleshooting 504 Timeout Tts Troubleshooting
Security
Audit Log Integrity Security
Reference
About Alpha M Protocol Changelog Dependency Attribution Diagrams Ecig Cap To Eas Implementation Guide V1 0 Fips Data Sources Mdc1200 Nrsc4B Same Standard Nws Alert Parameters Nws Zone Catalog Ohio Eas Documentation Overview Protocols Overview Rbds Standard Repository Statistics Sage Endec Same Vtec Event Linking
Policies
Privacy Policy Sms Messaging Terms Of Use Trademark Policy

Troubleshooting 502/504 Gateway Errors

Quick Diagnostic

If you're seeing 502 or 504 errors, run this diagnostic script first:

sudo bash /opt/eas-station/scripts/diagnose_502_504.sh

This will check all common causes and tell you exactly what's wrong.

Problem Description

502 Bad Gateway

The web service is not responding at all. This means:

  • Gunicorn workers are crashing on startup, OR
  • Workers cannot be reached by nginx, OR
  • Workers fail to import app.py

504 Gateway Timeout

The web service starts but takes too long to respond. This means:

  • Database initialization is hanging, OR
  • Workers are stuck during startup, OR
  • First request triggers long-running operation

Common Causes (In Order of Likelihood)

1. App Import Failure (MOST COMMON for immediate 502)

Symptom: Service fails immediately after installing SoapySDR or other system Python packages

Root Cause: The venv is created with --system-site-packages, which allows system packages (python3-numpy, python3-scipy, python3-soapysdr) to be visible inside the venv. These system packages have C extensions that may conflict with gevent's greenlet C extensions, causing immediate segfaults or import errors.

Check:

# Run the gevent compatibility check
/opt/eas-station/venv/bin/python3 /opt/eas-station/scripts/check_gevent_compat.py

Look for warnings about numpy loaded from /usr/lib or /usr/local/lib.

Fix - Reinstall Conflicting Packages in Venv:

cd /opt/eas-station
source venv/bin/activate

# Force reinstall gevent and greenlet to rebuild C extensions
pip install --force-reinstall 'gevent>=25.9.1' greenlet

# If numpy conflict detected, reinstall in venv to override system version
pip install --force-reinstall numpy

# Reinstall any other packages showing conflicts
pip install --force-reinstall scipy

deactivate
sudo systemctl restart eas-station-web.service

Alternative Fix - Rebuild Venv Without System Packages (more drastic):

# Backup current requirements
pip freeze > /tmp/eas-requirements-backup.txt

# Remove old venv
sudo rm -rf /opt/eas-station/venv

# Create new venv WITHOUT system packages
sudo -u eas-station python3 -m venv /opt/eas-station/venv

# Reinstall packages
cd /opt/eas-station
source venv/bin/activate
pip install -r requirements.txt
deactivate

# Restart services
sudo systemctl restart eas-station.target

Note: The SDR service needs SoapySDR from system packages, but the web service does NOT. Future versions may use separate venvs for each service.

2. Missing Dependencies

Check:

/opt/eas-station/venv/bin/python3 /opt/eas-station/scripts/check_dependencies.py

Specific Check for gevent (REQUIRED for WebSockets):

/opt/eas-station/venv/bin/python3 -c "import gevent; print('gevent version:', gevent.__version__)"

If this fails with ModuleNotFoundError: No module named 'gevent', install it:

cd /opt/eas-station
source venv/bin/activate
pip install 'gevent>=25.9.1'
deactivate
sudo systemctl restart eas-station-web.service

Fix All Missing Dependencies:

cd /opt/eas-station
source venv/bin/activate
pip install -r requirements.txt
deactivate
sudo systemctl restart eas-station-web.service

3. Permission Issues

Symptom: Service starts but worker crashes during initialization

Check Permissions:

# Check if venv is owned by correct user
ls -la /opt/eas-station/venv

# Check if log directory exists and has correct permissions
ls -ld /var/log/eas-station

# Check if project directory has correct permissions
ls -ld /opt/eas-station

Fix Permissions:

# Fix project directory ownership
sudo chown -R eas-station:eas-station /opt/eas-station

# Create and fix log directory
sudo mkdir -p /var/log/eas-station
sudo chown eas-station:eas-station /var/log/eas-station
sudo chmod 755 /var/log/eas-station

# Restart service
sudo systemctl restart eas-station-web.service

4. Database Connection Issues

Symptom: Service starts but hangs during database initialization

Check Database:

# Check if PostgreSQL is running
sudo systemctl status postgresql

# Test database connection
sudo -u eas-station psql -d eas_station -c "SELECT version();"

Fix Database:

# Start PostgreSQL if not running
sudo systemctl start postgresql
sudo systemctl enable postgresql

# Verify database exists
sudo -u postgres psql -l | grep eas_station

# If database doesn't exist, create it
sudo -u postgres createdb eas_station
sudo -u postgres psql -d eas_station -c "CREATE EXTENSION IF NOT EXISTS postgis;"

# Restart web service
sudo systemctl restart eas-station-web.service

5. Database Initialization Timeout

Symptom: Service times out after 90-300 seconds

Check Timeout Settings:

grep TimeoutStartSec /etc/systemd/system/eas-station-web.service

Should show TimeoutStartSec=300 (5 minutes). If it shows less, the service file needs updating.

Fix: Update service file and reload:

sudo systemctl daemon-reload
sudo systemctl restart eas-station-web.service

6. Port Already in Use

Symptom: Service fails with "Address already in use"

Check:

sudo netstat -tlnp | grep :5000
# or
sudo lsof -i :5000

Fix:

# Kill process using port 5000
sudo kill <PID>

# Or if it's an old gunicorn process
sudo pkill -f gunicorn

# Restart service
sudo systemctl restart eas-station-web.service

Diagnostic Commands

View Recent Service Logs

# Last 50 lines
sudo journalctl -u eas-station-web.service -n 50

# Follow logs in real-time
sudo journalctl -u eas-station-web.service -f

# Logs since last boot
sudo journalctl -u eas-station-web.service -b

Check Service Status

sudo systemctl status eas-station-web.service

Test Manual Startup

# Stop the service
sudo systemctl stop eas-station-web.service

# Try running gunicorn manually as the service user
sudo -u eas-station bash -c '
cd /opt/eas-station
source venv/bin/activate
export $(cat .env | grep -v "^#" | xargs)
gunicorn --bind 0.0.0.0:5000 --workers 2 --timeout 300 --worker-class gevent --log-level debug app:app
'

This will show detailed error messages that might not appear in the systemd journal.

Check Python Import

# Test if app.py imports successfully
cd /opt/eas-station
/opt/eas-station/venv/bin/python3 -c "from app import app; print('✓ Import successful')"

Quick Fix Checklist

Run these commands in order:

# 1. Check dependencies
/opt/eas-station/venv/bin/python3 /opt/eas-station/scripts/check_dependencies.py

# 2. Fix permissions
sudo chown -R eas-station:eas-station /opt/eas-station
sudo mkdir -p /var/log/eas-station
sudo chown eas-station:eas-station /var/log/eas-station

# 3. Verify database is running
sudo systemctl status postgresql

# 4. Reload systemd and restart service
sudo systemctl daemon-reload
sudo systemctl restart eas-station-web.service

# 5. Check if it worked
sudo systemctl status eas-station-web.service

Still Not Working?

If the service still fails after trying the above:

  1. Collect full diagnostic information:
# Save this output to share with support
{
  echo "=== Service Status ==="
  sudo systemctl status eas-station-web.service
  
  echo -e "\n=== Recent Logs ==="
  sudo journalctl -u eas-station-web.service -n 100 --no-pager
  
  echo -e "\n=== Dependency Check ==="
  /opt/eas-station/venv/bin/python3 /opt/eas-station/scripts/check_dependencies.py
  
  echo -e "\n=== Database Status ==="
  sudo systemctl status postgresql
  
  echo -e "\n=== Port 5000 Status ==="
  sudo netstat -tlnp | grep :5000
  
  echo -e "\n=== Permissions ==="
  ls -la /opt/eas-station/ | head -20
  ls -ld /var/log/eas-station
} > ~/eas-station-diagnostics.txt

cat ~/eas-station-diagnostics.txt
  1. Review the diagnostic output for obvious issues

  2. Try manual startup (see "Test Manual Startup" above) to see detailed errors

  3. Check for recent changes:

    • Did you recently update the system or Python?
    • Did you modify the .env file?
    • Did you run any database migrations?

Prevention

To prevent this issue in the future:

  1. Always test after updates:
sudo ./update.sh
sudo systemctl status eas-station-web.service
  1. Monitor service health:
# Add to cron to check hourly
0 * * * * systemctl is-active --quiet eas-station-web.service || systemctl restart eas-station-web.service
  1. Keep dependencies updated:
cd /opt/eas-station
source venv/bin/activate
pip install --upgrade -r requirements.txt
deactivate

This document is served from docs/troubleshooting/TROUBLESHOOTING_504_TIMEOUT.md in the EAS Station™ installation.