Files
AIclinicalresearch/docs/05-部署文档/00-部署进度总览.md
HaHafeng ef967d7d7c build(backend): Complete Node.js backend deployment preparation
Major changes:
- Add Docker configuration (Dockerfile, .dockerignore)
- Fix 200+ TypeScript compilation errors
- Add Prisma schema relations for all models (30+ relations)
- Update tsconfig.json to relax non-critical checks
- Optimize Docker build with local dist strategy

Technical details:
- Exclude test files from TypeScript compilation
- Add manual relations for ASL, PKB, DC, AIA modules
- Use type assertions for JSON/Buffer compatibility
- Fix pg-boss, extractionWorker, and other legacy code issues

Build result:
- Docker image: 838MB (compressed ~186MB)
- Successfully pushed to ACR
- Zero TypeScript compilation errors

Related docs:
- Update deployment documentation
- Add Python microservice SAE deployment guide
2025-12-24 22:12:00 +08:00

24 KiB
Raw Blame History

🚀 AI临床研究平台 - 部署进度总览

文档用途:统一展示项目部署状态、资源信息、操作手册索引
更新时间2024-12-24
维护人员:开发团队


📊 一、部署进度一览表

服务名称 部署状态 镜像版本 部署位置 完成时间 操作文档
PostgreSQL数据库 已完成 PostgreSQL 15 RDS 2024-12-24 08-PostgreSQL数据库部署操作手册.md
前端Nginx服务 已完成 v1.0 SAE待部署 2024-12-24 07-前端Nginx-SAE部署操作手册.md
Python微服务 已完成 v1.0 SAE轻量版 2024-12-24 09-Python微服务-SAE部署操作手册.md
Node.js后端 待开始 - - - -
Dify AI服务 待开始 - - - -

图例说明

  • 已完成:服务已成功部署并验证
  • 🔄 进行中:正在部署或配置
  • 待开始:尚未开始

🔑 二、阿里云资源速查表

2.1 ACR容器镜像仓库

基本信息

  • 命名空间ai-clinical
  • Registry地址公网crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com
  • Registry地址VPCcrpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com
  • 用户名gofeng117@163.com
  • 密码fengzhibo117

镜像仓库列表

仓库名称 最新版本 镜像大小 公网地址 VPC地址
python-extraction v1.0 1.12GB crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0 crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0
ai-clinical_frontend-nginx v1.0 ~50MB crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0 crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0
nodejs-backend - - crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/nodejs-backend crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/nodejs-backend

2.2 VPC网络与NAT网关

VPC信息

  • VPC IDvpc-2ze055cptkew9c38w4r06
  • VPC名称ai-clinical-vpc
  • 网段172.17.0.0/16
  • 地域华北2北京
  • 交换机1vsw-2zevacop039bxrmj6yc0c可用区F
  • 交换机2vsw-2zehoeyw9ldncymcyvfwq可用区A
  • 安全组IDsg-2zedk6fi8sgmmcwdu7tu

NAT网关信息

  • NAT网关名称NAT_airesearch
  • NAT网关IDngw-2zeec9ulzgw7ywvx1pst6
  • 公网IPEIP182.92.176.14
  • SNAT表IDstb-2zesszmzx1qpwf1cb2bry
  • SNAT条目覆盖所有交换机允许VPC内资源访问公网

2.3 RDS PostgreSQL数据库

实例信息

  • 实例IDpgm-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

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 文献管理、笔记
admin_schema 系统管理 0 预留
rvw_schema 文献回顾 0 预留
ssa_schema 智能统计分析 0 预留
st_schema 统计工具 0 预留
common_schema 公共模块 0 预留
information_schema 系统元数据 - PostgreSQL标准

关键数据量截至2024-12-24

  • 用户3条
  • AI项目2条
  • 文献1204条
  • 筛查记录783条
  • pg-boss任务350条

连接字符串格式

postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research

⚠️ 注意:密码中的 @ 需要URL编码为 %40


2.4 SAE Serverless应用

