# Reference docker-compose for a multi-container app on this Coolify instance. # # Implements EVERY hard rule from docs/AGENTS-coolify-apps.md: # 2.1 App reaches DB by Docker service name (app-db), never localhost. # 2.2 Joins the external 'coolify' network so it can resolve shared services. # 2.3 Does NOT publish 80/443 (owned by coolify-proxy). Traefik routes. # 2.4 FQDN is set in Coolify (https://.urieljareth.org) before deploy. # 2.5 Secrets come as env vars from Coolify. None are baked in here. # 4 Healthcheck on a DB-independent endpoint. # 5 Named volumes for data that must survive redeploys. services: app: build: . environment: DB_HOST: app-db DB_PORT: "5432" DB_NAME: ${DB_NAME} DB_USER: ${DB_USER} DB_PASSWORD: ${DB_PASSWORD} APP_PUBLIC_URL: https://app.urieljareth.org expose: - "8080" healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:8080/health"] interval: 30s timeout: 5s retries: 3 start_period: 20s networks: - coolify depends_on: - app-db app-db: image: postgres:16 environment: POSTGRES_DB: ${DB_NAME} POSTGRES_USER: ${DB_USER} POSTGRES_PASSWORD: ${DB_PASSWORD} volumes: - app-db-data:/var/lib/postgresql/data networks: - coolify volumes: app-db-data: {} networks: coolify: name: coolify external: true