Backend: - Redesign batch user import: add autoInheritModules param, users auto-inherit tenant modules when true - Add module validation: reject modules not subscribed by the tenant - Soften department validation: skip instead of fail when department name not found - Fix RVW skill status semantics: review findings (ERROR issues) no longer mark skill as error - Add parallel execution support to SkillExecutor via parallelGroup - Configure Editorial + Methodology skills to run in parallel (~240s -> ~130s) - Update legacy bridge error message to user-friendly text Frontend: - Redesign ImportUserModal: 4-step flow (select tenant -> upload -> preview -> result) - Simplify import template: remove tenant code and module columns - Show tenant subscribed modules before import with auto-inherit option - Fix isLegacyEmbed modules bypassing RouteGuard and TopNavigation permission checks - Hide ASL fulltext screening (step 3), renumber subsequent nav items - Add ExtractionWorkbenchGuide page when no taskId provided - Update legacy system error message to network-friendly text Docs: - Update deployment changelog with BE-9, FE-11 entries Made-with: Cursor
686 lines
27 KiB
Markdown
686 lines
27 KiB
Markdown
# 🚀 AI临床研究平台 - 阿里云SAE最新真实状态记录
|
||
|
||
> **文档用途**:记录阿里云SAE服务器最新真实状态 + 每次部署记录
|
||
> **最后更新**:2026-03-05
|
||
> **维护人员**:开发团队
|
||
> **说明**:本文档准确记录SAE上所有应用的当前状态,包括内网地址、镜像版本、用户名密码等关键资源信息
|
||
|
||
---
|
||
|
||
## 📊 一、当前部署状态一览
|
||
|
||
| 服务名称 | 部署状态 | 镜像版本 | 部署位置 | 最后更新时间 |
|
||
|---------|---------|---------|---------|-------------|
|
||
| **PostgreSQL数据库** | ✅ 运行中 | PostgreSQL 15 + 插件 | RDS | 2026-03-05 |
|
||
| **前端Nginx服务** | ✅ 运行中 | **v2.5** | SAE | 2026-03-05 |
|
||
| **Python微服务** | ✅ 运行中 | **v1.2** | SAE | 2026-02-27 |
|
||
| **Node.js后端** | ✅ 运行中 | **v2.8** | SAE | 2026-03-05 |
|
||
| **R统计引擎** | ✅ 运行中 | **v1.0.1** | SAE | 2026-02-27 |
|
||
| **Dify AI服务** | ⚠️ 已废弃 | - | - | 使用pgvector替代 |
|
||
|
||
---
|
||
|
||
## 🔑 二、阿里云资源信息
|
||
|
||
### 2.1 ACR容器镜像仓库
|
||
|
||
**基本信息**:
|
||
- **命名空间**:`ai-clinical`
|
||
- **Registry地址(公网)**:`crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com`
|
||
- **Registry地址(VPC)**:`crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com`
|
||
- **用户名**:`gofeng117@163.com`
|
||
- **密码**:`fengzhibo117`
|
||
|
||
**镜像仓库列表**:
|
||
|
||
| 仓库名称 | 最新版本 | 镜像大小 | VPC地址 |
|
||
|---------|---------|---------|---------|
|
||
| **python-extraction** | **v1.2** | ~1.1GB | `crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.2` |
|
||
| **ssa-r-statistics** | **v1.0.1** | ~1.8GB | `crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ssa-r-statistics:v1.0.1` |
|
||
| **ai-clinical_frontend-nginx** | **v2.5** | ~50MB | `crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v2.5` |
|
||
| **backend-service** | **v2.8** | ~838MB | `crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v2.8` |
|
||
|
||
---
|
||
|
||
### 2.2 VPC网络与NAT网关
|
||
|
||
**VPC信息**:
|
||
- **VPC ID**:`vpc-2ze055cptkew9c38w4r06`
|
||
- **VPC名称**:`ai-clinical-vpc`
|
||
- **网段**:`172.17.0.0/16`
|
||
- **地域**:华北2(北京)
|
||
- **交换机1**:`vsw-2zevacop039bxrmj6yc0c`(可用区F)
|
||
- **交换机2**:`vsw-2zehoeyw9ldncymcyvfwq`(可用区A)
|
||
- **安全组ID**:`sg-2zedk6fi8sgmmcwdu7tu`
|
||
|
||
**NAT网关信息**:
|
||
- **NAT网关名称**:`NAT_airesearch`
|
||
- **NAT网关ID**:`ngw-2zeec9ulzgw7ywvx1pst6`
|
||
- **公网IP(EIP)**:`182.92.176.14`
|
||
- **SNAT表ID**:`stb-2zesszmzx1qpwf1cb2bry`
|
||
|
||
---
|
||
|
||
### 2.3 RDS PostgreSQL数据库
|
||
|
||
**实例信息**:
|
||
- **实例ID**:`pgm-2zex1m2y3r23hdn5`
|
||
- **规格**:2核4GB(pg.n2.2c.1m)
|
||
- **存储空间**:100GB(SSD云盘)
|
||
- **PostgreSQL版本**:15.0
|
||
- **内网地址**:`pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432`
|
||
- **外网地址**:`pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com`(⚠️ 已关闭)
|
||
- **最大连接数**:400
|
||
- **时区**:Asia/Shanghai
|
||
- **白名单**:172.17.0.0/16(VPC网段)
|
||
|
||
**数据库配置**:
|
||
- **数据库名**:`ai_clinical_research`
|
||
- **用户名**:`airesearch`
|
||
- **密码**:`Xibahe@fengzhibo117`
|
||
- **字符集**:UTF8
|
||
- **排序规则**:en_US.utf8
|
||
|
||
**连接字符串**:
|
||
```
|
||
postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research
|
||
```
|
||
⚠️ 注意:密码中的 `@` 需要URL编码为 `%40`
|
||
|
||
**数据库环境**(2026-01-27更新):
|
||
|
||
| 数据库 | 环境 | Schema数量 | 表数量 | 插件 | 用途 |
|
||
|--------|------|-----------|-------|------|------|
|
||
| `ai_clinical_research_test` | 测试环境(当前) | 16 | **86** | pg_bigm, pgvector | SAE测试环境 |
|
||
| `ai_clinical_research` | 生产环境(备用) | 11 | ~34 | pg_bigm, pgvector | 未来正式上线 |
|
||
|
||
**Schema架构**(16个业务Schema - 测试数据库):
|
||
|
||
| Schema名称 | 功能模块 | 表数量 | 说明 |
|
||
|-----------|---------|-------|------|
|
||
| `platform_schema` | 平台核心 | 19 | 用户、权限、任务队列(pg-boss) |
|
||
| `aia_schema` | AI智能问答 | 3 | AI项目、对话、消息 |
|
||
| `asl_schema` | 系统文献筛查 | 7 | 项目、文献、筛查记录 |
|
||
| `pkb_schema` | 个人知识库 | 5 | 知识库、文档、批处理 |
|
||
| `dc_schema` | 数据清洗 | 6 | 工具A/B/C数据处理 |
|
||
| `iit_schema` | IIT Manager Agent | 22 | IIT项目管理、QC质控引擎、审计日志 |
|
||
| `agent_schema` | Agent框架 | 6 | Agent定义、会话、追踪 |
|
||
| `ekb_schema` | 企业知识库 | 3 | 知识库、文档、向量 |
|
||
| `capability_schema` | 通用能力 | 2 | Prompt模板、版本 |
|
||
| `protocol_schema` | 方案设计 | 2 | 研究方案生成 |
|
||
| `admin_schema` | 系统管理 | 2 | 操作日志 |
|
||
| `rvw_schema` | 文献回顾 | 1 | 审查任务 |
|
||
| `ssa_schema` | 智能统计分析 | 11 | 工作流、分析结果、报告生成 |
|
||
| `st_schema` | 统计工具 | 0 | 预留 |
|
||
| `common_schema` | 公共模块 | 0 | 预留 |
|
||
| `public` | 兼容旧数据 | 2 | 旧表兼容 |
|
||
|
||
---
|
||
|
||
### 2.4 SAE Serverless应用
|
||
|
||
**命名空间**:
|
||
- **命名空间ID**:`cn-beijing:test-airesearch`
|
||
- **地域**:华北2(北京)
|
||
|
||
**已部署应用列表**:
|
||
|
||
| 应用名称 | 状态 | 规格 | 实例数 | 端口 | 内网地址 | 镜像版本 |
|
||
|---------|------|------|-------|------|---------|---------|
|
||
| **r-statistics-test** | ✅ 运行中 | 1核2GB | 1 | 8080 | `http://172.17.173.101:8080` | **v1.0.1** |
|
||
| **python-extraction-test** | ✅ 运行中 | **2核4GB** | 1 | 8000 | `http://172.17.173.102:8000` | **v1.2** |
|
||
| **nodejs-backend-test** | ✅ 运行中 | **2核4GB** | 1 | 3001 | `http://172.17.173.106:3001` | **v2.8** |
|
||
| **frontend-nginx-service** | ✅ 运行中 | 0.5核1GB | 1 | 80 | `http://172.17.173.107:80` | **v2.5** |
|
||
|
||
**环境变量配置**:
|
||
|
||
**Node.js后端(nodejs-backend-test)**:
|
||
```bash
|
||
NODE_ENV=production
|
||
PORT=3001
|
||
DATABASE_URL=postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research_test?connection_limit=18&pool_timeout=10
|
||
|
||
# Python微服务地址
|
||
EXTRACTION_SERVICE_URL=http://172.17.173.102:8000
|
||
|
||
# R统计引擎地址
|
||
R_SERVICE_URL=http://172.17.173.101:8080
|
||
|
||
# OSS配置
|
||
OSS_ACCESS_KEY_ID=LTAI5tB2Dt3NdvBL3G7nYGv7
|
||
OSS_ACCESS_KEY_SECRET=1iSN9k39RkApP93QjUhC1DcPIeMG4V
|
||
OSS_BUCKET=ai-clinical-research
|
||
OSS_ENDPOINT=oss-cn-beijing-internal.aliyuncs.com
|
||
OSS_REGION=cn-beijing
|
||
STORAGE_TYPE=oss
|
||
|
||
# JWT密钥
|
||
JWT_SECRET=8a3f9e7c2d1b5a4e6f8c9d0a3b5e7f1c2a4b6c8d0e2f4a6b8c0d2e4f6a8b0c2d4
|
||
JWT_EXPIRES_IN=7d
|
||
|
||
# LLM API Keys
|
||
DEEPSEEK_API_KEY=sk-7f8cc37a79fa4799860b38fc7ba2e150
|
||
DASHSCOPE_API_KEY=sk-75b4ff29a14a49e79667a331034f3298
|
||
|
||
# CloseAI配置
|
||
CLOSEAI_API_KEY=sk-cu0iepbXYGGx2jc7BqP6ogtSWmP6fk918qV3RUdtGC3Ed1po
|
||
CLOSEAI_OPENAI_BASE_URL=https://api.openai-proxy.org/v1
|
||
CLOSEAI_CLAUDE_BASE_URL=https://api.openai-proxy.org/anthropic
|
||
|
||
# Deep Research
|
||
UNIFUNCS_API_KEY=sk-2fNwqUH7...
|
||
|
||
# MinerU PDF提取
|
||
MINERU_API_BASE=https://mineru.net/api/v4
|
||
|
||
# Postgres-Only架构
|
||
QUEUE_TYPE=pgboss
|
||
CACHE_TYPE=postgres
|
||
|
||
# 企业微信配置
|
||
WECHAT_CORP_ID=ww6ab493470ab4f377
|
||
WECHAT_AGENT_ID=1000002
|
||
WECHAT_CORP_SECRET=AZIVxMtoLb0rEszXS81e4dBRl-I9kgTjygIS0cFfENU
|
||
|
||
# 旧系统 MySQL 连接(Legacy Bridge)
|
||
LEGACY_MYSQL_HOST=8.154.22.149
|
||
LEGACY_MYSQL_PORT=3306
|
||
LEGACY_MYSQL_USER=root
|
||
LEGACY_MYSQL_DATABASE=xzyx_online
|
||
```
|
||
|
||
**前端Nginx(frontend-nginx-service)**:
|
||
```bash
|
||
BACKEND_SERVICE_HOST=172.17.173.106
|
||
BACKEND_SERVICE_PORT=3001
|
||
```
|
||
|
||
**Python微服务(python-extraction-test)**:
|
||
```bash
|
||
LOG_LEVEL=INFO
|
||
TEMP_DIR=/tmp/extraction_service
|
||
```
|
||
|
||
---
|
||
|
||
### 2.5 OSS对象存储
|
||
|
||
**Bucket信息**:
|
||
- **Bucket名称**:`ai-clinical-research`
|
||
- **地域**:华北2(北京)
|
||
- **存储类型**:标准存储
|
||
- **访问控制**:私有
|
||
- **存储冗余类型**:同城冗余存储
|
||
- **内网Endpoint**:`oss-cn-beijing-internal.aliyuncs.com`
|
||
- **公网Endpoint**:`oss-cn-beijing.aliyuncs.com`
|
||
- **Bucket域名(内网)**:`ai-clinical-research.oss-cn-beijing-internal.aliyuncs.com`
|
||
- **创建时间**:2025-12-16 20:22
|
||
|
||
**RAM用户访问凭证**:
|
||
- **RAM用户名**:`oss-bucket-put-object@1991407246109125.onaliyun.com`
|
||
- **AccessKeyId**:`LTAI5tB2Dt3NdvBL3G7nYGv7`
|
||
- **AccessKeySecret**:`1iSN9k39RkApP93QjUhC1DcPIeMG4V`
|
||
- **UID**:`203256565888301026`
|
||
- **创建时间**:2025-12-16 20:31:41
|
||
|
||
⚠️ **安全警告**:AccessKey是敏感信息,请勿提交到公开Git仓库!
|
||
|
||
**存储用途**:
|
||
- `/uploads/pdfs/` - PDF文件上传
|
||
- `/uploads/docx/` - Word文档上传
|
||
- `/uploads/txt/` - 文本文件上传
|
||
- `/exports/` - 导出文件临时存储
|
||
|
||
---
|
||
|
||
### 2.6 CLB负载均衡器
|
||
|
||
**公网访问地址**:
|
||
- **公网IP**:`8.140.53.236`
|
||
- **访问地址**:`http://8.140.53.236/`
|
||
- **域名绑定**:`https://iit.xunzhengyixue.com/`(已备案)
|
||
- **后端服务器**:`172.17.173.80:80`(前端Nginx)
|
||
- **监听端口**:80(HTTP)
|
||
|
||
---
|
||
|
||
## 📦 三、已部署服务详情
|
||
|
||
### 3.1 PostgreSQL数据库
|
||
|
||
- **部署时间**:2025-12-24
|
||
- **部署方式**:`pg_dump` 全量导出 → RDS导入
|
||
- **数据迁移时长**:约12秒(90MB SQL文件)
|
||
- **验证状态**:✅ Schema完整、数据一致、关系正确
|
||
- **备份文件**:`AIclinicalresearch/rds_init_20251224_154529.sql`(90MB)
|
||
- **RDS自动备份**:每日凌晨2点(保留7天)
|
||
|
||
---
|
||
|
||
### 3.2 前端Nginx服务
|
||
|
||
**当前部署版本**:v2.4
|
||
|
||
**镜像信息**:
|
||
- **仓库名称**:`ai-clinical_frontend-nginx`
|
||
- **镜像版本**:`v2.4` ✅(当前部署版本)
|
||
- **镜像大小**:约50MB
|
||
- **基础镜像**:`nginx:alpine`
|
||
- **构建时间**:2026-03-05
|
||
- **镜像摘要**:sha256:6cb9e8be2bcd21fd8ccfe09dabdbb04d64c252fd9a5b5b3a55d5ba6fb52dcde1
|
||
|
||
**部署状态**:
|
||
- ✅ 已成功部署到SAE(2026-03-05)
|
||
- ✅ 服务运行正常(内网地址:http://172.17.173.107:80)
|
||
- ✅ 企业微信域名验证文件已部署(WW_verify_YnhsQBwI0ARnNoG0.txt)
|
||
|
||
**v2.5版本更新内容**:
|
||
- ✅ 前端 bug 修复和 UI 优化(基于测试反馈,0305 三次迭代)
|
||
- ⚠️ 部署后内网地址变更:172.17.173.105 → 172.17.173.107
|
||
|
||
**Git文件结构**:
|
||
```
|
||
AIclinicalresearch/frontend-v2/
|
||
├── Dockerfile ✅ 已提交Git(多阶段构建)
|
||
├── .dockerignore ✅ 已提交Git(优化构建上下文)
|
||
├── nginx.conf ✅ 已提交Git(Nginx配置)
|
||
├── docker-entrypoint.sh ✅ 已提交Git(启动脚本,Unix换行符)
|
||
└── public/
|
||
└── WW_verify_YnhsQBwI0ARnNoG0.txt ✅ 企业微信域名验证文件
|
||
```
|
||
|
||
---
|
||
|
||
### 3.3 Node.js后端服务
|
||
|
||
**当前部署版本**:v2.6
|
||
|
||
**镜像信息**:
|
||
- **仓库名称**:`backend-service`
|
||
- **镜像版本**:`v2.6` ✅(已部署)
|
||
- **镜像大小**:~838MB
|
||
- **基础镜像**:`node:alpine`
|
||
- **构建时间**:2026-03-05
|
||
- **构建策略**:改进版方案B(本地编译+Docker打包)
|
||
- **镜像摘要**:sha256:45886ffd90edbaf6b9a57c1938f14b076fdae175b5d8e53caebabdd8c7ef8b7c
|
||
|
||
**技术架构**:
|
||
- **Node.js版本**:22.x
|
||
- **Prisma版本**:6.17.0
|
||
- **ORM**:Prisma(支持多Schema)
|
||
- **Web框架**:Fastify
|
||
- **队列系统**:pg-boss(Postgres-Only架构)
|
||
- **缓存系统**:PostgreSQL(替代Redis)
|
||
|
||
**部署状态**:
|
||
- ✅ 已成功部署到SAE(2026-03-05)
|
||
- ✅ 服务运行正常(内网地址:http://172.17.173.106:3001)
|
||
- ✅ 健康检查通过
|
||
|
||
**Git文件结构**:
|
||
```
|
||
AIclinicalresearch/backend/
|
||
├── Dockerfile ✅ 已提交Git(改进版方案B:本地编译+Docker打包)
|
||
├── .dockerignore ✅ 已提交Git(优化构建上下文)
|
||
├── prisma/schema.prisma ✅ 已同步RDS(32个模型+30+关系字段)
|
||
└── tsconfig.json ✅ 已优化(排除测试文件)
|
||
```
|
||
|
||
---
|
||
|
||
### 3.4 Python微服务
|
||
|
||
**当前部署版本**:v1.2
|
||
|
||
**镜像信息**:
|
||
- **仓库名称**:`python-extraction`
|
||
- **镜像版本**:`v1.2` ✅(已部署)
|
||
- **镜像大小**:~1.1GB
|
||
- **基础镜像**:`python:3-slim`
|
||
- **构建时间**:2026-02-27
|
||
|
||
**功能模块**:
|
||
- ✅ **PDF文本提取**:PyMuPDF
|
||
- ✅ **Docx文档提取**:Mammoth + python-docx
|
||
- ✅ **数据清洗(DC工具)**:pandas / numpy / polars
|
||
- ✅ **语言检测**:langdetect
|
||
- ✅ **数据取证(RVW V2.0)**:scipy(T检验、卡方检验逆向计算)
|
||
|
||
**部署状态**:
|
||
- ✅ 已部署到SAE(2026-02-27)
|
||
- ✅ 应用运行正常(2个worker进程,2核4GB)
|
||
- ✅ 内网访问地址:`http://172.17.173.102:8000`
|
||
- ✅ 健康检查通过
|
||
|
||
**Git文件结构**:
|
||
```
|
||
AIclinicalresearch/extraction_service/
|
||
├── Dockerfile ✅ 已提交Git(多阶段构建 + 阿里云源)
|
||
├── .dockerignore ✅ 已提交Git(优化构建上下文)
|
||
└── requirements-prod.txt ✅ 已提交Git(精简依赖列表)
|
||
```
|
||
|
||
---
|
||
|
||
## 🔄 四、部署历史记录
|
||
|
||
### 2026-03-05(0305部署 - 登录踢人 + 权限体系升级 + SSA双通道 + UI优化)
|
||
|
||
#### 部署概览
|
||
- **部署时间**:2026-03-05
|
||
- **部署范围**:数据库数据更新(1项) + Node.js后端 + 前端Nginx
|
||
- **主要变更**:登录踢人机制、模块权限体系升级、SSA Agent双通道、前端UI精简
|
||
|
||
#### 数据库数据更新(1项)
|
||
- ✅ DB-1:modules 表 seed 更新(新增 RM、AIA_PROTOCOL,IIT→CRA质控)
|
||
- ⏭️ DB-2:RVW Prompt 更新(用户指定不执行)
|
||
- ⏭️ DB-3:SSA 双通道表结构(待后续部署)
|
||
|
||
#### Node.js后端更新(v2.4 → v2.6)
|
||
- ✅ 登录踢人机制:同一手机号只能一人同时在线(JWT tokenVersion)
|
||
- ✅ 模块权限一致性修复 + 校验放宽 + user_modules 独立生效
|
||
- ✅ SSA 双通道架构:Agent 模式 4 服务 + ChatHandler 分流
|
||
- ✅ 批量导入用户增加 autoInheritModules + 模块校验
|
||
- ✅ 镜像构建推送:`backend-service:v2.6`(digest: sha256:17dc3b3b...)
|
||
- ✅ SAE部署成功,内网地址变更:`172.17.197.32` → `172.17.197.36`
|
||
|
||
#### 前端Nginx更新(v2.0 → v2.3)
|
||
- ✅ ASL 模块 UI 精简 + 默认进入智能文献检索
|
||
- ✅ AIA Protocol Agent 按权限动态显示 + 链接修正
|
||
- ✅ 首页重定向到 `/ai-qa` + PKB 隐藏科室选择
|
||
- ✅ 被踢出提示 + 运营端模块权限弹窗 + 批量导入重构
|
||
- ✅ 镜像构建推送:`ai-clinical_frontend-nginx:v2.3`(digest: sha256:db031053...)
|
||
- ✅ SAE部署成功,内网地址变更:`172.17.197.32` → `172.17.173.104`
|
||
|
||
#### 环境变量同步
|
||
- ✅ `frontend-nginx-service` 的 `BACKEND_SERVICE_HOST` 更新为 `172.17.197.36`
|
||
- ℹ️ CLB 由阿里云自动更新,无需手动操作
|
||
|
||
#### 二次热修部署(同日)
|
||
- ✅ SSA 双通道数据库迁移:ssa_sessions 新增 execution_mode + ssa_agent_executions 表
|
||
- ✅ 前端/后端 bug 修复(基于测试反馈)
|
||
- ✅ 后端 v2.6 → v2.7 → **v2.8**,前端 v2.3 → v2.4 → **v2.5**
|
||
- ✅ 后端内网地址最终:`172.17.173.106`
|
||
- ✅ 前端内网地址最终:`172.17.173.107`
|
||
|
||
#### 文档产出
|
||
- ✅ `0305部署/01-部署完成总结.md`
|
||
- ✅ `00-阿里云SAE最新真实状态记录.md`(更新)
|
||
- ✅ `01-日常更新操作手册.md`(更新)
|
||
- ✅ `03-待部署变更清单.md`(清零移入历史)
|
||
|
||
---
|
||
|
||
### 2026-03-02(0302部署 - 数据库迁移6个 + IIT V3.1 QC引擎全面升级)
|
||
|
||
#### 部署概览
|
||
- **部署时间**:2026-03-02
|
||
- **部署范围**:数据库迁移(6个) + Node.js后端 + 前端Nginx 全量更新
|
||
- **主要变更**:IIT V3.1 QC引擎架构全面升级、GCP报表、D1-D7七维分类体系
|
||
|
||
#### 数据库迁移(6个)
|
||
- ✅ SSA 表类型精度对齐 + 清理重复 FK
|
||
- ✅ Phase 2: user_mappings/projects RBAC + UserRole 加 IIT_OPERATOR
|
||
- ✅ IIT projects 加 is_demo 标记
|
||
- ✅ **新建 qc_field_status 五级坐标表** + qc_logs/equery 加 instance_id
|
||
- ✅ **新建 qc_event_status 事件聚合表** + record_summary 加 13 列
|
||
- ✅ qc_project_stats 加健康度评分 9 列
|
||
- ✅ RDS 表数量:84 → **86**(新增 qc_field_status、qc_event_status)
|
||
- ✅ 本地 vs RDS 模式对比:iit_schema + ssa_schema **442 列完全一致**
|
||
|
||
#### Node.js后端更新(v2.3 → v2.4)
|
||
- ✅ IIT V3.1 QC 引擎:QcExecutor / QcAggregator / CompletenessEngine / ProtocolDeviationEngine / HealthScoreEngine
|
||
- ✅ D1-D7 七维分类体系 + 五级坐标标准化
|
||
- ✅ GCP 报表 API:D1 筛选入选 / D2 完整性 / D3D4 eQuery 生命周期 / D6 方案偏离
|
||
- ✅ 项目级 cronExpression 调度器重构
|
||
- ✅ 镜像构建推送:`backend-service:v2.4`(digest: sha256:7848b1b5...)
|
||
- ✅ SAE部署成功,内网地址变更:`172.17.197.30` → `172.17.197.32`
|
||
|
||
#### 前端Nginx更新(v1.9 → v2.0)
|
||
- ✅ Dashboard 健康度评分 + D1-D7 维度条 + 热力图 record×event 矩阵
|
||
- ✅ GCP 报表重构为 5 Tab(执行摘要 + D1/D2/D3D4/D6)
|
||
- ✅ 新增 GCP 组件:EligibilityTable / CompletenessTable / EqueryLogTable / DeviationLogTable
|
||
- ✅ 管理端 QcDetailDrawer / RiskHeatmap / 方案偏离弹窗升级
|
||
- ✅ 镜像构建推送:`ai-clinical_frontend-nginx:v2.0`(digest: sha256:ad24ccde...)
|
||
- ✅ SAE部署成功,内网地址变更:`172.17.197.31` → `172.17.197.32`
|
||
|
||
#### 环境变量同步
|
||
- ✅ `frontend-nginx-service` 的 `BACKEND_SERVICE_HOST` 更新为 `172.17.197.32`
|
||
- ℹ️ CLB 由阿里云自动更新,无需手动操作
|
||
|
||
#### 文档产出
|
||
- ✅ `0302部署/01-部署完成总结.md`
|
||
- ✅ `00-阿里云SAE最新真实状态记录.md`(更新)
|
||
- ✅ `01-日常更新操作手册.md`(更新)
|
||
- ✅ `03-待部署变更清单.md`(清零移入历史)
|
||
|
||
---
|
||
|
||
### 2026-02-28(0228部署 - Node.js后端 + 前端更新 - 旧系统集成上线)
|
||
|
||
#### 部署概览
|
||
- **部署时间**:2026-02-28
|
||
- **部署范围**:Node.js后端 + 前端Nginx 更新
|
||
- **主要变更**:旧系统集成(Wrapper Bridge)上线、ASL图表/Meta分析、IIT AI对话页等
|
||
|
||
#### Node.js后端更新(v2.2 → v2.3)
|
||
- ✅ 新增模块:Legacy Bridge(旧系统集成认证服务)
|
||
- ✅ 新增依赖:`mysql2`(连接旧系统MySQL)
|
||
- ✅ 新增环境变量:`LEGACY_MYSQL_HOST`、`LEGACY_MYSQL_PORT`、`LEGACY_MYSQL_USER`、`LEGACY_MYSQL_DATABASE`
|
||
- ✅ 新增 API:`POST /api/v1/legacy/auth`(旧系统Token注入)
|
||
- ✅ 镜像构建推送:`backend-service:v2.3`(digest: sha256:6e25d13c...)
|
||
- ✅ SAE部署成功,内网地址变更:`172.17.197.28` → `172.17.197.30`
|
||
|
||
#### 前端Nginx更新(v1.8 → v1.9)
|
||
- ✅ 新增模块:Legacy System iframe嵌入(研究管理 + 统计工具)
|
||
- ✅ 新增组件:`LegacySystemPage`、`ResearchManagement`、`StatisticalTools`
|
||
- ✅ 镜像构建推送:`ai-clinical_frontend-nginx:v1.9`(digest: sha256:ff3c1915...)
|
||
- ✅ SAE部署成功,内网地址变更:`172.17.197.29` → `172.17.197.31`
|
||
|
||
#### 环境变量同步
|
||
- ✅ `frontend-nginx-service` 的 `BACKEND_SERVICE_HOST` 更新为 `172.17.197.30`
|
||
- ℹ️ CLB 由阿里云自动更新,无需手动操作
|
||
|
||
#### 文档产出
|
||
- ✅ `0228部署/01-部署完成总结.md`
|
||
- ✅ `00-阿里云SAE最新真实状态记录.md`(更新)
|
||
|
||
---
|
||
|
||
### 2026-02-27(0227部署 - 数据库迁移 + R统计引擎 + Python更新)
|
||
|
||
#### 部署概览
|
||
- **部署时间**:2026-02-27
|
||
- **部署范围**:数据库Schema迁移、R统计引擎全新部署、Python微服务更新
|
||
- **主要变更**:6个Prisma迁移(含1个drift补丁)、新增R Docker服务、Python新增scipy
|
||
|
||
#### 数据库迁移
|
||
- ✅ 应用 5 个业务迁移 + 1 个drift补丁迁移
|
||
- ✅ RDS 表数量从 63 增至 84(新增 21 张表)
|
||
- ✅ 同步 Seed 数据:SSA工具库 13条 + IIT技能库 8条
|
||
- ✅ 已有数据完整性验证通过(Prompt模板、用户数据零丢失)
|
||
|
||
#### R统计引擎(全新部署)
|
||
- ✅ 镜像构建并推送:`ssa-r-statistics:v1.0.1`(~1.8GB)
|
||
- ✅ SAE应用创建:`r-statistics-test`,1核2GB
|
||
- ✅ 内网地址:`http://172.17.173.101:8080`
|
||
- ✅ 内置 13 个统计工具(描述统计、T检验、卡方检验、回归、Meta分析等)
|
||
- ✅ 健康检查配置完成(HTTP /health)
|
||
|
||
#### Python微服务更新(v1.1 → v1.2)
|
||
- ✅ 新增依赖:scipy(RVW V2.0 数据取证)
|
||
- ✅ 新增代码:forensics 数据取证模块
|
||
- ✅ 实例规格升级:1核2GB → 2核4GB
|
||
- ✅ 内网地址变更:`172.17.173.84` → `172.17.173.102`
|
||
|
||
#### 文档产出
|
||
- ✅ `0227部署/01-数据库迁移方案.md`
|
||
- ✅ `0227部署/02-部署完成总结.md`
|
||
- ✅ `00-阿里云SAE最新真实状态记录.md`(更新)
|
||
|
||
---
|
||
|
||
### 2026-01-27(0126部署 - 数据库升级 + 全量服务更新)🎉
|
||
|
||
#### 部署概览
|
||
- **部署时间**:2026-01-26 ~ 2026-01-27(跨2天)
|
||
- **部署范围**:数据库、Python、后端、前端全量更新
|
||
- **主要变更**:数据库插件、环境分离、代码恢复、ES Module修复
|
||
|
||
#### 数据库升级
|
||
- ✅ 创建测试数据库 `ai_clinical_research_test`
|
||
- ✅ 安装 pg_bigm 插件(v1.2,中文全文检索)
|
||
- ✅ 安装 pgvector 插件(v0.8.0,向量存储)
|
||
- ✅ 本地数据库迁移到RDS(17.51MB,63个表,16个Schema)
|
||
- ✅ Prisma Schema同步(63个模型)
|
||
- ✅ 两个数据库都安装插件
|
||
|
||
#### Python微服务更新(v1.0 → v1.1)
|
||
- ✅ 新增依赖:pymupdf4llm(替代nougat)、openpyxl、pypandoc、python-pptx
|
||
- ✅ Dockerfile添加pandoc系统依赖
|
||
- ✅ SAE部署成功,新IP:172.17.173.84
|
||
|
||
#### Node.js后端更新(v1.3 → v1.7)
|
||
- ✅ 修复pino-pretty生产环境错误(条件加载)
|
||
- ✅ 修复ES Module导入路径(添加.js扩展名)
|
||
- ✅ 环境变量更新:DATABASE_URL、EXTRACTION_SERVICE_URL、OSS配置
|
||
- ✅ 移除废弃变量:REDIS_URL、DIFY_API_URL、DIFY_API_KEY
|
||
- ✅ SAE部署成功,新IP:172.17.173.89
|
||
|
||
#### 前端Nginx更新(v1.2 → v1.3)
|
||
- ✅ 修复Dockerfile构建(跳过TypeScript类型检查)
|
||
- ✅ 代码恢复(从本地备份恢复空文件)
|
||
- ✅ 环境变量更新:BACKEND_SERVICE_HOST
|
||
- ✅ SAE部署成功,新IP:172.17.173.90
|
||
|
||
#### 解决的关键问题
|
||
1. ✅ 大量空文件恢复(前端/后端)
|
||
2. ✅ Prisma Schema与数据库不一致
|
||
3. ✅ pino-pretty在生产环境失败
|
||
4. ✅ ES Module导入路径缺少.js扩展名
|
||
5. ✅ TypeScript类型检查阻塞构建
|
||
|
||
#### 文档产出
|
||
- ✅ 部署总体计划
|
||
- ✅ 数据库升级方案
|
||
- ✅ OSS环境配置方案
|
||
- ✅ Python/后端/前端部署方案
|
||
- ✅ IIT回调地址修复方案
|
||
- ✅ 0126部署状态真实记录
|
||
- ✅ 数据库开发规范v2.0
|
||
|
||
#### 部署成果
|
||
- 🎉 数据库成功分离测试/生产环境
|
||
- 🎉 全量服务更新至最新代码
|
||
- 🎉 所有关键Bug已修复
|
||
- 🎉 完整部署文档体系建立
|
||
|
||
---
|
||
|
||
### 2026-01-01(前端v1.2部署 - 企业微信域名验证)✅
|
||
|
||
#### 部署背景
|
||
- **目的**:为企业微信接入配置可信域名,需要在前端根目录部署域名验证文件
|
||
- **域名**:https://iit.xunzhengyixue.com/
|
||
- **验证文件**:WW_verify_YnhsQBwI0ARnNoG0.txt
|
||
|
||
#### 部署过程与问题修复
|
||
1. **问题发现**:前端v1.1部署失败,容器启动后立即退出
|
||
- ❌ 现象:SAE日志为空,容器状态显示"崩溃或退出"
|
||
- ❌ 错误:`exec /docker-entrypoint.sh: no such file or directory`
|
||
|
||
2. **根本原因分析**:
|
||
- 🔍 `docker-entrypoint.sh` 使用了Windows换行符(CRLF `\r\n`)
|
||
- 🔍 Linux容器的bash解释器无法识别CRLF格式的脚本
|
||
- 🔍 这是一个典型的跨平台开发问题
|
||
|
||
3. **解决方案**:
|
||
- ✅ 将 `docker-entrypoint.sh` 转换为Unix换行符(LF `\n`)
|
||
- ✅ 使用PowerShell命令批量转换
|
||
- ✅ 本地Docker测试验证通过
|
||
|
||
4. **镜像构建与推送**:
|
||
- ✅ 重新构建镜像标记为v1.2(23.7秒)
|
||
- ✅ 推送到ACR成功(digest: 1b444d3d...)
|
||
- ✅ 镜像包含企业微信验证文件
|
||
|
||
5. **SAE部署成功**:
|
||
- ✅ 部署镜像版本:v1.2
|
||
- ✅ 环境变量配置:`BACKEND_SERVICE_HOST=172.17.197.30`, `BACKEND_SERVICE_PORT=3001`
|
||
- ✅ 容器启动正常,健康检查通过
|
||
- ✅ 新内网地址:`http://172.17.173.80:80`
|
||
- ⚠️ IP地址变化:172.17.173.72 → 172.17.173.80
|
||
|
||
#### 技术要点总结
|
||
1. **Windows换行符问题**:
|
||
- 原因:Git在Windows上默认转换为CRLF
|
||
- 解决:使用 `.gitattributes` 或手动转换
|
||
- 验证:`(Get-Content file -Raw) -match "\`r\`n"`
|
||
|
||
2. **容器调试技巧**:
|
||
- 本地测试:`docker run --rm -e KEY=VALUE image:tag`
|
||
- 查看日志:`docker logs container_name`
|
||
- 进入容器:`docker exec -it container sh`
|
||
|
||
3. **SAE部署最佳实践**:
|
||
- 环境变量必须配置完整
|
||
- 本地先验证镜像可正常运行
|
||
- 部署后IP可能变化,需要更新依赖服务的配置
|
||
|
||
#### 部署结果
|
||
- ✅ 前端服务v1.2部署成功
|
||
- ✅ 企业微信验证文件可访问
|
||
- ✅ 系统整体运行正常
|
||
- ⚠️ 需要注意:内网地址已更新,依赖前端的服务需要调整配置
|
||
|
||
---
|
||
|
||
### 2025-12-25(完整部署成功日)🎉
|
||
|
||
#### 上午:Node.js后端部署
|
||
- ✅ Node.js后端成功部署到SAE(v1.3)
|
||
- ✅ 修复Alpine Linux bash路径问题(/bin/bash → /bin/sh)
|
||
- ✅ 修复config目录缺失问题(Dockerfile补充COPY config)
|
||
- ✅ 修复pino-pretty生产环境问题(条件启用)
|
||
- ✅ 修复healthCheck ES Module兼容性(require → import)
|
||
- ✅ 生成强JWT密钥(64位十六进制)
|
||
|
||
#### 中午:前端Nginx部署
|
||
- ✅ 前端Nginx成功部署到SAE(v1.0)
|
||
- ✅ 前端服务运行正常(内网地址:http://172.17.173.72:80)
|
||
- ✅ 前端到后端代理验证通过
|
||
- ✅ 完整链路测试通过(前端→后端→数据库)
|
||
|
||
#### 下午:环境变量修复与CLB配置
|
||
- ✅ 发现工具C的7大功能报错(connect ECONNREFUSED 127.0.0.1:8000)
|
||
- ✅ 排查并修复关键问题:环境变量名错误
|
||
- 代码使用:`EXTRACTION_SERVICE_URL`
|
||
- 错误配置:`PYTHON_SERVICE_URL`
|
||
- 正确配置:`EXTRACTION_SERVICE_URL=http://172.17.173.66:8000`
|
||
- ✅ Node.js后端重新部署,IP地址更新为:http://172.17.173.73:3001
|
||
- ✅ 更新前端Nginx环境变量:BACKEND_SERVICE_HOST=172.17.197.30
|
||
- ✅ 配置CLB负载均衡器,获得公网访问地址:http://8.140.53.236/
|
||
- ✅ 工具C的7大功能全部测试通过
|
||
- ✅ 文献筛查模块测试通过
|
||
- ✅ 完整系统部署成功验证 🎉
|
||
|
||
---
|
||
|
||
### 2025-12-24(初始部署)
|
||
|
||
- ✅ PostgreSQL数据库部署完成
|
||
- ✅ 前端Nginx Docker镜像构建并推送至ACR
|
||
- ✅ Python微服务Docker镜像构建并推送至ACR
|
||
- ✅ Python微服务成功部署到SAE(内网地址:172.17.173.66:8000)
|
||
- ✅ 解决ACR镜像拉取权限问题(配置镜像仓库认证)
|
||
- ✅ Node.js后端Prisma反向同步完成(32个模型,手动补全30+关系字段)
|
||
- ✅ Node.js后端TypeScript编译修复完成(修复200+错误→0错误)
|
||
- ✅ Node.js后端Docker镜像构建成功(838MB,改进版方案B)
|
||
- ✅ Node.js后端镜像推送至ACR(v1.0)
|
||
|
||
---
|
||
|
||
> **提示**:本文档记录SAE服务器的最新真实状态,每次部署后必须更新!
|
||
> **最后更新**:2026-03-05
|
||
> **当前版本**:前端v2.5 | 后端v2.8 | Python v1.2 | R统计v1.0.1 | PostgreSQL 15
|