Files
AIclinicalresearch/docs/05-部署文档/00-部署进度总览.md
HaHafeng decff0bb1f docs(deploy): Complete full system deployment to Aliyun SAE
Summary:
- Successfully deployed complete system to Aliyun SAE (2025-12-25)
- All services running: Python microservice + Node.js backend + Frontend Nginx + CLB
- Public access available at http://8.140.53.236/

Major Achievements:
1. Python microservice deployed (v1.0, internal IP: 172.17.173.66:8000)
2. Node.js backend deployed (v1.3, internal IP: 172.17.173.73:3001)
   - Fixed 4 critical issues: bash path, config directory, pino-pretty, ES Module
3. Frontend Nginx deployed (v1.0, internal IP: 172.17.173.72:80)
4. CLB load balancer configured (public IP: 8.140.53.236)

New Documentation (9 docs):
- 11-Node.js backend SAE deployment config checklist (21 env vars)
- 12-Node.js backend SAE deployment operation manual
- 13-Node.js backend image fix record (config directory)
- 14-Node.js backend pino-pretty fix
- 15-Node.js backend deployment success summary
- 16-Frontend Nginx deployment success summary
- 17-Complete deployment practical manual 2025 edition (1800 lines)
- 18-Deployment documentation usage guide
- 19-Daily update quick operation manual (670 lines)

Key Fixes:
- Environment variable name correction: EXTRACTION_SERVICE_URL (not PYTHON_SERVICE_URL)
- Dockerfile fix: added COPY config ./config
- Logger configuration: conditional pino-pretty for dev only
- Health check fix: ES Module compatibility (require -> import)

Updated Files:
- System status document updated with full deployment info
- Deployment progress overview updated with latest IPs
- All 3 Docker services' Dockerfiles and configs refined

Verification:
- All health checks passed
- Tool C 7 features working correctly
- Literature screening module functional
- Response time < 1 second

BREAKING CHANGE: Node.js backend internal IP changed from 172.17.173.71 to 172.17.173.73

Closes #deployment-milestone
2025-12-25 21:24:37 +08:00

