# 官方运行时契约(变更视为运行时大版本,须写 changelog) # # 本地开发不使用本文件:仓库根 docker-compose.yml 只起 Postgres, # 配合 start.bat / cd backend && go run ./cmd/jiang13 + frontend npm run dev。 # 本 Compose 不含反代:页面 :3000、API :3001 交给宿主机 Nginx / Caddy。 name: jiang13 services: postgres: image: postgres:17-alpine restart: unless-stopped environment: POSTGRES_USER: ${POSTGRES_USER:-jiang13} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD in deploy/.env} POSTGRES_DB: ${POSTGRES_DB:-jiang13} volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-jiang13} -d ${POSTGRES_DB:-jiang13}"] interval: 5s timeout: 5s retries: 5 api: image: ${JIANG13_IMAGE_API:-jiang13-bbs-api}:${JIANG13_VERSION:-0.1.0} build: context: .. dockerfile: deploy/Dockerfile.api args: VERSION: ${JIANG13_VERSION:-0.1.0} COMMIT: ${JIANG13_COMMIT:-unknown} restart: unless-stopped depends_on: postgres: condition: service_healthy environment: HTTP_PORT: "3001" DEV_MODE: "false" JIANG13_WORK_PATH: /var/lib/jiang13 DATA_DIR: /var/lib/jiang13/data DB_DSN: postgres://${POSTGRES_USER:-jiang13}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB:-jiang13}?sslmode=disable JWT_SECRET: ${JWT_SECRET:?set JWT_SECRET in deploy/.env} SITE_URL: ${SITE_URL:-https://localhost} volumes: - appdata:/var/lib/jiang13/data ports: - "${JIANG13_BIND:-127.0.0.1}:${JIANG13_API_PORT:-3001}:3001" web: image: ${JIANG13_IMAGE_WEB:-jiang13-bbs-web}:${JIANG13_VERSION:-0.1.0} build: context: ../frontend dockerfile: ../deploy/Dockerfile.web args: VERSION: ${JIANG13_VERSION:-0.1.0} BACKEND_URL: http://api:3001 restart: unless-stopped depends_on: api: condition: service_healthy environment: BACKEND_URL: http://api:3001 NODE_ENV: production PORT: "3000" HOSTNAME: 0.0.0.0 ports: - "${JIANG13_BIND:-127.0.0.1}:${JIANG13_WEB_PORT:-3000}:3000" volumes: pgdata: appdata: