feat(iit): Complete IIT Manager Agent Day 1 - Environment initialization and WeChat integration

Summary:
- Complete IIT Manager Agent MVP Day 1 (12.5% progress)
- Database: Create iit_schema with 5 tables (IitProject, IitPendingAction, IitTaskRun, IitUserMapping, IitAuditLog)
- Backend: Add module structure (577 lines) and types (223 lines)
- WeChat: Configure Enterprise WeChat app (CorpID, AgentID, Secret)
- WeChat: Obtain web authorization and JS-SDK authorization
- WeChat: Configure trusted domain (iit.xunzhengyixue.com)
- Frontend: Deploy v1.2 with WeChat domain verification file
- Frontend: Fix CRLF issue in docker-entrypoint.sh (CRLF -> LF)
- Testing: 11/11 database CRUD tests passed
- Testing: Access Token retrieval test passed
- Docs: Create module status and development guide
- Docs: Update MVP task list with Day 1 completion
- Docs: Rename deployment doc to SAE real-time status record
- Deployment: Update frontend internal IP to 172.17.173.80

Technical Details:
- Prisma: Multi-schema support (iit_schema)
- pg-boss: Job queue integration prepared
- Taro 4.x: Framework selected for WeChat Mini Program
- Shadow State: Architecture foundation laid
- Docker: Fix entrypoint script line endings for Linux container

Status: Day 1/14 complete, ready for Day 2 REDCap integration
This commit is contained in:
2026-01-01 14:32:58 +08:00
parent 4c5bb3d174
commit dac3cecf78
138 changed files with 1190 additions and 941 deletions

View File