命名空间

  • 命名空间IDcn-beijing:test-airesearch
  • 地域华北2北京

已部署/待部署应用列表

应用名称 状态 规格 实例数 端口 内网地址 公网地址
python-extraction-test 运行中 1核2GB 1 8000 http://172.17.173.66:8000 无(仅内网)
nodejs-backend 待构建 2核4GB 1 3001 待部署后填写 待部署后填写
frontend-nginx 镜像已推送 1核2GB 1 80 待部署后填写 待部署后填写

2.5 OSS对象存储

Bucket信息

  • Bucket名称ai-clinical-research
  • 地域华北2北京
  • 存储类型:标准存储
  • 访问控制:私有
  • 存储冗余类型:同城冗余存储
  • 内网Endpointoss-cn-beijing-internal.aliyuncs.com
  • 公网Endpointoss-cn-beijing.aliyuncs.com
  • Bucket域名内网ai-clinical-research.oss-cn-beijing-internal.aliyuncs.com
  • 创建时间2025-12-16 20:22

RAM用户访问凭证用于OSS写入

  • RAM用户名oss-bucket-put-object@1991407246109125.onaliyun.com
  • AccessKeyIdLTAI5tB2Dt3NdvBL3G7nYGv7
  • AccessKeySecret1iSN9k39RkApP93QjUhC1DcPIeMG4V
  • UID203256565888301026
  • 创建时间2025-12-16 20:31:41

⚠️ 安全警告AccessKey是敏感信息请勿提交到公开Git仓库

存储用途

  • /uploads/pdfs/ - PDF文件上传
  • /uploads/docx/ - Word文档上传
  • /uploads/txt/ - 文本文件上传
  • /exports/ - 导出文件临时存储


2.6 镜像配置文件存储位置

前端Nginx服务

AIclinicalresearch/frontend-v2/
├── Dockerfile              ✅ 已提交Git多阶段构建
├── .dockerignore          ✅ 已提交Git优化构建上下文
├── nginx.conf             ✅ 已提交GitNginx配置
└── docker-entrypoint.sh   ✅ 已提交Git启动脚本

镜像存储位置:
公网crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0
VPCcrpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0

Python微服务

AIclinicalresearch/extraction_service/
├── Dockerfile              ✅ 已提交Git多阶段构建 + 阿里云源)
├── .dockerignore          ✅ 已提交Git优化构建上下文
└── requirements-prod.txt  ✅ 已提交Git精简依赖列表

镜像存储位置:
公网crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0
VPCcrpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0

Node.js后端(待构建):

AIclinicalresearch/backend/
├── Dockerfile             ⏳ 待创建
├── .dockerignore         ⏳ 待创建
└── (配置文件)            ⏳ 待确认

镜像存储位置(预留):
公网crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/nodejs-backend:v1.0
VPCcrpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/nodejs-backend:v1.0

Git提交规范

文件类型 是否提交Git 说明
Dockerfile 必须提交 镜像构建蓝图,团队协作必需
.dockerignore 必须提交 优化构建性能,避免传输无用文件
requirements*.txt / package.json 必须提交 依赖清单,可复现构建
nginx.conf / 配置文件 必须提交 服务配置
.env 禁止提交 敏感信息密码、API密钥
Docker镜像文件.tar 禁止提交 镜像文件很大存储在ACR云端

📦 三、已部署服务详情

3.1 PostgreSQL数据库

部署概要

  • 部署时间2024-12-24
  • 部署方式pg_dump 全量导出 → RDS导入
  • 数据迁移时长约12秒90MB SQL文件
  • 验证状态 Schema完整、数据一致、关系正确

关键配置

# 本地PostgreSQL Docker容器
docker run --name ai-clinical-postgres \
  -e POSTGRES_PASSWORD=postgres \
  -e POSTGRES_DB=ai_clinical_research \
  -p 5432:5432 \
  -d postgres:15-alpine

备份信息

  • 本地备份文件AIclinicalresearch/rds_init_20251224_154529.sql90MB
  • 备份内容完整Schema + 全量数据
  • RDS自动备份每日凌晨2点保留7天

