Files
AIclinicalresearch/docs/05-部署文档/00-阿里云SAE最新真实状态记录.md
HaHafeng dac3cecf78 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
2026-01-01 14:32:58 +08:00

447 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚀 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