3 KiB
3 KiB
Coolify Deployment & "No Available Server" Troubleshooting Guide
This application consists of:
- Server Side: Node.js + Express backend (
server.ts) serving REST APIs, managing authentication, ledger reconciliation, audit logs, FX rates, SMTP dispatching, and financial reports. - Database: PostgreSQL (via
pgconnection pool) with automatic JSON fallback backup. - Frontend: React SPA served directly via Express in production on port
3000.
🔧 Resolving "No Available Server" in Coolify
If Coolify displays "No available server" or Traefik returns a 503 / 502 error, follow these exact fixes:
1. Fix Health Check Path & IPv4 Resolution (Included in codebase)
- Cause: Alpine Linux
wgetresolveslocalhostto IPv6 (::1), while Node Express binds to IPv4 (0.0.0.0). Whenwgetfails, Docker marks the containerunhealthy, causing Coolify Traefik to drop the container. - Fix: The updated
Dockerfileanddocker-compose.ymluse native Node.js HTTP checks againsthttp://127.0.0.1:3000/api/health:node -e "require('http').get('http://127.0.0.1:3000/api/health', (r) => process.exit(r.statusCode === 200 ? 0 : 1))" - Coolify UI Setting: Under your resource in Coolify -> Health Check:
- Path:
/api/health - Port:
3000
- Path:
2. Configure Exposed Port in Coolify UI
- In Coolify Dashboard:
- Open your deployed application/stack.
- Go to Settings -> Exposed Port (or Port).
- Ensure the port is set to
3000.
🚀 Deployment Methods in Coolify
Option A: Docker Compose Deployment (App + Dedicated PostgreSQL)
- In Coolify Dashboard:
- Click + Add Resource -> Docker Compose.
- Point to your Git Repository or paste
docker-compose.yml.
- Environment Variables:
Add the following in Coolify:
NODE_ENV=production PORT=3000 POSTGRES_PASSWORD=your_custom_secure_password # SMTP Email Settings (Optional) SMTP_HOST=smtp.your-server.com SMTP_PORT=587 SMTP_USER=alerts@networkbank.com SMTP_PASS=your_smtp_password SMTP_FROM="Balance Sheet Portal <noreply@networkbank.com>" SMTP_USE_TLS=true - Health Check Endpoint: Set path to
/api/healthon port3000. - Deploy: Coolify builds the app and provisions
postgres:16-alpine.
Option B: Standalone Application Container (Using Coolify Managed PostgreSQL)
- Create PostgreSQL Resource:
- Click + Add Resource -> PostgreSQL.
- Note the database internal connection string (e.g.
postgresql://postgres:pass@postgres-host:5432/balance_sheet_db).
- Create Dockerfile Application:
- Add Git Repository as a Dockerfile Application.
- Set Environment Variables:
NODE_ENV=production PORT=3000 DATABASE_URL=postgresql://postgres:pass@postgres-host:5432/balance_sheet_db - In Settings -> Exposed Port: Set to
3000. - In Health Check: Set path to
/api/health.
- Deploy: Express connects directly to PostgreSQL and initializes required tables automatically.