# Pipeline 单 Docker 部署

当前生产保持一个镜像、一个容器。Supervisor 在容器内分别托管 API、独立
Scheduler、多个 Pipeline Worker 和 Reconciler。

## 启动前

1. MySQL 必须是 8.0.36，并为本应用保留 40 个连接；
2. 挂载 `/app/logs/pipeline` 到持久化目录；
3. `SCHEDULER_ENABLED=true` 只影响独立 Scheduler 进程，API 不再内嵌调度器；
   默认调度时间为 `Asia/Shanghai` 每日 15:00；
4. 配置 `AIGC_API_TOKEN`，日批最后一步会真实创建/绑定 AIGC 计划；
5. Docker 停止窗口至少 300 秒。
6. 容器和 Alembic 连接 MySQL 后会将会话时区固定为 `+08:00`（中国标准时间）；定时日批有次日
   调度 deadline，手工/API/CLI 补数不设置 deadline。
7. 单个 `find_agent` 默认最多运行 600 秒（10 分钟）；运行中的找视频批次每 60 秒输出一次
   进度日志，超时记录会标记失败，批次继续处理下一条需求。
8. 首次部署配置 `AUTH_BOOTSTRAP_ADMIN_USERNAME` 和至少 8 位的
   `AUTH_BOOTSTRAP_ADMIN_PASSWORD` 以创建初始管理员；已有同名用户不会被覆盖。
   HTTPS 生产环境设置 `AUTH_COOKIE_SECURE=true`。

示例：

```bash
docker run \
  --stop-timeout 300 \
  --env-file /path/to/supply-agent.env \
  -v /host/supply-agent-pipeline-logs:/app/logs/pipeline \
  -p 8080:8080 \
  registry.example/supply-agent:tag
```

标准档使用 40 个连接、4 个 Worker、4 个最大活跃步骤。高并发补跑档使用
50 个连接、20 个 Worker，但必须将最大活跃步骤限制为 10。

容器启动时默认运行 `alembic upgrade head`。紧急回滚代码时不自动 downgrade
数据库；四张控制面表保留审计数据。

Reconciler 会把失败、失联、漏跑恢复以及 12 小时/2 小时/30 分钟分级预警以
`pipeline_alert` 结构化日志写到容器 stdout。第一阶段不上传到现有公共 CDN OSS；
生产应由 Docker 日志采集器接入现有告警平台，或至少保留容器日志。
