services: postgres: image: ${POSTGRES_IMAGE:-docker.m.daocloud.io/library/postgres:16-alpine} environment: - POSTGRES_USER=${POSTGRES_USER:-affiliate} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-affiliate_dev_password} - POSTGRES_DB=${POSTGRES_DB:-affiliate_dash} volumes: - postgres-data:/var/lib/postgresql/data restart: unless-stopped healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 5 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} GOPROXY: ${GOPROXY:-https://goproxy.cn,direct} GOSUMDB: ${GOSUMDB:-sum.golang.google.cn} ALPINE_MIRROR: ${ALPINE_MIRROR:-https://mirrors.aliyun.com/alpine} image: affiliate-backend:latest ports: - "8080:8080" environment: - PORT=8080 - JWT_SECRET=${JWT_SECRET} - DATABASE_URL=postgres://${POSTGRES_USER:-affiliate}:${POSTGRES_PASSWORD:-affiliate_dev_password}@postgres:5432/${POSTGRES_DB:-affiliate_dash}?sslmode=disable - 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 depends_on: postgres: condition: service_healthy 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} NPM_REGISTRY: ${NPM_REGISTRY:-https://registry.npmmirror.com} 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: postgres-data: backend-data: caddy-data: caddy-config: