R79 收口公网部署与治理事实源

这个提交包含在:
2026-05-05 16:36:27 +08:00
父节点 449489d2e0
当前提交 6eaee753d7
共修改 12 个文件,包含 136 行新增和 59 行删除
+32 -19
查看文件
@@ -6,15 +6,26 @@
- 官网继续保持 `hyinda.com / www.hyinda.com` 静态托管,不要改官网目录和配置。
- OA 新增独立二级域名,例如 `oa.hyinda.com`。
- OA 推荐部署目录:`/opt/hyb-oa-trialrun`。
- OA 推荐访问方式:`Nginx(443) -> 127.0.0.1:3000 -> docker compose(server)`。
- OA 推荐访问方式:`Caddy(443) -> 127.0.0.1:3000 -> docker-compose(server)`。
- 首次初始化时:
1. 服务器以 root 执行 `bash deploy/trialrun/setup-server.sh`
2. 手工创建 `deploy/trialrun/.env`
3. 手工放置 OA 的 Nginx 站点配置和证书
3. 手工更新 OA 的 `Caddyfile` 站点块并确认 TLS 正常
4. 本地执行 `bash scripts/qa/run-release-gate.sh all`(或至少执行 `bash deploy/trialrun/deploy.sh`)
## 0B. 当前已核实的 `118.89.77.218` 部署基线(2026-05-04)
- SSH 用户:
- 常规部署:`[email protected]`
- 系统配置:`[email protected]`
- `shunli` 当前不可免密登录
- 反向代理:`caddy` 正在运行,`oa.hyinda.com` 已反代到 `127.0.0.1:3000`
- 部署目录:`/opt/hyb-oa-trialrun`
- 远端目录当前不是 git 工作树;发布应优先从本地执行 `bash deploy/trialrun/deploy.sh`,由脚本 `rsync` 到服务器
- 远端容器编排当前实际为 `docker-compose 1.29.2`;本 runbook 命令以 `docker-compose` 为准
- 当前公网 `.env` 已确认:`APP_ORIGIN=https://oa.hyinda.com`、`COOKIE_SECURE=true`、`PUBLIC_SECURITY_HARDENING_ENABLED=true`,但 `WECOM_*` 仍为 `false`,`OCR_PROVIDER=mock`
## 0. 前置条件
- Docker + Docker Compose(v2)
- Docker + Docker Compose(v1/v2 任一可用)
- 机器时间正确(影响 token / cron / OCR)
## 1. 首次启动(推荐:单域托管)
@@ -48,14 +59,14 @@ cp deploy/trialrun/.env.example deploy/trialrun/.env
```bash
cd /path/to/hyb-oa
node deploy/trialrun/validate-env-contract.js
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d db
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --build server
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d db
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --build server
```
可选:启用 MinIO(对象存储,F21):
```bash
cd /path/to/hyb-oa
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env --profile minio up -d minio minio_init
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env --profile minio up -d minio minio_init
```
可选:启用 Worker 进程(推荐在试运行/多进程模式使用):
@@ -63,13 +74,13 @@ docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/
cd /path/to/hyb-oa
# 1) 在 deploy/trialrun/.env 中设置:JOBS_ENABLED="false"
# 2) 启用 worker profile(会额外启动 worker 容器)
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env --profile worker up -d --build server worker
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env --profile worker up -d --build server worker
```
### 1.3 初始化(迁移 + 配置 seed + 试运行管理员)
```bash
cd /path/to/hyb-oa
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env run --rm init
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env run --rm init
```
说明:
@@ -84,7 +95,7 @@ docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/
curl -fsS http://127.0.0.1:3000/health
curl -fsS http://127.0.0.1:3000/ready
curl -fsS http://127.0.0.1:3000/metrics | head
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env exec -T server node src/scripts/smoke-trialrun-runtime.js
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env exec -T server node src/scripts/smoke-trialrun-runtime.js
```
说明:
@@ -92,6 +103,7 @@ docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/
- 若本地存在完整 `LIVE_SMOKE_*` 环境变量,部署脚本会继续执行 `client npm run test:e2e:live`,用于公网只读 smoke。
- 推荐直接执行 `bash scripts/qa/run-release-gate.sh all`,让 static / local smoke / full-local / deploy / live smoke 形成单一放行链。
- 若再出现“数据库开了但功能被环境硬关”的情况,部署会直接失败,不再等到手工点页面才发现。
- 2026-05-04 公网只读巡检显示:`smoke-external-deps.js` 可以通过,但前提是 `WECOM_*` 未启用且 `OCR_PROVIDER=mock`;`smoke-trialrun-runtime.js` 当前会因 `announcements_v1` 为 `force_off` 失败。
浏览器访问:
- `http://127.0.0.1:3000`(单域托管前端)
@@ -116,7 +128,7 @@ set +a
### 1.5.2 恢复(到同一台机器或新机器)
1) 先停止 server:
```bash
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env stop server
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env stop server
```
2) 恢复 DB:
@@ -135,7 +147,7 @@ set +a
4) 重启并验收:
```bash
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d server
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d server
curl -fsS http://127.0.0.1:3000/ready
```
@@ -174,11 +186,11 @@ curl -fsS http://127.0.0.1:3000/ready
步骤:
1) 先做备份(见 E14 脚本)
2) 拉取代码:`git pull` / `git checkout <tag>`
2) 从本地仓库执行 `bash deploy/trialrun/deploy.sh`(推荐);该脚本会把当前工作树 `rsync` 到 `/opt/hyb-oa-trialrun`,不依赖远端 `git pull`
3) 构建并重启:
```bash
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --build server
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env run --rm init
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --build server
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env run --rm init
```
发布/回滚 Checklist:
@@ -189,14 +201,15 @@ docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/
### 3.1 仅回滚代码
```bash
git checkout <previous-tag>
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --build server
# 远端目录不是 git 工作树,推荐在本地切到目标 tag 后重新执行 deploy.sh
# git checkout <previous-tag>
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --build server
```
### 3.2 需要 DB 回滚(推荐做法)
1) 停止服务:
```bash
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env stop server
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env stop server
```
2) 按 E14 恢复 DB + 文件存储备份
3) 启动服务并验收 `/ready` 与登录
@@ -210,7 +223,7 @@ docker logs -f hyb-oa-trialrun-server
## 5. 优雅停机(E21)
说明:
- `docker compose stop server` 会发送 `SIGTERM`,server 会尝试在 10s 内完成:
- `docker-compose stop server` 会发送 `SIGTERM`,server 会尝试在 10s 内完成:
- 停止 OCR/委派回收定时任务
- 关闭 HTTP 监听
- 断开 Prisma/PG 连接
@@ -325,7 +338,7 @@ npm run test:e2e -- tests/e2e/manual/live-invoice-ocr-batch.spec.ts
- `OPENAPI_DOCS_ENABLED=false`
3. 重新执行:
```bash
docker compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --build server
docker-compose -f deploy/trialrun/docker-compose.yml --env-file deploy/trialrun/.env up -d --build server
```
4. 验证浏览器和企业微信 WebView 都能正常登录、刷新 token 与退出登录。