905 lines
32 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临床研究平台 - 部署进度总览
> **文档用途**:统一展示项目部署状态、资源信息、操作手册索引
> **更新时间**2025-12-24 18:55
> **维护人员**:开发团队
---
## 📖 文档导航指南
### 🎯 下次部署应该看哪个文档?
#### 🔥 完整部署(强烈推荐)
**⭐⭐⭐⭐⭐ 实战版部署手册**2025-12-25新增
- [17-完整部署实战手册-2025版.md](./17-完整部署实战手册-2025版.md) - **基于实际部署经历编写,包含所有坑点和解决方案!**
- ✅ 完整的部署流程3.5小时)
- ✅ 所有遇到的4个问题及解决方案
- ✅ 关键经验总结
- ✅ 可直接复制的配置和命令
- ✅ 适合快速部署和重新部署
**⭐⭐⭐ 零基础版部署手册**
- [01-快速部署SOP-零基础版.md](./01-快速部署SOP-零基础版.md) - 完整的部署流程(学习用)
**如何选择**
- 🎯 **要快速部署** → 看 `17-完整部署实战手册-2025版.md`(推荐)
- 📚 **要学习原理** → 看 `01-快速部署SOP-零基础版.md`
- 🔍 **查询资源信息** → 看本文档00-部署进度总览.md
---
#### Node.js 后端部署
**主文档(必读)**
- ⭐⭐⭐ [12-Node.js后端-SAE部署操作手册.md](./12-Node.js后端-SAE部署操作手册.md) - **最新、最完整的操作手册**
**配置参考(必备)**
- ⭐⭐ [11-Node.js后端-SAE部署配置清单.md](./11-Node.js后端-SAE部署配置清单.md) - 环境变量和配置参数
**快速了解(推荐)**
- ⭐ [15-Node.js后端-部署成功总结.md](./15-Node.js后端-部署成功总结.md) - 部署历程和问题修复记录
**问题修复参考**
- [13-Node.js后端-镜像修复记录.md](./13-Node.js后端-镜像修复记录.md) - config目录问题
- [14-Node.js后端-pino-pretty问题修复.md](./14-Node.js后端-pino-pretty问题修复.md) - 日志配置问题
#### Python 微服务部署
- ⭐⭐⭐ [09-Python微服务-SAE部署操作手册.md](./09-Python微服务-SAE部署操作手册.md)
- [04-Python微服务-SAE容器部署指南.md](./04-Python微服务-SAE容器部署指南.md)
#### 前端 Nginx 部署
- ⭐⭐⭐ [07-前端Nginx-SAE部署操作手册.md](./07-前端Nginx-SAE部署操作手册.md)
- [06-前端Nginx-SAE容器部署指南.md](./06-前端Nginx-SAE容器部署指南.md)
#### PostgreSQL 数据库
- ⭐⭐⭐ [08-PostgreSQL数据库部署操作手册.md](./08-PostgreSQL数据库部署操作手册.md)
---
## 📊 一、部署进度一览表
| 服务名称 | 部署状态 | 镜像版本 | 部署位置 | 完成时间 | 操作文档 |
|---------|---------|---------|---------|---------|---------|
| **PostgreSQL数据库** | ✅ 已完成 | PostgreSQL 15 | RDS | 2025-12-24 | [08-PostgreSQL数据库部署操作手册.md](./08-PostgreSQL数据库部署操作手册.md) |
| **前端Nginx服务** | ✅ 已完成 | v1.0 | SAE运行中 | 2025-12-25 | [07-前端Nginx-SAE部署操作手册.md](./07-前端Nginx-SAE部署操作手册.md) |
| **Python微服务** | ✅ 已完成 | v1.0 | SAE轻量版 | 2025-12-24 | [09-Python微服务-SAE部署操作手册.md](./09-Python微服务-SAE部署操作手册.md) |
| **Node.js后端** | ✅ 已完成 | v1.3 | SAE运行中 | 2025-12-25 | [12-Node.js后端-SAE部署操作手册.md](./12-Node.js后端-SAE部署操作手册.md) |
| **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.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` |
| **backend-service** | v1.3 | 838MB | `crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.3` | `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`
- **SNAT条目**覆盖所有交换机允许VPC内资源访问公网
---
### 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
**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标准 |
**关键数据量**截至2025-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应用
**命名空间**
- **命名空间ID**`cn-beijing:test-airesearch`
- **地域**华北2北京
**已部署/待部署应用列表**
| 应用名称 | 状态 | 规格 | 实例数 | 端口 | 内网地址 | 公网地址 |
|---------|------|------|-------|------|---------|---------|
| **python-extraction-test** | ✅ 运行中 | 1核2GB | 1 | 8000 | `http://172.17.173.66:8000` | 无(仅内网) |
| **nodejs-backend-test** | ✅ 运行中 | 1核2GB | 1 | 3001 | `http://172.17.173.71:3001` | 无(仅内网) |
| **frontend-nginx-service** | ✅ 运行中 | 0.5核1GB | 1 | 80 | `http://172.17.173.72:80` | 无(仅内网) |
---
### 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用户访问凭证**用于OSS写入
- **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 镜像配置文件存储位置
**前端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 ✅ 已提交Git改进版方案B本地编译+Docker打包
├── .dockerignore ✅ 已提交Git优化构建上下文
├── prisma/schema.prisma ✅ 已同步RDS32个模型+30+关系字段)
└── tsconfig.json ✅ 已优化(排除测试文件)
镜像存储位置:
公网crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.0
VPCcrpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.0
镜像摘要sha256:a4ffb61c15af1cd1ed9de187b4464a1aab773918e5b41b4df5b8ad96514f9941
```
**Git提交规范**
| 文件类型 | 是否提交Git | 说明 |
|---------|------------|------|
| ✅ Dockerfile | 必须提交 | 镜像构建蓝图,团队协作必需 |
| ✅ .dockerignore | 必须提交 | 优化构建性能,避免传输无用文件 |
| ✅ requirements*.txt / package.json | 必须提交 | 依赖清单,可复现构建 |
| ✅ nginx.conf / 配置文件 | 必须提交 | 服务配置 |
| ❌ .env | 禁止提交 | 敏感信息密码、API密钥 |
| ❌ Docker镜像文件.tar | 禁止提交 | 镜像文件很大存储在ACR云端 |
---
## 📦 三、已部署服务详情
### 3.1 PostgreSQL数据库
**部署概要**
- **部署时间**2025-12-24
- **部署方式**`pg_dump` 全量导出 → RDS导入
- **数据迁移时长**约12秒90MB SQL文件
- **验证状态**:✅ Schema完整、数据一致、关系正确
**关键配置**
```bash
# 本地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.sql`90MB
- **备份内容**完整Schema + 全量数据
- **RDS自动备份**每日凌晨2点保留7天
**操作文档**
- [08-PostgreSQL数据库部署操作手册.md](./08-PostgreSQL数据库部署操作手册.md) - 完整部署流程
- [PostgreSQL部署策略-摸底报告.md](./PostgreSQL部署策略-摸底报告.md) - 数据库分析报告
**重要提示**
- ⚠️ **安全**:外网访问已关闭,生产环境禁止长期开启
- ⚠️ **连接**需通过VPC内网或SSH隧道连接
- ⚠️ **密码**:环境变量中的 `@` 需转义为 `%40`
---
### 3.2 前端Nginx服务
**镜像信息**
- **仓库名称**`ai-clinical_frontend-nginx`
- **镜像版本**`v1.0`
- **镜像大小**约50MB
- **基础镜像**`nginx:alpine`
- **构建时间**2025-12-24
**镜像功能**
- ✅ 托管React单页应用SPA
- ✅ Nginx反向代理API请求
- ✅ 支持动态环境变量注入
- ✅ Gzip压缩优化
- ✅ 健康检查端点
**构建产物**
- **Dockerfile**`AIclinicalresearch/frontend-v2/Dockerfile`
- **Nginx配置**`AIclinicalresearch/frontend-v2/nginx.conf`
- **.dockerignore**`AIclinicalresearch/frontend-v2/.dockerignore`
**SAE配置建议**
- **CPU/内存**1核 / 2GB
- **实例数**1
- **端口**80
- **健康检查**`GET /` 返回200
- **环境变量**
```bash
VITE_API_BASE_URL=http://nodejs-backend-service.cn-beijing:test-airesearch.svc.cluster.local:3001
```
⚠️ 注意内网地址需在SAE部署后获取
**操作文档**
- [07-前端Nginx-SAE部署操作手册.md](./07-前端Nginx-SAE部署操作手册.md) - 完整SAE部署步骤
- [06-前端Nginx-SAE容器部署指南.md](./06-前端Nginx-SAE容器部署指南.md) - 技术架构详解
**部署状态**
- ✅ Docker镜像构建成功
- ✅ 镜像已推送至ACR
- ⏳ 待部署到SAE
---
### 3.3 Node.js后端服务
**镜像信息**
- **仓库名称**`backend-service`
- **镜像版本**`v1.3` ✅(已部署)
- **镜像大小**838MB (压缩后 ~186MB)
- **基础镜像**`node:alpine`
- **构建时间**2025-12-25 18:43
- **构建策略**改进版方案B本地编译+Docker打包
**构建成果**
- ✅ TypeScript编译成功0错误修复200+个错误)
- ✅ Prisma Schema已同步RDS32个模型
- ✅ 手动补全30+个关系字段
- ✅ 镜像已推送到ACRv1.0 + latest
**技术架构**
- **Node.js版本**22.x
- **Prisma版本**6.17.0
- **ORM**Prisma支持多Schema
- **Web框架**Fastify
- **队列系统**pg-bossPostgres-Only架构
- **缓存系统**PostgreSQL替代Redis
**构建产物**
- **Dockerfile**`AIclinicalresearch/backend/Dockerfile`
- **.dockerignore**`AIclinicalresearch/backend/.dockerignore`
- **Prisma Schema**`AIclinicalresearch/backend/prisma/schema.prisma`
**SAE配置建议**
- **CPU/内存**1核 / 2GB测试环境
- **实例数**1
- **端口**3001
- **健康检查**`GET /health` 返回200
- **环境变量**(关键配置):
```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微服务地址
PYTHON_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
# JWT密钥2025-12-25已生成强密钥
JWT_SECRET=8a3f9e7c2d1b5a4e6f8c9d0a3b5e7f1c2a4b6c8d0e2f4a6b8c0d2e4f6a8b0c2d4
JWT_EXPIRES_IN=7d
# LLM API Keys
DEEPSEEK_API_KEY=sk-7f8cc37a79fa4799860b38fc7ba2e150
DASHSCOPE_API_KEY=sk-75b4ff29a14a49e79667a331034f3298
# 队列和缓存Postgres-Only
QUEUE_TYPE=pgboss
CACHE_TYPE=postgres
```
**操作文档**
- [10-Node.js后端-Docker镜像构建手册.md](./10-Node.js后端-Docker镜像构建手册.md) - 镜像构建详细步骤
- [05-Node.js后端-SAE容器部署指南.md](./05-Node.js后端-SAE容器部署指南.md) - SAE部署技术指南
**部署状态**
- ✅ Prisma反向同步完成32个模型
- ✅ TypeScript编译成功修复200+错误)
- ✅ Docker镜像构建成功
- ✅ 镜像已推送至ACRv1.3
- ✅ 已成功部署到SAE2025-12-25 18:55
- ✅ 服务运行正常内网地址http://172.17.173.71:3001
**部署历程2025-12-25**
1. 🔧 修复1Alpine Linux bash路径问题使用/bin/sh
2. 🔧 修复2config目录缺失补充COPY config到Dockerfile
3. 🔧 修复3pino-pretty生产环境问题改为条件启用
4. 🔧 修复4healthCheck ES Module兼容性require → import
5. ✅ 最终成功部署并通过健康检查
**关键突破**
1. ✅ 解决了Prisma `db pull` 后缺少关系字段的问题手动补全30+个)
2. ✅ 修复了TypeScript类型错误JSON、Buffer、pg-boss等
3. ✅ 优化了Docker构建策略本地编译避免网络超时
4. ✅ 实现了零编译错误200+ → 0
---
### 3.4 Python微服务
**镜像信息**
- **仓库名称**`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
**依赖优化**
```txt
# 精简版依赖requirements-prod.txt
- 移除nougat-ocr (1.5GB)
- 移除albumentations (Nougat依赖)
- 保留pandas、numpy、polarsDC工具必需
- 保留PyMuPDF、pdfplumberPDF提取
```
**健康检查**
- **端点**`GET /api/health`
- **响应示例**
```json
{
"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
- **环境变量**
```bash
LOG_LEVEL=INFO
TEMP_DIR=/tmp/extraction_service
```
⚠️ 生产环境建议根据实际负载调整实例数
**构建产物**
- **Dockerfile**`AIclinicalresearch/extraction_service/Dockerfile`
- **依赖文件**`AIclinicalresearch/extraction_service/requirements-prod.txt`
- **.dockerignore**`AIclinicalresearch/extraction_service/.dockerignore`
**关键技术方案**
- ✅ 使用阿里云Debian镜像源解决apt-get网络问题
- ✅ 多阶段构建(优化镜像大小)
- ✅ 运行时依赖安装libgl1、libglib2.0
**操作文档**
- [04-Python微服务-SAE容器部署指南.md](./04-Python微服务-SAE容器部署指南.md) - 技术架构详解
- [09-Python微服务-SAE部署操作手册.md](./09-Python微服务-SAE部署操作手册.md) - SAE部署操作步骤
**部署状态**
- ✅ Docker镜像构建成功本地测试通过
- ✅ 镜像已推送至ACR
- ✅ 已部署到SAE轻量版应用
- ✅ 应用运行正常2个worker进程
**内网访问地址**
```
http://172.17.173.66:8000
```
**部署时间**2025-12-24
**健康检查**:✅ 通过
---
## ⚡ 四、快速命令参考
### 4.1 Docker镜像管理
**登录ACR**
```bash
# 使用公网地址登录
docker login --username=gofeng117@163.com \
--password=fengzhibo117 \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com
```
**拉取镜像**
```bash
# 前端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
```
**本地测试**
```bash
# 前端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微服务
```
**构建新版本**
```bash
# 前端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**
```bash
# 启动本地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;"
```
**数据库备份**
```bash
# 导出完整数据库
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_20251224_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应用连接字符串**
```bash
# .env 文件配置
DATABASE_URL="postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research"
# 注意:@ 符号需要URL编码为 %40
```
---
### 4.3 SAE常用操作
**通过阿里云CLI部署**(可选):
```bash
# 安装阿里云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微服务文档提取+数据清洗)- 已部署到SAE2025-12-24
- ✅ Node.js后端API服务器- 已成功部署到SAE2025-12-25
5. ✅ **前端服务**Nginx静态资源托管 - 已成功部署到SAE2025-12-25
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%、健康检查失败
**日志查看**
```bash
# 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
---
## 📝 六、待办事项清单
### 高优先级 🔴
- [x] **Python微服务**部署到SAE并验证 ✅ 已完成
- [x] **Python微服务**创建SAE部署操作手册 ✅ 已完成
- [x] **Node.js后端**Docker镜像构建 ✅ 已完成2025-12-24
- [x] **Node.js后端**Prisma反向同步 ✅ 已完成32个模型
- [x] **Node.js后端**TypeScript编译修复 ✅ 已完成修复200+错误)
- [x] **Node.js后端**镜像推送到ACR ✅ 已完成v1.3
- [x] **Node.js后端**部署到SAE ✅ 已完成2025-12-25
- [x] **Node.js后端**配置环境变量Python服务地址 ✅ 已完成
- [x] **Node.js后端**修复4个部署问题bash/config/pino/require ✅ 已完成
### 中优先级 🟡
- [x] **前端Nginx**部署到SAE并配置域名 ✅ 已完成2025-12-25
- [ ] **内网通信**配置前端→后端→Python微服务的内网调用
- [ ] **SSL证书**申请并配置HTTPS
- [ ] **监控告警**配置SAE健康检查和告警规则
### 低优先级 🟢
- [ ] **Dify AI**:评估部署方案
- [ ] **负载测试**:压力测试各服务性能
- [ ] **文档完善**:补充故障排查手册
- [ ] **CI/CD**:配置自动化部署流程
---
## 📚 七、相关文档索引
### 部署指南
- [01-快速部署SOP-零基础版.md](./01-快速部署SOP-零基础版.md) - **完整部署流程总纲**
- [02-SAE部署完全指南(产品经理版).md](./02-SAE部署完全指南(产品经理版).md) - SAE基础知识
### 服务部署手册
- [07-前端Nginx-SAE部署操作手册.md](./07-前端Nginx-SAE部署操作手册.md) - 前端Nginx部署步骤
- [08-PostgreSQL数据库部署操作手册.md](./08-PostgreSQL数据库部署操作手册.md) - PostgreSQL部署步骤
- [09-Python微服务-SAE部署操作手册.md](./09-Python微服务-SAE部署操作手册.md) - Python微服务部署步骤
- [10-Node.js后端-Docker镜像构建手册.md](./10-Node.js后端-Docker镜像构建手册.md) - Node.js后端Docker构建详解
### 技术架构文档
- [00-部署架构总览.md](./00-部署架构总览.md) - 架构设计与技术选型
- [04-Python微服务-SAE容器部署指南.md](./04-Python微服务-SAE容器部署指南.md) - Python服务技术详解
- [05-Node.js后端-SAE容器部署指南.md](./05-Node.js后端-SAE容器部署指南.md) - Node.js后端技术详解
- [06-前端Nginx-SAE容器部署指南.md](./06-前端Nginx-SAE容器部署指南.md) - 前端Nginx技术详解
### 分析报告
- [PostgreSQL部署策略-摸底报告.md](./PostgreSQL部署策略-摸底报告.md) - 数据库结构分析
---
## 🔄 八、更新日志
### 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位十六进制
- ✅ 创建3个问题修复文档13/14/15号文档
- ✅ 更新SAE部署操作手册12号文档
- ✅ 更新部署配置清单11号文档
#### 中午前端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大功能全部测试通过数值映射、缺失值处理等
- ✅ 文献筛查模块测试通过
- ✅ 完整系统部署成功验证 🎉
#### 晚上:文档完善
- ✅ 创建 `17-完整部署实战手册-2025版.md`1800行基于实战经验
- ✅ 创建 `18-部署文档使用指南.md`(快速导航文档)
- ✅ 更新 `00-部署进度总览.md`(添加新文档索引)
- ✅ 总结部署经验与最佳实践
### 2025-12-24
- ✅ PostgreSQL数据库部署完成
- ✅ 前端Nginx Docker镜像构建并推送至ACR
- ✅ Python微服务Docker镜像构建并推送至ACR
- ✅ 创建部署进度总览文档
- ✅ 创建Python微服务SAE部署操作手册轻量版SAE配置
- ✅ 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
- ✅ 创建Node.js后端Docker镜像构建手册
---
## 📞 九、联系与支持
**技术支持**
- 开发团队内部文档
- 阿里云工单https://workorder.console.aliyun.com/
**紧急联系**
- 数据库问题:先检查 [08-PostgreSQL数据库部署操作手册.md]
- SAE部署问题先检查 [01-快速部署SOP-零基础版.md]
- 镜像构建问题:查看本文档"快速命令参考"章节
---
> **提示**:本文档会随着部署进度持续更新,请定期查看最新版本!
> **最后更新**2025-12-24