name: mini-openclaw-v2 services: xingbang-app: build: context: . dockerfile: Dockerfile container_name: mini-openclaw-v2 ports: # 宿主端口与旧版(3200/8002)隔离,见 claude_use/T00/02 §2.2。 # 容器内端口保持 3000/8002 不变:健康检查与 RISK_AGENT_BACKEND_URL 都在容器内解析。 - "3212:3000" # frontend - "8012:8002" # backend API used by the browser client environment: DEEPSEEK_API_KEY: ${DEEPSEEK_API_KEY:-} DEEPSEEK_MODEL: ${DEEPSEEK_MODEL:-deepseek-chat} DEEPSEEK_BASE_URL: ${DEEPSEEK_BASE_URL:-https://api.deepseek.com} CHAT_THINKING_MODE: ${CHAT_THINKING_MODE:-} XINGBANG_DEMO_ROLE_LOGIN: ${XINGBANG_DEMO_ROLE_LOGIN:-0} XINGBANG_DEMO_PROJECTS: ${XINGBANG_DEMO_PROJECTS:-DEMO-A,DEMO-B,DEMO-C,LAB-001,XB-2026-001} ERP_DB_HOST: ${ERP_DB_HOST:-} ERP_DB_PORT: ${ERP_DB_PORT:-5432} ERP_DB_NAME: ${ERP_DB_NAME:-} ERP_DB_USER: ${ERP_DB_USER:-} ERP_DB_PASSWORD: ${ERP_DB_PASSWORD:-} ERP_DB_SSL_MODE: ${ERP_DB_SSL_MODE:-require} # 容器内后端监听 8002,故此处保持 8002(不是宿主端口 8012) RISK_AGENT_BACKEND_URL: ${RISK_AGENT_BACKEND_URL:-http://127.0.0.1:8002} volumes: - xingbang-v2-data:/app/backend/xingbang_data - xingbang-v2-logs:/app/backend/logs restart: unless-stopped healthcheck: test: - CMD - node - -e - "Promise.all([fetch('http://127.0.0.1:3000/'), fetch('http://127.0.0.1:8002/')]).then(rs => process.exit(rs.every(r => r.ok) ? 0 : 1)).catch(() => process.exit(1))" interval: 30s timeout: 5s start_period: 120s retries: 3 volumes: xingbang-v2-data: xingbang-v2-logs: