# BetterFrame Coolify variant — Coolify's Traefik fronts the stack, so # no host port is published from the compose. Angie still receives traffic # from Traefik on container port 80 (via the betterframe network). # # Point Coolify resource at this file instead of docker-compose.yml. # # Same env / volume overrides as the standard compose: # BF_DATA_VOLUME_NAME default "betterframe-data" # NODERED_DATA_VOLUME_NAME default "nodered-data" # BF_DATA_DIR, BF_SQLITE_PATH, BF_NODERED_URL, BF_SELF_URL, # BF_FIRMWARE_SIGNING_KEY, BF_MQTT_* version: "3.8" services: server: build: context: . dockerfile: deploy/docker/Dockerfile.server args: BF_SERVER_VERSION: ${BF_SERVER_VERSION:-${COOLIFY_GIT_COMMIT:-${SOURCE_COMMIT:-dev}}} container_name: betterframe-server restart: unless-stopped environment: - TZ=UTC - BF_DATA_DIR=/var/lib/betterframe - BF_SQLITE_PATH=/var/lib/betterframe/betterframe.db - BF_NODERED_URL=http://nodered:1880 - BF_SELF_URL=http://server:18080 - BF_SERVER_VERSION=${BF_SERVER_VERSION:-${COOLIFY_GIT_COMMIT:-${SOURCE_COMMIT:-dev}}} # PostgreSQL: set BF_DB=postgres to switch from SQLite. - BF_DB=postgres - BF_PG_URL=${BF_PG_URL:-postgres://${BF_PG_USER:-betterframe}:${BF_PG_PASSWORD:-betterframe}@postgres:5432/${BF_PG_DB:-betterframe}} volumes: - betterframe-data:/var/lib/betterframe expose: - "18080" - "18081" - "18082" depends_on: postgres: condition: service_healthy healthcheck: test: ["CMD-SHELL", "wget -qO- http://localhost:18080/healthz || exit 1"] interval: 30s timeout: 5s retries: 3 start_period: 30s networks: - betterframe angie: build: context: . dockerfile: deploy/docker/Dockerfile.angie container_name: betterframe-angie restart: unless-stopped depends_on: - server - nodered # No `ports:` — Coolify's Traefik routes ${SERVICE_FQDN_ANGIE_80} → 80. expose: - "80" networks: - betterframe nodered: build: context: . dockerfile: deploy/docker/Dockerfile.nodered container_name: betterframe-nodered restart: unless-stopped environment: - TZ=UTC volumes: - nodered-data:/data expose: - "1880" healthcheck: # Node-RED root admin path returns 200 once the runtime is up. test: ["CMD-SHELL", "wget -q --spider http://localhost:1880/nrdp/ || exit 1"] interval: 30s timeout: 5s retries: 3 start_period: 90s networks: - betterframe postgres: image: postgres:18-alpine container_name: betterframe-postgres restart: unless-stopped environment: - POSTGRES_USER=${BF_PG_USER:-betterframe} - POSTGRES_PASSWORD=${BF_PG_PASSWORD:-betterframe} - POSTGRES_DB=${BF_PG_DB:-betterframe} volumes: - postgres-data:/var/lib/postgresql expose: - "5432" healthcheck: test: ["CMD-SHELL", "pg_isready -U ${BF_PG_USER:-betterframe}"] interval: 10s timeout: 5s retries: 5 start_period: 10s networks: - betterframe volumes: betterframe-data: name: ${BF_DATA_VOLUME_NAME:-betterframe-data} nodered-data: name: ${NODERED_DATA_VOLUME_NAME:-nodered-data} postgres-data: name: ${BF_PG_VOLUME_NAME:-betterframe-postgres} networks: betterframe: driver: bridge