services: backend: build: context: . dockerfile: Dockerfile.backend args: GO_BUILDER_IMAGE: ${GO_BUILDER_IMAGE:-docker.m.daocloud.io/library/golang:1.26-alpine} BACKEND_RUNTIME_IMAGE: ${BACKEND_RUNTIME_IMAGE:-docker.m.daocloud.io/library/alpine:3.22} image: affiliate-backend:latest ports: - "8080:8080" environment: - PORT=8080 - JWT_SECRET=${JWT_SECRET} - DB_PATH=/data/app.db - GIN_MODE=${GIN_MODE:-release} - OPEN_API_KEY=${OPEN_API_KEY} - OPEN_API_SECRET=${OPEN_API_SECRET} - OPEN_SIGN_SKEW=${OPEN_SIGN_SKEW:-300} - OPEN_API_DEBUG=${OPEN_API_DEBUG:-false} - LOG_FILE=/data/app.log volumes: - backend-data:/data restart: unless-stopped healthcheck: test: ["CMD", "curl", "-fsS", "http://localhost:8080/health"] interval: 30s timeout: 10s retries: 3 caddy: build: context: . dockerfile: Dockerfile.caddy args: NODE_BUILDER_IMAGE: ${NODE_BUILDER_IMAGE:-docker.m.daocloud.io/library/node:22-alpine} CADDY_BASE_IMAGE: ${CADDY_BASE_IMAGE:-docker.m.daocloud.io/library/caddy:2-alpine} image: affiliate-caddy:latest ports: - "80:80" - "443:443" volumes: - caddy-data:/data - caddy-config:/config depends_on: backend: condition: service_healthy restart: unless-stopped volumes: backend-data: caddy-data: caddy-config: