services: app: build: context: . dockerfile: Dockerfile container_name: payment-app environment: DATABASE_URL: postgresql://postgres:postgres@timeseriesdb:5432/payment REDIS_URL: redis://redis:6379 STRIPE_SECRET_KEY: ${STRIPE_SECRET_KEY} STRIPE_PUBLISHABLE_KEY: ${STRIPE_PUBLISHABLE_KEY} STRIPE_WEBHOOK_SECRET: ${STRIPE_WEBHOOK_SECRET} INTERNAL_API_TOKEN: ${INTERNAL_API_TOKEN} depends_on: timeseriesdb: condition: service_healthy redis: condition: service_healthy expose: - "3000" restart: unless-stopped caddy: image: caddy:2.8.4-alpine container_name: payment-caddy depends_on: - app ports: - "80:80" volumes: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config restart: unless-stopped redis: image: redis:7.2-alpine container_name: payment-redis command: ["redis-server", "--appendonly", "yes"] ports: - "6379:6379" volumes: - redis_data:/data healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 start_period: 5s restart: unless-stopped timeseriesdb: image: timescale/timescaledb:latest-pg16 container_name: payment-timeseriesdb environment: POSTGRES_DB: payment POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres ports: - "5432:5432" volumes: - timeseriesdb_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres -d payment"] interval: 10s timeout: 5s retries: 10 start_period: 10s restart: unless-stopped volumes: redis_data: timeseriesdb_data: caddy_data: caddy_config: