Files
LWLT-AI/control-plane/README.md
2026-07-13 19:57:46 +08:00

44 lines
3.2 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.

# LTJT 生产控制平面
这是围绕现有 LTJT 浏览器适配器增加的生产级控制层。它不新增 ERP 业务路线,也不替换 LTJT它负责把现有任务、解析结果、确认、插件接管、执行回查和审计变成可持久化、可恢复的服务端状态。
## 服务边界
- PostgreSQL 是任务、事件、幂等、审计和回查状态的唯一事实源。
- 管理员使用原生账号登录;服务端会话使用 HttpOnly/Secure/SameSite Cookie。
- 业务页面通过 REST 创建/确认任务,通过 SSE 或轮询读取服务端状态。
- Chrome 插件仍在管理员已登录的浏览器/ERP 会话中工作;`chrome.storage.local` 只是临时缓存。
- ERP 写入继续遵循预检、管理员确认、单次提交、ERP 回查;不确定结果禁止自动重试。
- 由于插件不使用独立凭据,执行期间必须保持管理员业务页面和已登录 ERP 浏览器会话可用;页面断开不会触发自动补偿或重复提交。
- 服务端先创建唯一 ERP execution再允许页面向插件下发同一任务只有一个 `erp` attempt。刷新、重连、超时和迟到回执都不能创建第二次执行。
- 插件回执必须携带服务端 `execution_id` 和领取连接;完成、阻断及待回查状态不可被后续 `running` 回执覆盖。执行租约过期会进入待回查,不会重新入队。
- Chrome 插件最低兼容版本为 `0.3.1`。该版本在 `chrome.storage.local` 保存执行闸门,并在真实提交前持久化 `write_started`;扩展后台重启后也不会重跑同一任务。
## 本地命令
本地命令会自动读取项目根目录 `.env`,不需要先手动 `export` 环境变量。首次部署或换环境时,只需替换该文件;生产 Docker Compose 使用 `.env.production`
```bash
npm install
npm run check
npm run build
npm run db:migrate
ADMIN_USERNAME=admin ADMIN_PASSWORD='replace-with-12-plus-chars' npm run admin -- bootstrap
npm run data:retention
npm run dev
```
`db:migrate` 和管理员初始化需要可连接的 PostgreSQL。开发机没有数据库时可以运行 `npm run test:control-plane` 完成无数据库静态/健康烟测。
## 生产部署
1. 复制 `.env.production.example` 为部署机受保护的 `.env.production`,填入 PostgreSQL URL、字段加密密钥和外部解析 Key。
2. 在正式数据库上线前执行并验证备份:`infra/backup-postgres.sh`
3. 使用 `docker compose --env-file .env.production up -d --build` 启动Compose 会先执行数据库迁移,再启动控制平面。
4. 首次启动后在容器内通过 `docker compose exec -e ADMIN_USERNAME=admin -e ADMIN_PASSWORD='replace-with-12-plus-chars' control-plane node dist/control-plane/src/admin-cli.js bootstrap` 创建管理员;不要把密码写入镜像或 Git。
5. 配置 `infra/Caddyfile` 中的正式域名和 HTTPS然后在 Chrome 插件中加载对应生产业务页面。
正式环境没有独立 staging。上线前必须完成离线测试、迁移预检查和迁移前备份恢复检查使用 `infra/restore-check.sh` 指向一次性恢复数据库。
生产容器中的定期清理命令为:`docker compose exec control-plane node dist/control-plane/src/retention.js`。本地开发则使用上面的 `npm run data:retention`