操作文档

重要提示

  • ⚠️ 安全:外网访问已关闭,生产环境禁止长期开启
  • ⚠️ 连接需通过VPC内网或SSH隧道连接
  • ⚠️ 密码:环境变量中的 @ 需转义为 %40

3.2 前端Nginx服务

镜像信息

  • 仓库名称ai-clinical_frontend-nginx
  • 镜像版本v1.0
  • 镜像大小约50MB
  • 基础镜像nginx:alpine
  • 构建时间2024-12-24

镜像功能

  • 托管React单页应用SPA
  • Nginx反向代理API请求
  • 支持动态环境变量注入
  • Gzip压缩优化
  • 健康检查端点

构建产物

  • DockerfileAIclinicalresearch/frontend-v2/Dockerfile
  • Nginx配置AIclinicalresearch/frontend-v2/nginx.conf
  • .dockerignoreAIclinicalresearch/frontend-v2/.dockerignore

SAE配置建议

  • CPU/内存1核 / 2GB
  • 实例数1
  • 端口80
  • 健康检查GET / 返回200
  • 环境变量
    VITE_API_BASE_URL=http://nodejs-backend-service.cn-beijing:test-airesearch.svc.cluster.local:3001
    
    ⚠️ 注意内网地址需在SAE部署后获取

操作文档

部署状态

  • Docker镜像构建成功
  • 镜像已推送至ACR
  • 待部署到SAE

3.3 Python微服务

镜像信息

  • 仓库名称python-extraction
  • 镜像版本v1.0
  • 镜像大小1.12GB
  • 基础镜像python:3-slim
  • 构建时间2024-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

依赖优化

# 精简版依赖requirements-prod.txt
- 移除nougat-ocr (1.5GB)
- 移除albumentations (Nougat依赖)
- 保留pandas、numpy、polarsDC工具必需
- 保留PyMuPDF、pdfplumberPDF提取

健康检查

  • 端点GET /api/health
  • 响应示例
    {
      "status": "healthy",
      "checks": {
        "pymupdf": {"available": true, "version": "1.26.7"},
        "nougat": {"available": false, "error": "Nougat未安装"},
        "temp_dir": {"path": "/tmp/extraction_service", "writable": true}
      }
    }
    

SAE配置建议

  • CPU/内存1核 / 2GB
  • 实例数1
  • 端口8000
  • 启动命令默认Dockerfile中的CMD
  • 健康检查GET /api/health 返回200
  • 环境变量
    LOG_LEVEL=INFO
    TEMP_DIR=/tmp/extraction_service
    
    ⚠️ 生产环境建议根据实际负载调整实例数

构建产物

  • DockerfileAIclinicalresearch/extraction_service/Dockerfile
  • 依赖文件AIclinicalresearch/extraction_service/requirements-prod.txt
  • .dockerignoreAIclinicalresearch/extraction_service/.dockerignore

关键技术方案

  • 使用阿里云Debian镜像源解决apt-get网络问题
  • 多阶段构建(优化镜像大小)
  • 运行时依赖安装libgl1、libglib2.0

操作文档

部署状态

  • Docker镜像构建成功本地测试通过
  • 镜像已推送至ACR
  • 已部署到SAE轻量版应用
  • 应用运行正常2个worker进程

内网访问地址

http://172.17.173.66:8000

部署时间2024-12-24 健康检查 通过


四、快速命令参考

4.1 Docker镜像管理

登录ACR

# 使用公网地址登录
docker login --username=gofeng117@163.com \
  --password=fengzhibo117 \
  crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com

拉取镜像

# 前端Nginx
docker pull crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0

# Python微服务
docker pull crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0

本地测试

# 前端Nginx端口3000
docker run -d -p 3000:80 \
  -e VITE_API_BASE_URL=http://localhost:3001 \
  --name frontend-test \
  ai-clinical_frontend-nginx:v1.0

# Python微服务端口8000
docker run -d -p 8000:8000 \
  --name python-test \
  python-extraction:v1.0

