services: # Backend service (API and core logic) nofx: build: context: . dockerfile: ./docker/Dockerfile.backend container_name: nofx-trading restart: unless-stopped stop_grace_period: 30s # 允许应用有 30 秒时间优雅关闭 ports: - "${NOFX_BACKEND_PORT:-8080}:8080" volumes: - ./config.json:/app/config.json:ro - ./data.db:/app/data.db - ./beta_codes.txt:/app/beta_codes.txt:ro - ./decision_logs:/app/decision_logs - ./prompts:/app/prompts - /etc/localtime:/etc/localtime:ro # Sync host time environment: - TZ=${NOFX_TIMEZONE:-Asia/Shanghai} # Set timezone - AI_MAX_TOKENS=4000 # AI响应的最大token数(默认2000,建议4000-8000) - DATA_ENCRYPTION_KEY=${DATA_ENCRYPTION_KEY} # 数据库加密密钥 - JWT_SECRET=${JWT_SECRET} # JWT认证密钥 - RSA_PRIVATE_KEY=${RSA_PRIVATE_KEY} # RSA私钥(客户端加密) networks: - nofx-network healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/api/health"] interval: 30s timeout: 10s retries: 3 start_period: 60s # Frontend service (static serving and proxy) nofx-frontend: build: context: . dockerfile: ./docker/Dockerfile.frontend container_name: nofx-frontend restart: unless-stopped ports: - "${NOFX_FRONTEND_PORT:-3000}:80" networks: - nofx-network depends_on: - nofx healthcheck: test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1/health"] interval: 30s timeout: 10s retries: 3 start_period: 5s networks: nofx-network: driver: bridge