@@ -0,0 +1,446 @@
# 🚀 AI临床研究平台 - 阿里云SAE最新真实状态记录
> **文档用途**记录阿里云SAE服务器最新真实状态 + 每次部署记录
> **最后更新**2026-01-01 14:00
> **维护人员**:开发团队
> **说明**本文档准确记录SAE上所有应用的当前状态包括内网地址、镜像版本、用户名密码等关键资源信息
---
## 📊 一、当前部署状态一览
| 服务名称 | 部署状态 | 镜像版本 | 部署位置 | 最后更新时间 |
|---------|---------|---------|---------|-------------|
| **PostgreSQL数据库** | ✅ 运行中 | PostgreSQL 15 | RDS | 2025-12-24 |
| **前端Nginx服务** | ✅ 运行中 | v1.2 | SAE | 2026-01-01 |
| **Python微服务** | ✅ 运行中 | v1.0 | SAE | 2025-12-24 |
| **Node.js后端** | ✅ 运行中 | v1.3 | SAE | 2025-12-25 |
| **Dify AI服务** | ⏳ 未部署 | - | - | - |
---
## 🔑 二、阿里云资源信息
### 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.0 | 1.12GB | `crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0` |
| **ai-clinical_frontend-nginx** | v1.2 | ~50MB | `crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.2` |
| **backend-service** | v1.3 | 838MB | `crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.3` |
---
### 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`
- **公网IPEIP**`182.92.176.14`
- **SNAT表ID**`stb-2zesszmzx1qpwf1cb2bry`
---
### 2.3 RDS PostgreSQL数据库
**实例信息**
- **实例ID**`pgm-2zex1m2y3r23hdn5`
- **规格**2核4GBpg.n2.2c.1m
- **存储空间**100GBSSD云盘
- **PostgreSQL版本**15.0
- **内网地址**`pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432`
- **外网地址**`pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com`(⚠️ 已关闭)
- **最大连接数**400
- **时区**Asia/Shanghai
- **白名单**172.17.0.0/16VPC网段
**数据库配置**
- **数据库名**`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`
**Schema架构**11个业务Schema
| Schema名称 | 功能模块 | 表数量 | 说明 |
|-----------|---------|-------|------|
| `platform_schema` | 平台核心 | 8 | 用户、权限、任务队列pg-boss |
| `asl_schema` | 系统文献筛查 | 6 | 项目、文献、筛查记录 |
| `aia_schema` | AI智能摘要 | 5 | AI项目、摘要任务 |
| `dc_schema` | 数据清洗 | 6 | 工具A/B/C数据处理 |
| `pkb_schema` | 个人知识库 | 5 | 文献管理、笔记 |
| `iit_schema` | IIT Manager Agent | 5 | IIT项目、待审核动作、任务运行 |
| `admin_schema` | 系统管理 | 0 | 预留 |
| `rvw_schema` | 文献回顾 | 0 | 预留 |
| `ssa_schema` | 智能统计分析 | 0 | 预留 |
| `st_schema` | 统计工具 | 0 | 预留 |
| `common_schema` | 公共模块 | 0 | 预留 |
---
### 2.4 SAE Serverless应用
**命名空间**
- **命名空间ID**`cn-beijing:test-airesearch`
- **地域**华北2北京
**已部署应用列表**
| 应用名称 | 状态 | 规格 | 实例数 | 端口 | 内网地址 | 镜像版本 |
|---------|------|------|-------|------|---------|---------|
| **python-extraction-test** | ✅ 运行中 | 1核2GB | 1 | 8000 | `http://172.17.173.66:8000` | v1.0 |
| **nodejs-backend-test** | ✅ 运行中 | 1核2GB | 1 | 3001 | `http://172.17.173.73:3001` | v1.3 |
| **frontend-nginx-service** | ✅ 运行中 | 0.5核1GB | 1 | 80 | `http://172.17.173.80:80` | v1.2 |
**环境变量配置**
**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?connection_limit=18&pool_timeout=10
# Python微服务地址
EXTRACTION_SERVICE_URL=http://172.17.173.66:8000
# 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
# 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
# Dify配置
DIFY_API_URL=http://localhost/v1
DIFY_API_KEY=dataset-mfvdiKvQ213NvxWm7RoYMN3c
# Postgres-Only架构
QUEUE_TYPE=pgboss
CACHE_TYPE=postgres
# 企业微信配置
WECHAT_CORP_ID=ww01cb7b72ea2db83c
WECHAT_AGENT_ID=1000002
WECHAT_AGENT_SECRET=F3XqlAqKdcOKHi9pLGv5a2dSUowWbevdcDRrBk2pXLM
```
**前端Nginxfrontend-nginx-service**
```bash
BACKEND_SERVICE_HOST=172.17.173.73
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
- **监听端口**80HTTP
---
## 📦 三、已部署服务详情
### 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服务
**当前部署版本**v1.2
**镜像信息**
- **仓库名称**`ai-clinical_frontend-nginx`
- **镜像版本**`v1.2` ✅(当前部署版本)
- **镜像大小**约50MB
- **基础镜像**`nginx:alpine`
- **构建时间**2026-01-01
- **镜像摘要**sha256:1b444d3d04e0e0e62a50009f165991b7d0192d7e21804aa9a3b3558e5aec7961
**部署状态**
- ✅ 已成功部署到SAE2026-01-01
- ✅ 服务运行正常内网地址http://172.17.173.80:80
- ✅ 企业微信域名验证文件已部署WW_verify_YnhsQBwI0ARnNoG0.txt
**v1.2版本更新内容**
- ✅ 修复Windows换行符问题docker-entrypoint.sh CRLF→LF
- ✅ 添加企业微信域名验证文件
- ⚠️ 部署后内网地址已变更172.17.173.72 → 172.17.173.80
**Git文件结构**
```
AIclinicalresearch/frontend-v2/
├── Dockerfile ✅ 已提交Git多阶段构建
├── .dockerignore ✅ 已提交Git优化构建上下文
├── nginx.conf ✅ 已提交GitNginx配置
├── docker-entrypoint.sh ✅ 已提交Git启动脚本Unix换行符
└── public/
└── WW_verify_YnhsQBwI0ARnNoG0.txt ✅ 企业微信域名验证文件
```
---
### 3.3 Node.js后端服务
**当前部署版本**v1.3
**镜像信息**
- **仓库名称**`backend-service`
- **镜像版本**`v1.3` ✅(已部署)
- **镜像大小**838MB (压缩后 ~186MB)
- **基础镜像**`node:22-alpine`
- **构建时间**2025-12-25 18:43
- **构建策略**改进版方案B本地编译+Docker打包
- **镜像摘要**sha256:a4ffb61c15af1cd1ed9de187b4464a1aab773918e5b41b4df5b8ad96514f9941
**技术架构**
- **Node.js版本**22.x
- **Prisma版本**6.17.0
- **ORM**Prisma支持多Schema
- **Web框架**Fastify
- **队列系统**pg-bossPostgres-Only架构
- **缓存系统**PostgreSQL替代Redis
**部署状态**
- ✅ 已成功部署到SAE2025-12-25 18:55
- ✅ 服务运行正常内网地址http://172.17.173.73:3001
- ✅ 健康检查通过
**Git文件结构**
```
AIclinicalresearch/backend/
├── Dockerfile ✅ 已提交Git改进版方案B本地编译+Docker打包
├── .dockerignore ✅ 已提交Git优化构建上下文
├── prisma/schema.prisma ✅ 已同步RDS32个模型+30+关系字段)
└── tsconfig.json ✅ 已优化(排除测试文件)
```
---
### 3.4 Python微服务
**当前部署版本**v1.0
**镜像信息**
- **仓库名称**`python-extraction`
- **镜像版本**`v1.0`
- **镜像大小**1.12GB
- **基础镜像**`python:3-slim`
- **构建时间**2025-12-24
**功能模块**
-**PDF文本提取**PyMuPDF 1.26.7
-**Docx文档提取**Mammoth + python-docx
-**数据清洗DC工具**pandas 2.0+ / numpy 1.24+ / polars 0.19+
-**语言检测**langdetect
-**Nougat OCR**已移除减小镜像1.5GB
**部署状态**
- ✅ 已部署到SAE2025-12-24
- ✅ 应用运行正常2个worker进程
- ✅ 内网访问地址:`http://172.17.173.66:8000`
- ✅ 健康检查通过
**Git文件结构**
```
AIclinicalresearch/extraction_service/
├── Dockerfile ✅ 已提交Git多阶段构建 + 阿里云源)
├── .dockerignore ✅ 已提交Git优化构建上下文
└── requirements-prod.txt ✅ 已提交Git精简依赖列表
```
---
## 🔄 四、部署历史记录
### 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.223.7秒)
- ✅ 推送到ACR成功digest: 1b444d3d...
- ✅ 镜像包含企业微信验证文件
5. **SAE部署成功**
- ✅ 部署镜像版本v1.2
- ✅ 环境变量配置:`BACKEND_SERVICE_HOST=172.17.173.73`, `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后端成功部署到SAEv1.3
- ✅ 修复Alpine Linux bash路径问题/bin/bash → /bin/sh
- ✅ 修复config目录缺失问题Dockerfile补充COPY config
- ✅ 修复pino-pretty生产环境问题条件启用
- ✅ 修复healthCheck ES Module兼容性require → import
- ✅ 生成强JWT密钥64位十六进制
#### 中午前端Nginx部署
- ✅ 前端Nginx成功部署到SAEv1.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.173.73
- ✅ 配置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后端镜像推送至ACRv1.0
---
> **提示**本文档记录SAE服务器的最新真实状态每次部署后必须更新
> **最后更新**2026-01-01 14:00
> **当前版本**前端v1.2 | 后端v1.3 | Python v1.0 | PostgreSQL 15