feat(server): 试运行部署与运营基线(E13/E14/E17/E19/E20/E21)

- 增加 deploy/trialrun:Docker Compose + env 模板 + runbook + 发布/回滚 checklist

- 新增 DB/文件存储备份恢复脚本(backup/restore)

- 新增 system.users 运营接口:创建/启用禁用/重置密码/分配角色 + 审计

- 新增 seed:trialrun 引导管理员账号(一次性口令)

- 补齐 SIGTERM/SIGINT 优雅停机(关闭 job/HTTP/DB)
这个提交包含在:
2026-02-09 01:12:49 +08:00
父节点 89c0ed2ec1
当前提交 4223d81eb4
共修改 19 个文件,包含 1385 行新增和 1 行删除
+43
查看文件
@@ -43,6 +43,19 @@ npm run seed:dev
- 以上账号可通过 `SEED_*` 环境变量覆盖(见 `server/src/scripts/seed-dev.js`)。
- 生产/试运行环境默认采用“管理员重置密码”,不建议启用默认弱口令。
试运行管理员引导(E20):
```bash
cd /home/shunli/Projects/hyb-oa/server
TRIALRUN_ADMIN_EMAIL="[email protected]" \
TRIALRUN_ADMIN_PHONE="13800000000" \
TRIALRUN_ADMIN_PASSWORD="" \
npm run seed:trialrun
```
说明:
- `TRIALRUN_ADMIN_PASSWORD` 为空时会生成并打印一次性口令(请立刻保存)。
- 若管理员已存在,脚本只确保其为 active 且具备 `admin+employee` 角色,不会改动密码。
### 2.4 启动服务
```bash
cd /home/shunli/Projects/hyb-oa/server
@@ -192,6 +205,25 @@ SERVE_CLIENT_DIST=true npm run dev
- 访问 `http://127.0.0.1:3000` 即可打开前端(同域 cookie,减少 CORS 复杂度)。
- SPA 路由(如 `/dashboard`)会回退到 `index.html`;`/api/*` 不参与回退。
### 4.8 试运行部署包(Docker Compose)
试运行/上线演练建议使用仓库内置部署包:
- `deploy/trialrun/runbook.md`
- `deploy/trialrun/docker-compose.yml`
- `deploy/trialrun/.env.example`
- `deploy/trialrun/checklist.md`
备份/恢复脚本(E14):
```bash
cd /home/shunli/Projects/hyb-oa
./scripts/backup-db.sh
./scripts/restore-db.sh deploy/trialrun/backups/<db.dump>
./scripts/backup-storage.sh
./scripts/restore-storage.sh deploy/trialrun/backups/<storage.tar.gz> deploy/trialrun/data/storage
```
优雅停机(E21):
- `docker stop` / `Ctrl+C` 会触发 `SIGTERM/SIGINT`,server 会调用 `app.close()` 完成收敛关闭(定时任务/HTTP/DB)。
---
## 5. P2 API 摘要
@@ -237,6 +269,17 @@ npm run job:revoke-expired-delegations
npm run job:ocr-once
```
### 5.8 账号与角色管理(E17,试运行运营)
- `GET /api/users`:员工列表(分页/搜索)
- `POST /api/users`:创建员工(含初始密码)
- `POST /api/users/:id/disable`:禁用员工(tokenVersion+1 + 撤销 refresh)
- `POST /api/users/:id/enable`:启用员工(tokenVersion+1 + 撤销 refresh)
- `POST /api/users/:id/reset-password`:重置密码(返回一次性口令,tokenVersion+1)
- `POST /api/users/:id/roles`:设置角色(tokenVersion+1 + 撤销 refresh)
权限:
- `system.users`(hr/admin;admin 具备 `*`)
---
## 6. 关键环境变量