2.4 KiB
2.4 KiB
Coolify & PostgreSQL Deployment Guide
This application consists of:
- Server Side: Node.js + Express backend (
server.ts) serving REST APIs, managing authentication, ledger reconciliation, audit logs, FX rates, and financial reports. - Database: PostgreSQL (via
pgconnection pool) with automatic JSON fall-back backup. - Frontend: React SPA served directly via Express in production.
1. Quick Coolify Deployment Options
Option A: Docker Compose Deployment (Application + PostgreSQL in One Stack)
- In Coolify Dashboard:
- Click + Add Resource -> Docker Compose.
- Point to your Git Repository or paste the contents of
docker-compose.yml.
- Environment Variables:
Add the following in Coolify:
NODE_ENV=production PORT=3000 POSTGRES_PASSWORD=your_custom_secure_password - Deploy:
- Coolify will build the app container and spin up a dedicated
postgres:16-alpinedatabase container with health checks and persistent volume storage (balance_sheet_postgres_data).
- Coolify will build the app container and spin up a dedicated
Option B: Coolify Managed PostgreSQL + Standalone App Container
If you prefer using Coolify's built-in managed PostgreSQL database resource:
- Create Database in Coolify:
- Click + Add Resource -> PostgreSQL.
- Coolify will provide an internal database connection URL (e.g.,
postgresql://postgres:pass@coolify-postgres-host:5432/balance_sheet_db).
- Deploy App Service:
- Add your Git repo as a Dockerfile application.
- Set environment variable in Coolify UI:
DATABASE_URL=postgresql://postgres:pass@coolify-postgres-host:5432/balance_sheet_db PORT=3000
- Deploy:
- The Express server will automatically connect to the PostgreSQL database, create the necessary table structures on boot, and store all portal state in PostgreSQL.
2. Server-Side Architecture Details
- Automatic Table Creation: On server boot, the backend runs
initPgDatabase()to verify/createapp_portal_state. - Automatic State Recovery: If PostgreSQL contains existing data, the portal state is loaded directly from PostgreSQL. If empty, baseline seed data is written to PostgreSQL.
- Resilient Fallback: If
DATABASE_URLis omitted, the app gracefully operates using persistent JSON storage (/app/data/portal-data.json). - Health Check: Express exposes
GET /api/healthfor Docker container monitoring.