services: db: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_USER: cape POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-cape} POSTGRES_DB: cape volumes: - cape_pg:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U cape -d cape"] interval: 5s timeout: 3s retries: 10 app: build: context: . args: PUBLIC_SPEEDTEST_URL: ${PUBLIC_SPEEDTEST_URL:-} restart: unless-stopped depends_on: db: condition: service_healthy environment: DATABASE_URL: postgres://cape:${POSTGRES_PASSWORD:-cape}@db:5432/cape IP_HASH_SECRET: ${IP_HASH_SECRET:?set IP_HASH_SECRET in env} COOKIE_SECRET: ${COOKIE_SECRET:?set COOKIE_SECRET in env} ORIGIN: ${ORIGIN:?set ORIGIN, e.g. https://cape.rip} PUBLIC_TURNSTILE_SITE_KEY: ${PUBLIC_TURNSTILE_SITE_KEY:-} TURNSTILE_SECRET_KEY: ${TURNSTILE_SECRET_KEY:-} PUBLIC_SPEEDTEST_URL: ${PUBLIC_SPEEDTEST_URL:-} ADDRESS_HEADER: ${ADDRESS_HEADER:-cf-connecting-ip} XFF_DEPTH: ${XFF_DEPTH:-1} PORT: 3000 expose: - "3000" volumes: cape_pg: