services: postgres: image: postgres:16 container_name: alphax-postgres restart: unless-stopped env_file: - .env environment: POSTGRES_DB: "${POSTGRES_DB:-alphax_dev}" POSTGRES_USER: "${POSTGRES_USER:-alphax}" POSTGRES_PASSWORD: "${POSTGRES_PASSWORD:-alphax_dev_password}" ports: - "${POSTGRES_PORT:-5433}:5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-alphax} -d ${POSTGRES_DB:-alphax_dev}"] interval: 10s timeout: 5s retries: 5 alphax-web: build: context: . dockerfile: Dockerfile image: alphax:local container_name: alphax-web restart: unless-stopped env_file: - .env environment: PORT: "8190" ALPHAX_ENV: "${ALPHAX_ENV:-dev}" ALPHAX_DB_BACKEND: "postgres" DATABASE_URL: "${DATABASE_URL:-postgresql://alphax:alphax_dev_password@postgres:5432/alphax_dev}" # 仅当 app_user 表为空时创建默认管理员;已有用户或迁移旧库时不会覆盖。 ALPHAX_BOOTSTRAP_ADMIN: "${ALPHAX_BOOTSTRAP_ADMIN:-1}" ALPHAX_DEFAULT_ADMIN_EMAIL: "${ALPHAX_DEFAULT_ADMIN_EMAIL:-admin@alphax.local}" ALPHAX_DEFAULT_ADMIN_PASSWORD: "${ALPHAX_DEFAULT_ADMIN_PASSWORD:-AlphaXAdmin123}" command: ["web"] ports: - "8191:8190" volumes: - ./data:/app/data - ./logs:/app/logs - ./rules.yaml:/app/rules.yaml healthcheck: test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:8190/api/stats >/dev/null || exit 1"] interval: 30s timeout: 10s retries: 3 start_period: 40s alphax-scheduler: image: alphax:local container_name: alphax-scheduler restart: unless-stopped depends_on: alphax-web: condition: service_started env_file: - .env environment: # 本地 Docker 副本需要真实跑链路,方便验证筛选/确认/跟踪/复盘结果。 # 调度器以后台子进程方式并发执行,并通过业务锁组规避主推荐写入冲突。 ALPHAX_SCHEDULER_DRY_RUN: "0" ALPHAX_ENV: "${ALPHAX_ENV:-dev}" ALPHAX_DB_BACKEND: "postgres" DATABASE_URL: "${DATABASE_URL:-postgresql://alphax:alphax_dev_password@postgres:5432/alphax_dev}" command: ["scheduler"] volumes: - ./data:/app/data - ./logs:/app/logs - ./rules.yaml:/app/rules.yaml alphax-price-streamer: image: alphax:local container_name: alphax-price-streamer restart: unless-stopped depends_on: alphax-web: condition: service_started env_file: - .env environment: ALPHAX_ENV: "${ALPHAX_ENV:-dev}" ALPHAX_DB_BACKEND: "postgres" DATABASE_URL: "${DATABASE_URL:-postgresql://alphax:alphax_dev_password@postgres:5432/alphax_dev}" command: ["price-streamer"] volumes: - ./data:/app/data - ./logs:/app/logs - ./rules.yaml:/app/rules.yaml volumes: postgres_data: