services: db: image: postgis/postgis:16-3.4 restart: unless-stopped networks: - locale-all environment: POSTGRES_DB: ${POSTGRES_DB} POSTGRES_USER: ${POSTGRES_USER} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} healthcheck: test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"] interval: 5s timeout: 5s retries: 10 start_period: 10s volumes: - leads4less-db:/var/lib/postgresql/data migrate: build: context: . target: migrate depends_on: db: condition: service_healthy environment: NODE_ENV: ${NODE_ENV} DATABASE_URL: ${DATABASE_URL} COOKIE_SECRET: ${COOKIE_SECRET} PG_BOSS_SCHEMA: ${PG_BOSS_SCHEMA} restart: "no" networks: - locale-all api: build: context: . target: api depends_on: db: condition: service_healthy migrate: condition: service_completed_successfully environment: NODE_ENV: ${NODE_ENV} APP_HOST: ${APP_HOST} APP_PORT: ${APP_PORT} APP_ORIGIN: ${APP_ORIGIN} DATABASE_URL: ${DATABASE_URL} COOKIE_SECRET: ${COOKIE_SECRET} GOOGLE_MAPS_SERVER_KEY: ${GOOGLE_MAPS_SERVER_KEY} PG_BOSS_SCHEMA: ${PG_BOSS_SCHEMA} SESSION_TTL_DAYS: ${SESSION_TTL_DAYS} ADMIN_EMAILS: ${ADMIN_EMAILS} BILLING_ADMIN_EMAILS: ${BILLING_ADMIN_EMAILS} ALLOW_ADMIN_BOOTSTRAP: ${ALLOW_ADMIN_BOOTSTRAP} ADMIN_BOOTSTRAP_TOKEN: ${ADMIN_BOOTSTRAP_TOKEN} restart: unless-stopped networks: - locale-all ports: - "${APP_PORT}:${APP_PORT}" worker: build: context: . target: worker depends_on: db: condition: service_healthy migrate: condition: service_completed_successfully environment: NODE_ENV: ${NODE_ENV} DATABASE_URL: ${DATABASE_URL} COOKIE_SECRET: ${COOKIE_SECRET} GOOGLE_MAPS_SERVER_KEY: ${GOOGLE_MAPS_SERVER_KEY} PG_BOSS_SCHEMA: ${PG_BOSS_SCHEMA} SESSION_TTL_DAYS: ${SESSION_TTL_DAYS} restart: unless-stopped networks: - locale-all web: build: context: . target: web args: VITE_API_BASE_URL: ${VITE_API_BASE_URL} VITE_GOOGLE_MAPS_PLATFORM_KEY: ${VITE_GOOGLE_MAPS_PLATFORM_KEY} depends_on: api: condition: service_started restart: unless-stopped networks: - locale-all ports: - "${WEB_PORT}:80" volumes: leads4less-db: networks: locale-all: external: true