2026年2月27日部署完成总结
部署日期:2026-02-27
部署范围:数据库迁移 + R统计引擎(新增) + Python微服务 + Node.js后端 + 前端Nginx 全量更新
部署状态:✅ 全部完成,所有功能测试通过
文档日期:2026-02-27
部署成果一览
服务版本对比
| 服务 |
部署前 |
部署后 |
变更类型 |
| PostgreSQL(RDS) |
16 Schema / 63 表 |
16 Schema / 84 表 |
Schema迁移 |
| R统计引擎 |
无 |
v1.0.1 |
全新部署 |
| Python微服务 |
v1.1 |
v1.2 |
依赖+代码更新 |
| Node.js后端 |
v1.7 |
v2.2 |
大版本更新(5万行新增) |
| 前端Nginx |
v1.3 |
v1.8 |
大版本更新(3.2万行新增) |
内网地址总览
| 服务 |
内网地址 |
端口 |
状态 |
| R统计引擎(新) |
172.17.173.101 |
8080 |
✅ 新增 |
| Python微服务 |
172.17.173.102 |
8000 |
✅ 地址变更 |
| Node.js后端 |
172.17.197.28 |
3001 |
✅ 地址变更 |
| 前端Nginx |
172.17.197.29 |
80 |
✅ 地址变更 |
一、数据库迁移
1.1 迁移背景
自 0126 部署以来,本地开发环境新增了大量功能模块(IIT Agent、SSA统计分析、ASL提取工作台等),导致本地数据库与RDS之间存在显著差异。部分变更通过 prisma db push 直接推送,未生成迁移文件,造成 Schema Drift。
1.2 迁移内容
应用的 Prisma 迁移文件(5个):
| 迁移文件 |
内容 |
新增表数 |
20260207_add_iit_manager_agent_tables |
IIT Agent 8张表 |
8 |
20260208_add_cra_qc_engine_support |
CRA智能质控 |
1 |
20260219_add_ssa_module |
SSA统计分析模块 9张表 |
9 |
20260223_add_deep_research_v2_fields |
Deep Research V2.0 字段 |
0(列变更) |
20260225_add_extraction_template_engine |
全文智能提取工作台 4张表 |
4 |
Drift 补丁迁移(1个):
| 迁移文件 |
内容 |
20260227_patch_db_push_drift |
修复 prisma db push 造成的 drift:field_metadata、qc_logs、record_summary、qc_project_stats、ssa_workflows、ssa_workflow_steps 等表 + knowledge_base_id 列 |
Seed 数据同步:
| 数据 |
条目数 |
目标表 |
| SSA 工具库 |
13条 |
ssa_schema.ssa_tools_library |
| IIT 技能库 |
8条 |
iit_schema.iit_skills |
1.3 迁移结果
| 验证项 |
结果 |
| Schema 数量 |
16 ✅ |
| 表总数 |
84 ✅ |
| Prisma 迁移记录 |
11条(含6条新增) ✅ |
| SSA 工具库数据 |
13条 ✅ |
| IIT 技能库数据 |
8条 ✅ |
| 已有数据完整性 |
Prompt模板、用户数据零丢失 ✅ |
详细方案见 01-数据库迁移方案.md
二、R统计引擎部署(全新服务)
2.1 服务概述
R统计引擎是 SSA(智能统计分析)模块的核心计算后端,采用 Brain-Hand 架构:Node.js 后端作为 Brain 负责调度,R Docker 作为 Hand 负责统计计算。
2.2 镜像信息
| 项目 |
值 |
| ACR 仓库 |
ssa-r-statistics |
| 镜像版本 |
v1.0.1 |
| 镜像地址 |
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ssa-r-statistics:v1.0.1 |
| 镜像大小 |
~1.8GB |
| 基础镜像 |
rocker/r-ver:4.3 |
| R版本 |
4.3.3 |
2.3 内置工具(13个)
| 工具代码 |
功能 |
descriptive |
描述性统计 |
t_test_ind |
独立样本T检验 |
t_test_paired |
配对T检验 |
mann_whitney |
Mann-Whitney U检验 |
wilcoxon |
Wilcoxon符号秩检验 |
chi_square |
卡方检验 |
fisher |
Fisher精确检验 |
anova_one |
单因素方差分析 |
correlation |
相关性分析 |
linear_reg |
线性回归 |
logistic_binary |
二元Logistic回归 |
baseline_table |
基线特征表 |
meta_analysis |
Meta分析 |
2.4 SAE 应用配置
| 配置项 |
值 |
| 应用名称 |
r-statistics-test |
| 实例规格 |
1核2GB |
| 实例数量 |
1 |
| 容器端口 |
8080 |
| 内网地址 |
http://172.17.173.101:8080 |
| 健康检查方式 |
HTTP 检查 |
| 健康检查路径 |
/health |
2.5 部署过程中的问题与解决
问题:SAE HTTP 健康检查返回 404
- 现象:Readiness probe 报
HTTP status code: 404, body: {"error":"404 - Resource Not Found"}
- 验证:通过 SAE Webshell 执行
curl http://localhost:8080/health 返回 200 OK,确认服务本身正常
- 解决:最终 HTTP 健康检查配置调整后恢复正常
三、Python微服务更新
3.1 更新内容
依赖变更(requirements-prod.txt):
| 变更 |
包名 |
用途 |
| 新增 |
scipy>=1.11.0 |
RVW V2.0 数据侦探:T检验、卡方检验逆向计算 |
代码变更:
| 模块 |
变更 |
forensics/ |
全新模块 - RVW V2.0 数据取证(5个文件) |
main.py |
注册 forensics API 路由 |
operations/data_profile.py |
新增 scipy 统计验证 |
3.2 镜像信息
| 项目 |
值 |
| ACR 仓库 |
python-extraction |
| 镜像版本 |
v1.1 → v1.2 |
| 镜像地址 |
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.2 |
| Digest |
sha256:be8612976255d706d652c5d16cb2e32c6e25b61a863d26c1ea7f63a9e0c95c86 |
| 基础镜像 |
python:3-slim |
3.3 SAE 应用配置
| 配置项 |
0126 部署 |
0227 部署 |
| 应用名称 |
python-extraction-test |
python-extraction-test |
| 实例规格 |
1核2GB |
2核4GB |
| 实例数量 |
1 |
1 |
| 容器端口 |
8000 |
8000 |
| 内网地址 |
172.17.173.84 |
172.17.173.102 |
| 镜像版本 |
v1.1 |
v1.2 |
规格从 1核2GB 升至 2核4GB,因为新增的 scipy、pandas、numpy 等科学计算库在 2 个 worker 下内存占用较高。
四、Node.js后端更新
4.1 更新内容
271个文件变更,50972行新增代码,主要包括:
| 类别 |
变更 |
| 新增依赖 |
adm-zip(ZIP处理)、json-logic-js(规则引擎) |
| 新增模块 |
SSA 统计分析、ASL 图表/提取/Meta分析、RVW Skills、系统知识库 |
| 重大更新 |
IIT CRA Agent V3.0(自主QC+Function Calling)、Deep Research V2.0 |
4.2 镜像信息
| 项目 |
值 |
| ACR 仓库 |
backend-service |
| 镜像版本 |
v1.7 → v2.2 |
| 镜像地址 |
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v2.2 |
| Digest |
sha256:5f5ede30c5ff107018176622c674b53c640816f288d49912434303d8a5253211 |
| 构建方式 |
tsc --noCheck + Docker 多阶段构建 |
4.3 SAE 应用配置
| 配置项 |
0126 部署 |
0227 部署 |
| 应用名称 |
nodejs-backend-test |
nodejs-backend-test |
| 实例规格 |
1核2GB |
2核4GB |
| 实例数量 |
1 |
1 |
| 容器端口 |
3001 |
3001 |
| 内网地址 |
172.17.173.89 |
172.17.197.28 |
| 镜像版本 |
v1.7 |
v2.2 |
4.4 新增环境变量
| 环境变量 |
值 |
说明 |
EXTRACTION_SERVICE_URL |
http://172.17.173.102:8000 |
Python 新地址 |
R_SERVICE_URL |
http://172.17.173.101:8080 |
R统计引擎(新增) |
UNIFUNCS_API_KEY |
sk-2fNwqUH7... |
Deep Research(新增) |
MINERU_API_TOKEN |
(长token) |
MinerU PDF提取(新增) |
MINERU_API_BASE |
https://mineru.net/api/v4 |
MinerU地址(新增) |
STORAGE_TYPE |
oss |
存储类型(新增) |
五、前端Nginx更新
5.1 更新内容
129个文件变更,32365行新增代码,主要包括:
| 类别 |
变更 |
| 新增依赖 |
react-markdown、remark-gfm(Markdown渲染) |
| 新增模块 |
SSA统计分析前端、ASL图表生成器/Meta分析引擎、IIT AI对话页 |
| nginx.conf |
client_max_body_size 50M、新增 /wechat/ 代理路由 |
5.2 镜像信息
| 项目 |
值 |
| ACR 仓库 |
ai-clinical_frontend-nginx |
| 镜像版本 |
v1.3 → v1.8 |
| Digest |
sha256:0a12b017ac6c85305fc5a716c5da245318c595fafd828c1222dd1a8ae79cfb26 |
5.3 SAE 应用配置
| 配置项 |
0126 部署 |
0227 部署 |
| 应用名称 |
frontend-nginx-service |
frontend-nginx-service |
| 实例规格 |
0.5核1GB |
0.5核1GB |
| 容器端口 |
80 |
80 |
| 内网地址 |
172.17.173.90 |
172.17.197.29 |
| 镜像版本 |
v1.3 |
v1.8 |
| BACKEND_SERVICE_HOST |
172.17.173.89 |
172.17.197.28 |
六、部署过程中的问题与解决
本次部署遇到 4 个问题,均已解决:
6.1 前端登录报错:Unexpected token '<' is not valid JSON
| 项目 |
内容 |
| 现象 |
登录页报 Unexpected token '<', "<html> <h"... is not valid JSON,api/v1/auth/refresh 返回 504 |
| 原因 |
前端 frontend-nginx-service 环境变量 BACKEND_SERVICE_HOST 未更新为后端新地址,Nginx 代理到旧 IP 超时,返回 HTML 错误页 |
| 解决 |
更新 BACKEND_SERVICE_HOST 为 172.17.197.28,重新部署前端 |
6.2 SSA 上传数据报错:column ssa_sessions.data_profile does not exist
| 项目 |
内容 |
| 现象 |
智能统计分析上传 CSV 后返回 500,prisma.ssaSession.create() 失败 |
| 原因 |
data_profile 列是 Phase 2A 通过 prisma db push 新增的,drift patch 迁移中遗漏了该列 |
| 解决 |
通过 SAE Webshell 执行 ALTER TABLE ssa_schema.ssa_sessions ADD COLUMN IF NOT EXISTS data_profile JSONB |
6.3 SSA 分析方案不推送:JSON 配置文件缺失
| 项目 |
内容 |
| 现象 |
上传数据成功并获得数据报告,但提交分析需求后无分析方案卡片,日志报 ENOENT: no such file or directory, open '/app/dist/modules/ssa/config/tools_registry.json' |
| 原因 |
tsc 编译只处理 .ts 文件,不会复制 .json 配置文件到 dist/ 目录。SSA 模块依赖 5 个 JSON 配置文件(tools_registry.json、decision_tables.json、flow_templates.json、intent_rules.json、tool_param_constraints.json) |
| 解决 |
修改 Dockerfile 增加 JSON 文件复制步骤,重新构建 v2.2 并部署 |
| 长期修复 |
Dockerfile 中增加 COPY src/modules/ssa/config/*.json ./dist/modules/ssa/config/ |
6.4 RVW 上传文件报错:column review_tasks.context_data does not exist
| 项目 |
内容 |
| 现象 |
智能审稿上传 docx 文件后返回 500,prisma.reviewTask.create() 失败 |
| 原因 |
review_tasks 表在 0126 部署后通过 prisma db push 新增了 8 个列(selected_agents、editorial_score、methodology_score、methodology_status、pico_extract、context_data、is_archived、archived_at),drift patch 中全部遗漏 |
| 解决 |
通过 SAE Webshell 执行 8 条 ALTER TABLE ADD COLUMN IF NOT EXISTS 语句补齐 |
6.5 经验教训
| 教训 |
改进措施 |
prisma db push 造成大量 Schema Drift |
开发环境也应使用 prisma migrate dev 生成迁移文件 |
tsc 不复制非 TS 文件 |
Dockerfile 中显式 COPY JSON/YAML 等资源文件 |
| SAE 每次部署 IP 会变 |
部署后立即检查所有服务间的 IP 依赖并同步更新 |
| drift patch 容易遗漏 |
部署前用脚本对比本地和 RDS 的完整列清单 |
七、CLB 负载均衡器更新
前端内网地址变更,CLB 后端服务器需同步更新:
| 配置项 |
旧值 |
新值 |
| CLB 后端服务器 |
172.17.173.90:80 |
172.17.197.29:80 |
如不更新,公网域名 https://iit.xunzhengyixue.com/ 将无法访问。
八、当前系统配置速查
数据库连接(测试环境)
服务内网地址
ACR 镜像版本
| 仓库 |
版本 |
ssa-r-statistics |
v1.0.1 |
python-extraction |
v1.2 |
backend-service |
v2.2 |
ai-clinical_frontend-nginx |
v1.8 |
公网访问
文档版本:v1.1
最后更新:2026-02-27(补充部署问题与解决记录)
维护人员:开发团队