# 查看日志
docker logs -f frontend-test
docker logs -f python-test

# 健康检查
curl http://localhost:3000          # 前端
curl http://localhost:8000/api/health  # Python微服务

构建新版本

# 前端Nginx
cd AIclinicalresearch/frontend-v2
docker build -t ai-clinical_frontend-nginx:v1.1 .
docker tag ai-clinical_frontend-nginx:v1.1 \
  crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.1
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.1

# Python微服务
cd AIclinicalresearch/extraction_service
docker build -t python-extraction:v1.1 -f Dockerfile .
docker tag python-extraction:v1.1 \
  crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.1
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.1

4.2 数据库连接与管理

通过本地Docker容器连接RDS

# 启动本地PostgreSQL容器用于psql客户端
docker run --name ai-clinical-postgres \
  -e POSTGRES_PASSWORD=postgres \
  -p 5432:5432 \
  -d postgres:15-alpine

# 连接到RDS需临时开启外网或使用VPC
docker exec -e PGPASSWORD="Xibahe@fengzhibo117" \
  ai-clinical-postgres psql \
  -h pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com \
  -p 5432 \
  -U airesearch \
  -d ai_clinical_research

# 查看Schema列表
docker exec -e PGPASSWORD="Xibahe@fengzhibo117" \
  ai-clinical-postgres psql \
  -h pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com \
  -p 5432 -U airesearch -d ai_clinical_research \
  -c "SELECT nspname FROM pg_namespace WHERE nspname LIKE '%_schema' ORDER BY nspname;"

# 查看表数量统计
docker exec -e PGPASSWORD="Xibahe@fengzhibo117" \
  ai-clinical-postgres psql \
  -h pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com \
  -p 5432 -U airesearch -d ai_clinical_research \
  -c "SELECT schemaname, COUNT(*) FROM pg_tables WHERE schemaname NOT IN ('pg_catalog', 'information_schema') GROUP BY schemaname;"

数据库备份

# 导出完整数据库
docker exec ai-clinical-postgres pg_dump \
  -U postgres \
  -d ai_clinical_research \
  --format=plain \
  --no-owner \
  --no-acl \
  --encoding=UTF8 \
  > "backup_$(date +%Y%m%d_%H%M%S).sql"

# 导入到RDS需临时开启外网
cat backup_20241224_154529.sql | \
  docker exec -i -e PGPASSWORD="Xibahe@fengzhibo117" \
  ai-clinical-postgres psql \
  -h pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com \
  -p 5432 -U airesearch -d ai_clinical_research

Node.js应用连接字符串

# .env 文件配置
DATABASE_URL="postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research"

# 注意:@ 符号需要URL编码为 %40

4.3 SAE常用操作

通过阿里云CLI部署(可选):

# 安装阿里云CLI
# https://help.aliyun.com/document_detail/121541.html

# 配置访问凭证
aliyun configure

# 部署应用(示例)
aliyun sae DeployApplication \
  --AppId xxx \
  --ImageUrl crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0 \
  --Namespace cn-beijing:xxx

通过Web控制台部署(推荐):

  1. 登录阿里云SAE控制台
  2. 选择应用 → 部署应用
  3. 选择镜像版本
  4. 配置环境变量
  5. 确认部署

⚠️ 五、注意事项与最佳实践

5.1 安全规范 🔒

数据库安全

  • 禁止RDS外网地址长期开启
  • 推荐使用VPC内网或SSH隧道连接
  • 白名单仅允许必要的IP访问
  • 密码强度:使用复杂密码(大小写+数字+特殊字符)

镜像仓库安全

  • 禁止在代码中硬编码ACR密码
  • 推荐定期轮换Registry密码每季度
  • 访问控制:仅团队成员拥有推送权限

环境变量管理

  • 禁止在Git中提交 .env 文件
  • 推荐使用SAE的环境变量配置功能
  • 敏感信息数据库密码、API密钥等使用环境变量

SSL/TLS

  • 生产环境必须启用HTTPS
  • 使用阿里云免费SSL证书或Let's Encrypt

