services: api: build: ./api restart: unless-stopped env_file: .env environment: DATABASE_URL: postgres://nightly:${DB_PASSWORD}@db:5432/nightly REDIS_URL: redis://redis:6379 NODE_ENV: production depends_on: db: condition: service_healthy redis: condition: service_started networks: - internal db: image: postgres:16-alpine restart: unless-stopped volumes: - postgres_data:/var/lib/postgresql/data - ./api/src/db/schema.sql:/docker-entrypoint-initdb.d/01_schema.sql environment: POSTGRES_DB: nightly POSTGRES_USER: nightly POSTGRES_PASSWORD: ${DB_PASSWORD} healthcheck: test: ["CMD-SHELL", "pg_isready -U nightly"] interval: 5s timeout: 5s retries: 10 networks: - internal redis: image: redis:7-alpine restart: unless-stopped volumes: - redis_data:/data networks: - internal caddy: image: caddy:2-alpine restart: unless-stopped ports: - "80:80" - "443:443" - "443:443/udp" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config networks: - internal volumes: postgres_data: redis_data: caddy_data: caddy_config: networks: internal: driver: bridge