100 lines
3.7 KiB
YAML
100 lines
3.7 KiB
YAML
name: ${COMPOSE_PROJECT_NAME:-affiliate_dash}
|
|
|
|
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}
|
|
- TZ=${TZ:-Asia/Shanghai}
|
|
- PGTZ=${TZ:-Asia/Shanghai}
|
|
command: ["postgres", "-c", "timezone=${TZ:-Asia/Shanghai}"]
|
|
ports:
|
|
- "${POSTGRES_PORT:-5432}:5432"
|
|
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
|
|
# 以宿主用户身份运行,日志文件归属正确(宿主机 logs 目录需预先 chown)
|
|
user: "${HOST_UID:-1000}:${HOST_GID:-1000}"
|
|
ports:
|
|
- "8080:8080"
|
|
environment:
|
|
- PORT=8080
|
|
- TZ=${TZ:-Asia/Shanghai}
|
|
- JWT_SECRET=${JWT_SECRET}
|
|
- "DATABASE_URL=${DOCKER_DATABASE_URL:-postgres://${POSTGRES_USER:-affiliate}:${POSTGRES_PASSWORD:-affiliate_dev_password}@postgres:5432/${POSTGRES_DB:-affiliate_dash}?sslmode=disable&TimeZone=${TZ:-Asia/Shanghai}}"
|
|
- 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=${LOG_FILE:-logs/app.log}
|
|
- DELIVERY_BASE_URL=${DELIVERY_BASE_URL:-}
|
|
- DELIVERY_BFF_BASE_URL=${DELIVERY_BFF_BASE_URL:-https://www.jxya.top/bff}
|
|
- DELIVERY_CHANNEL=${DELIVERY_CHANNEL:-dlc}
|
|
- DELIVERY_LINK_SECRET=${DELIVERY_LINK_SECRET:-}
|
|
- DELIVERY_LINK_TTL_MINUTES=${DELIVERY_LINK_TTL_MINUTES:-120}
|
|
- FULFILLMENT_PROCESSING_TIMEOUT_MINUTES=${FULFILLMENT_PROCESSING_TIMEOUT_MINUTES:-30}
|
|
- FULFILLMENT_TIMEOUT_SCAN_INTERVAL_SECONDS=${FULFILLMENT_TIMEOUT_SCAN_INTERVAL_SECONDS:-60}
|
|
- CALLBACK_MAX_ATTEMPTS=${CALLBACK_MAX_ATTEMPTS:-16}
|
|
- CALLBACK_PUSH_TIMEOUT_SECONDS=${CALLBACK_PUSH_TIMEOUT_SECONDS:-15}
|
|
- CALLBACK_RETRY_SCHEDULE=${CALLBACK_RETRY_SCHEDULE:-}
|
|
volumes:
|
|
- ./logs:/app/logs
|
|
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}
|
|
ALPINE_MIRROR: ${ALPINE_MIRROR:-https://mirrors.aliyun.com/alpine}
|
|
image: affiliate-caddy:latest
|
|
ports:
|
|
- "80:80"
|
|
- "443:443"
|
|
environment:
|
|
- TZ=${TZ:-Asia/Shanghai}
|
|
volumes:
|
|
- caddy-data:/data
|
|
- caddy-config:/config
|
|
depends_on:
|
|
backend:
|
|
condition: service_healthy
|
|
restart: unless-stopped
|
|
|
|
volumes:
|
|
postgres-data:
|
|
name: ${POSTGRES_DATA_VOLUME:-affiliate_dash_postgres_data}
|
|
caddy-data:
|
|
caddy-config:
|