统一 Node 22 与后端安全运行基线(07-15-production-trust-closeout-cleanup)

这个提交包含在:
2026-07-16 05:17:18 +08:00
父节点 dcf34d7ac6
当前提交 abb6a22f5c
共修改 28 个文件,包含 2250 行新增和 3012 行删除
+41 -43
查看文件
@@ -1,13 +1,13 @@
# hyb-oa Server Runbook (P0/P1)
## 1. 环境准备
- Node.js: `>=20`
- Node.js: `>=22 <23`
- Docker + Docker Compose
- 本地工具:`curl`、`jq`
- 配置文件:从 `server/.env.example` 复制为 `server/.env` 并按需修改
```bash
cd /home/shunli/Projects/hyb-oa/server
cd server
cp .env.example .env
```
@@ -15,39 +15,37 @@ cp .env.example .env
### 2.1 启动数据库
```bash
cd /home/shunli/Projects/hyb-oa
cd ..
export POSTGRES_PASSWORD="<local-only-db-password>"
export JWT_SECRET="<local-only-jwt-secret>"
docker compose up -d db
```
根级 Compose 不再内置数据库口令或 JWT 密钥;请仅在本地 shell 或未提交的环境文件中设置,并让 `server/.env` 的 `DATABASE_URL` 使用同一数据库口令。
### 2.2 应用迁移
```bash
cd /home/shunli/Projects/hyb-oa/server
cd server
npm run prisma:migrate:deploy
```
### 2.3 执行 seed(幂等)
```bash
cd /home/shunli/Projects/hyb-oa/server
npm run seed:dev
cd server
SEED_DEV_ALLOW=1 SEED_DEV_DATABASE_CONFIRM=hyb_oa npm run seed:dev
```
开发环境默认账号(仅用于本地 seed:dev):
- employee:`[email protected]` / `EmployeePassword1234`
- manager:`[email protected]` / `ManagerPassword1234`
- finance:`[email protected]` / `FinancePassword1234`
- finance_mgr:`[email protected]` / `FinanceMgrPassword1234`
- admin:`[email protected]` / `AdminPassword1234`
- ceo:`[email protected]` / `CeoPassword1234`
说明:
- 以上账号可通过 `SEED_*` 环境变量覆盖(见 `server/src/scripts/seed-dev.js`)。
- 生产/试运行环境默认采用“管理员重置密码”,不建议启用默认弱口令。
- `seed:dev` 永久拒绝 production,只接受 loopback PostgreSQL,并要求确认 URL 中的数据库名。
- 开发账号资料和口令可通过 `SEED_*` 环境变量覆盖;脚本不会打印口令。
- 默认保留已有账号密码。新建账号以及主动设置 `SEED_DEV_RESET_PASSWORDS=1` 后轮换的账号,首次登录都必须改密。
- 开发账号配置不得复用于试运行或生产。
试运行管理员引导(E20):
```bash
cd /home/shunli/Projects/hyb-oa/server
TRIALRUN_ADMIN_EMAIL="admin@hyinda.com" \
TRIALRUN_ADMIN_PHONE="13800000000" \
cd server
TRIALRUN_ADMIN_EMAIL="<admin-email>" \
TRIALRUN_ADMIN_PHONE="<admin-phone>" \
TRIALRUN_ADMIN_PASSWORD="" \
npm run seed:trialrun
```
@@ -101,11 +99,11 @@ npm run seed:trialrun
本地双进程示例:
```bash
# 终端 A:API(不跑作业)
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
JOBS_ENABLED=false npm run dev
# 终端 B:Worker(只跑作业)
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
JOBS_ENABLED=true npm run worker
```
@@ -127,19 +125,19 @@ JOBS_ENABLED=true npm run worker
### 2.4 启动服务
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
npm run dev
```
### 2.5 冒烟验证
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
./scripts/smoke-test.sh
```
### 2.6 本地最小门禁(P1-b)
```bash
cd /home/shunli/Projects/hyb-oa
cd <repo-root>
./scripts/check-minimal.sh
```
@@ -149,7 +147,7 @@ cd /home/shunli/Projects/hyb-oa
## 3. 1 分钟快速验证
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
./scripts/smoke-test.sh
```
@@ -171,26 +169,26 @@ curl -fsS http://127.0.0.1:3000/metrics | head
### 4.1 脚本回归(推荐)
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
BASE_URL=http://127.0.0.1:3000 ./scripts/smoke-test.sh
```
### 4.2 判重专项回归(dedup)
```bash
cd /home/shunli/Projects/hyb-oa/server
DATABASE_URL='postgresql://hyboa_user:[email protected]:5432/hyb_oa?schema=public' \
cd <repo-root>/server
DATABASE_URL='<local-postgresql-url>' \
BASE_URL=http://127.0.0.1:3000 ./scripts/regression-dedup.sh
```
### 4.3 工作流动作回归
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
./scripts/regression-workflow-actions.sh
```
可选并发校验:
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
RUN_DELEGATION_CONCURRENCY_CHECK=1 ./scripts/regression-workflow-actions.sh
```
@@ -219,7 +217,7 @@ RUN_DELEGATION_CONCURRENCY_CHECK=1 ./scripts/regression-workflow-actions.sh
### 4.4 一键全量回归
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
./scripts/regression-all.sh
```
@@ -227,25 +225,25 @@ cd /home/shunli/Projects/hyb-oa/server
可选关闭审计/OCR:
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
RUN_AUDIT_REGRESSION=0 RUN_OCR_REGRESSION=0 ./scripts/regression-all.sh
```
可选打开组织/配置回归(org + settings):
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
RUN_ORG_SETTINGS_REGRESSION=1 ./scripts/regression-all.sh
```
可选打开认证安全回归(auth security):
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
RUN_AUTH_SECURITY_REGRESSION=1 ./scripts/regression-all.sh
```
独立执行:
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
./scripts/regression-audit.sh
OCR_PROVIDER=mock ./scripts/regression-ocr.sh
./scripts/regression-org-settings.sh
@@ -267,7 +265,7 @@ OCR_PROVIDER=mock ./scripts/regression-ocr.sh
### 4.6 前端壳联调(P1-5)
```bash
cd /home/shunli/Projects/hyb-oa/client
cd <repo-root>/client
npm install
npm run dev
```
@@ -279,10 +277,10 @@ npm run dev
### 4.7 单域托管 client/dist(可选,试运行建议)
```bash
cd /home/shunli/Projects/hyb-oa/client
cd <repo-root>/client
npm run build
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
SERVE_CLIENT_DIST=true npm run dev
```
@@ -299,7 +297,7 @@ SERVE_CLIENT_DIST=true npm run dev
备份/恢复脚本(E14):
```bash
cd /home/shunli/Projects/hyb-oa
cd <repo-root>
./scripts/backup-db.sh
./scripts/restore-db.sh deploy/trialrun/backups/<db.dump>
./scripts/backup-storage.sh
@@ -358,7 +356,7 @@ cd /home/shunli/Projects/hyb-oa
### 5.8 定时任务(可手动执行)
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
npm run job:revoke-expired-delegations
npm run job:ocr-once
```
@@ -492,7 +490,7 @@ npm run job:ocr-once
### 9.3 新增回归脚本
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
./scripts/regression-verification.sh
./scripts/regression-dashboard.sh
./scripts/regression-budget.sh
@@ -502,7 +500,7 @@ cd /home/shunli/Projects/hyb-oa/server
可通过总回归开关启用:
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
RUN_VERIFICATION_REGRESSION=1 \
RUN_DASHBOARD_REGRESSION=1 \
RUN_BUDGET_REGRESSION=1 \
@@ -513,7 +511,7 @@ RUN_FEATURE_FLAGS_REGRESSION=1 \
### 9.4 单次任务脚本(调试)
```bash
cd /home/shunli/Projects/hyb-oa/server
cd <repo-root>/server
VERIFICATION_RECORD_ID=<uuid> npm run job:verification-once
npm run job:integration-outbox-once
```