Files
wyndham-ARR/deploy/README.md
2026-08-04 12:37:26 +08:00

91 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ARR 2.0 单机 Compose 部署
本 Compose 模板部署两个 HTTP 服务:`web` 负责应用登录、页面、程序化 XML 处理、验证和入库,`caddy` 负责 HTTPS。没有 Agent 回调服务或 MCP 公网入口。自动月报由另一个无端口的 `monthly_reports.worker` 进程执行,不得放进 Web 请求进程。
## 前置条件
- DNS`WEB_PUBLIC_HOST` 指向部署主机;
- PostgreSQL 15+:目标必须是隔离数据库 `booking_test`,并已应用 008016 权威迁移;
- OSS区域匹配、服务端加密、未启用或暂停 versioning、禁止匿名写bucket ACL 可为 private 或 public-read
- ARR 数据库账号和 OSS RAM/STS 凭据由 Secret 管理器注入,不写入镜像或仓库。
- 月报和公司渠道明细均由 Python/openpyxl 生成;不需要 Node.js、npm 或私有运行时。
- 月报/公司 XLSX 与 `result.json` 上传现有 OSS只有 `.web-jobs` 队列状态和临时 staging 继续使用 `/app/outputs` 持久卷。
## 配置
```bash
cp deploy/.env.production.example deploy/.env.production
chmod 600 deploy/.env.production
```
填写应用登录账号/长随机密码、数据库、OSS 和域名。登录凭据必须由 Secret 管理器注入不能写入镜像或提交到仓库。ARR 2.0 不需要以下配置:
- SuperAgent/Open Agent URL 或 API key
- MCP 域名、Bearer 或并发参数;
- Agent callback URL/HMAC
- `fetch_oss_file` 或源文件公网 URL。
## 应用月报 OSS 迁移
在目标数据库确认当前连接为隔离的 `booking_test` 后,先应用 016脚本会自行拒绝其他数据库。016
只替换月报发布校验函数,不新增表或列,历史 `local` 工件不需要迁移:
```bash
psql "$ARR_DATABASE_URL" -Atc "select current_database();"
sha256sum database/016_monthly_report_oss_artifacts.sql
psql "$ARR_DATABASE_URL" -v ON_ERROR_STOP=1 \
-f database/016_monthly_report_oss_artifacts.sql
```
## 校验并启动
```bash
docker compose --env-file deploy/.env.production config --quiet
docker compose --env-file deploy/.env.production build web
docker compose --env-file deploy/.env.production up -d
```
Compose 启动后,应由 systemd、容器编排器或同等进程管理器独立执行月报 worker
```bash
docker compose --env-file deploy/.env.production run --rm web \
python -m monthly_reports.worker \
--output-root /app/outputs/monthly_reports
```
该命令沿用 Compose 注入的 `ARR_DATABASE_URL``ARR_OSS_*` 和 OSS 凭据;如果改由主机上的 systemd 运行,
则在进程环境中提供同一组变量,或显式传入受控的 `--db-config` 文件。`--once` 可用于部署后的单次探针:
```bash
docker compose --env-file deploy/.env.production run --rm web \
python -m monthly_reports.worker \
--once \
--output-root /app/outputs/monthly_reports
```
检查:
```bash
curl --fail --silent "https://$WEB_PUBLIC_HOST/healthz"
docker compose --env-file deploy/.env.production logs --tail=100 web
```
`/healthz` 仅以 HTTP 200/503 表示数据库与处理入口是否就绪,不暴露组件详情;详细 `/api/health` 必须登录后访问。worker 是独立进程,应另行监控其存活和 outbox 的 `pending/publishing/dead` 数量。失败时优先检查登录环境变量、数据库目标、OSS 区域/加密/versioning、OSS 凭据和固定处理器;无需排查 Agent、MCP 或 Node/npm。
## 验收
使用无真实住客隐私的受控 XML
1. 未登录访问首页应进入 ARR 登录页,错误凭据不得创建会话;
2. 使用授权 Finance 账号登录,页面上传一次 XML
3. 上传响应应直接给出 `succeeded``failed` 终态以及 `job_id`
4. 在任务日志中确认“固定处理器已启动 → 程序输出制品已登记 → 独立验收 → Finance 提交”;
5. 成功任务应能下载对应日报,数据库中 source/retained/outcome 数量必须与结构化结果一致;
6. worker 应消费对应 outbox 事件,页面显示真实月报 ID/版本/“更新至”,下载文件哈希应与 OSS 登记值一致;删除 Web 容器或清空其临时 `outputs/monthly_reports` 后,月报与公司报表仍应可下载;
7. 退出登录后页面、API 和下载均应重新要求登录;
8. 业务失败任务不得激活 Finance 当前版本或触发月报。
## 回退
ARR 2.0 与 `/Users/chillishark/ARR项目0727` 是两个独立目录。应用级回退可停止本 Compose 并重新启动原工程;不要为了应用回退而删除数据库 009/010 表或 OSS 工件。数据库破坏性回滚需要单独审批、备份和迁移演练。