version: '3.9' services: caddy: image: caddy:latest container_name: reverse-proxy restart: unless-stopped ports: - "80:80" - "443:443" volumes: - ./Caddyfile:/etc/caddy/Caddyfile - caddy_data:/data - caddy_config:/config networks: - web postgres: image: postgres:16-alpine container_name: postgres restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} POSTGRES_DB: ${POSTGRES_DB:-appdb} volumes: - postgres_data:/var/lib/postgresql/data networks: - web healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 10s timeout: 5s retries: 5 api-example: build: ./services/api-example container_name: api-example restart: unless-stopped environment: DATABASE_URL: postgres://${POSTGRES_USER:-postgres}:${POSTGRES_PASSWORD:-postgres}@postgres:5432/${POSTGRES_DB:-appdb}?sslmode=disable depends_on: postgres: condition: service_healthy networks: - web # Other services can be added here #api-payments: # build: ./services/api-payments # container_name: api-payments # restart: unless-stopped # networks: # - web volumes: caddy_data: caddy_config: postgres_data: networks: web: driver: bridge