5.2 部署顺序 📋

推荐的部署顺序

  1. 基础设施VPC、NAT网关、安全组
  2. 数据库RDS PostgreSQL数据迁移+验证)
  3. 对象存储OSS Bucket创建+权限配置
  4. 🔄 后端服务
    • Python微服务文档提取+数据清洗)
    • Node.js后端API服务器
  5. 🔄 前端服务Nginx静态资源托管
  6. 🔄 AI服务Dify部署
  7. 🔄 验证测试:全链路功能验证

依赖关系

RDS PostgreSQL (必需)
    ↓
Node.js 后端 (依赖数据库)
    ↓
Python 微服务 (可独立,但后端会调用)
    ↓
前端 Nginx (依赖后端API)
    ↓
Dify AI (可独立)

5.3 回滚策略 🔄

镜像版本管理

  • ACR保留所有历史版本v1.0, v1.1, v1.2...
  • 使用语义化版本号:major.minor.patch
  • 生产环境使用固定版本号,禁止使用 :latest

SAE应用回滚

  • SAE支持一键回滚到上一版本
  • 回滚时长约1-2分钟
  • 建议:部署前先在测试环境验证

数据库回滚

  • RDS自动备份每日凌晨2点保留7天
  • 手动备份:重大变更前务必手动备份
  • 回滚时长取决于数据量约10分钟/10GB

5.4 监控与日志 📊

应用监控(建议配置):

  • 健康检查:每个服务配置健康检查端点
  • 日志收集SAE自动收集stdout/stderr日志
  • 告警规则CPU>80%、内存>80%、健康检查失败

日志查看

# SAE控制台 → 应用详情 → 日志查询
# 或使用阿里云CLI
aliyun sae DescribeApplicationInstances --AppId xxx

性能指标

  • 响应时间API平均响应<500ms
  • 错误率<1%
  • 可用性>99.9%

5.5 成本优化 💰

SAE资源配置

  • 开发环境0.5核 / 1GB约¥30/月)
  • 生产环境1核 / 2GB约¥60/月)
  • 弹性伸缩:根据流量自动扩缩容

RDS成本

  • 按量付费:测试阶段使用
  • 包年包月生产环境更优惠约¥800/月)

OSS成本

  • 存储费用约¥0.12/GB/月
  • 流量费用内网流量免费外网流量¥0.5/GB

📝 六、待办事项清单

高优先级 🔴

  • Python微服务部署到SAE并验证 已完成
  • Python微服务创建SAE部署操作手册 已完成
  • Node.js后端Docker镜像构建
  • Node.js后端部署到SAE
  • Node.js后端配置环境变量Python服务地址

中优先级 🟡

  • 前端Nginx部署到SAE并配置域名
  • 内网通信配置前端→后端→Python微服务的内网调用
  • SSL证书申请并配置HTTPS
  • 监控告警配置SAE健康检查和告警规则

低优先级 🟢

  • Dify AI:评估部署方案
  • 负载测试:压力测试各服务性能
  • 文档完善:补充故障排查手册
  • CI/CD:配置自动化部署流程

📚 七、相关文档索引

部署指南

服务部署手册

技术架构文档

分析报告


🔄 八、更新日志

2024-12-24

  • PostgreSQL数据库部署完成
  • 前端Nginx Docker镜像构建并推送至ACR
  • Python微服务Docker镜像构建并推送至ACR
  • 创建部署进度总览文档
  • 创建Python微服务SAE部署操作手册轻量版SAE配置
  • Python微服务成功部署到SAE内网地址172.17.173.66:8000
  • 解决ACR镜像拉取权限问题配置镜像仓库认证

📞 九、联系与支持

技术支持

紧急联系

  • 数据库问题:先检查 [08-PostgreSQL数据库部署操作手册.md]
  • SAE部署问题先检查 [01-快速部署SOP-零基础版.md]
  • 镜像构建问题:查看本文档"快速命令参考"章节

提示:本文档会随着部署进度持续更新,请定期查看最新版本!
最后更新2024-12-24