Major Changes: - Database: Install pg_bigm/pgvector plugins, create test database - Python service: v1.0 -> v1.1, add pymupdf4llm/openpyxl/pypandoc - Node.js backend: v1.3 -> v1.7, fix pino-pretty and ES Module imports - Frontend: v1.2 -> v1.3, skip TypeScript check for deployment - Code recovery: Restore empty files from local backup Technical Fixes: - Fix pino-pretty error in production (conditional loading) - Fix ES Module import paths (add .js extensions) - Fix OSSAdapter TypeScript errors - Update Prisma Schema (63 models, 16 schemas) - Update environment variables (DATABASE_URL, EXTRACTION_SERVICE_URL, OSS) - Remove deprecated variables (REDIS_URL, DIFY_API_URL, DIFY_API_KEY) Documentation: - Create 0126 deployment folder with 8 documents - Update database development standards v2.0 - Update SAE deployment status records Deployment Status: - PostgreSQL: ai_clinical_research_test with plugins - Python: v1.1 @ 172.17.173.84:8000 - Backend: v1.7 @ 172.17.173.89:3001 - Frontend: v1.3 @ 172.17.173.90:80 Tested: All services running successfully on SAE
10 KiB
10 KiB
⚙️ Node.js后端服务部署方案
文档版本:v1.0
创建日期:2026-01-26
适用范围:backend Node.js服务
变更类型:代码更新 + Schema同步 + 环境变量更新
📋 一、变更概述
1.1 变更内容
| 变更项 | 描述 | 优先级 |
|---|---|---|
| IIT Manager Agent模块 | 完整AI对话、REDCap集成、企业微信推送 | 🔴 高 |
| ASL文献筛选模块 | 功能完善和Bug修复 | 🟡 中 |
| DC数据清洗模块 | 功能更新 | 🟡 中 |
| Prisma Schema更新 | 添加iit_schema | 🔴 高 |
| OSS环境变量 | 新增OSS_BUCKET_STATIC等 | 🔴 高 |
1.2 当前状态
服务名称: nodejs-backend-test
当前版本: v1.3
镜像大小: 838MB
内网地址: http://172.17.173.73:3001
技术栈:
- Node.js: 22.x
- Prisma: 6.17.0
- Fastify: 4.x
- pg-boss: Postgres队列
1.3 目标状态
目标版本: v1.4
预计镜像大小: ~850MB
主要更新:
- IIT模块完整功能
- Prisma Schema包含iit_schema
- OSS环境变量更新
🔧 二、Prisma Schema更新
2.1 修改datasource配置
编辑 backend/prisma/schema.prisma:
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
schemas = ["platform_schema", "aia_schema", "pkb_schema", "asl_schema", "common_schema", "dc_schema", "rvw_schema", "admin_schema", "ssa_schema", "st_schema", "iit_schema", "public"]
}
注意:添加了 iit_schema 到schemas数组。
2.2 验证IIT模块表已存在
当前IIT模块的表是通过原生SQL创建的,需要确认表结构:
-- 检查iit_schema的表
SELECT table_name FROM information_schema.tables
WHERE table_schema = 'iit_schema';
-- 预期结果:
-- projects
-- pending_actions
-- task_runs
-- user_mappings
-- audit_logs
2.3 执行Prisma操作
cd backend
# 1. 生成Prisma Client(必须)
npx prisma generate
# 2. 验证Schema(可选,查看差异)
npx prisma db pull --schema=./prisma/schema.prisma
# 3. 推送Schema变更(谨慎,可能有破坏性变更)
# npx prisma db push
# 4. 验证
npx prisma studio
⚙️ 三、环境变量更新
3.1 需要更新的环境变量
| 变量名 | 当前值 | 新值 | 说明 |
|---|---|---|---|
OSS_BUCKET |
ai-clinical-research | ai-clinical-data | 数据Bucket |
OSS_BUCKET_STATIC |
(新增) | ai-clinical-static | 静态资源Bucket |
OSS_INTERNAL |
(新增) | true | 使用内网Endpoint |
3.2 完整环境变量清单(SAE生产)
# 基础配置
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配置(更新)
STORAGE_TYPE=oss
OSS_REGION=oss-cn-beijing
OSS_BUCKET=ai-clinical-data
OSS_BUCKET_STATIC=ai-clinical-static
OSS_ACCESS_KEY_ID=LTAI5tB2Dt3NdvBL3G7nYGv7
OSS_ACCESS_KEY_SECRET=1iSN9k39RkApP93QjUhC1DcPIeMG4V
OSS_INTERNAL=true
# 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=ww6ab493470ab4f377
WECHAT_AGENT_ID=1000002
WECHAT_CORP_SECRET=AZIVxMtoLb0rEszXS81e4dBRl-I9kgTjygIS0cFfENU
WECHAT_TOKEN=oXlRBm1YnvMy2SbDLbvAdDd5Gq3oBGq
WECHAT_ENCODING_AES_KEY=v88eT3O9bMW897h4btr7v7qvQImlMf31edTQCmuhOhO
🚀 四、构建与部署步骤
Step 1:更新Prisma Schema
cd D:\MyCursor\AIclinicalresearch\backend
# 编辑prisma/schema.prisma
# 1. 在schemas数组中添加 "iit_schema"
# 2. 确保IIT模块的模型定义存在
Step 2:生成Prisma Client
npx prisma generate
# 预期输出:
# ✔ Generated Prisma Client
Step 3:编译TypeScript
npm run build
# 验证编译结果
dir dist
# 应该看到:index.js, common/, modules/ 等
Step 4:构建Docker镜像
docker build -t backend-service:v1.4 .
# 预计时间:5分钟
# 预计大小:约850MB
Step 5:本地验证镜像(可选)
# 设置环境变量文件进行本地测试
docker run --rm -p 3001:3001 `
-e NODE_ENV=production `
-e PORT=3001 `
-e DATABASE_URL="postgresql://..." `
backend-service:v1.4
Step 6:登录ACR
docker login --username=gofeng117@163.com `
--password=fengzhibo117 `
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com
Step 7:打标签
docker tag backend-service:v1.4 `
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.4
Step 8:推送到ACR
docker push `
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.4
# 预计时间:10分钟(镜像约850MB)
# 成功标志:看到 "digest: sha256:..."
Step 9:更新SAE环境变量
- 登录SAE:https://sae.console.aliyun.com/
- 进入应用:
nodejs-backend-test - 点击【应用配置】→【环境变量】
- 添加/修改以下变量:
OSS_BUCKET=ai-clinical-data OSS_BUCKET_STATIC=ai-clinical-static OSS_INTERNAL=true - 点击【保存】
Step 10:SAE部署新版本
- 点击【部署应用】
- 配置:
- 镜像地址:选择
backend-service - 镜像版本:选择
v1.4
- 镜像地址:选择
- 点击【确认】
- 等待部署完成(约5-8分钟)
Step 11:验证部署
# 健康检查
curl http://172.17.173.73:3001/health
# 通过公网测试
curl http://8.140.53.236/api/v1/health
# 查看日志
# SAE控制台 → 日志查询
# 应该看到:"🚀 AI临床研究平台 - 后端服务器启动成功!"
📋 五、一键部署脚本
PowerShell脚本
backend/update-and-deploy.ps1:
# Node.js后端一键更新脚本
# 使用方法: .\update-and-deploy.ps1 v1.4
param(
[Parameter(Mandatory=$true)]
[string]$Version
)
$ErrorActionPreference = "Stop"
Write-Host "========================================" -ForegroundColor Green
Write-Host "开始更新Node.js后端到版本: $Version" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
# 1. 生成Prisma Client
Write-Host "`n[1/5] 生成Prisma Client..." -ForegroundColor Cyan
npx prisma generate
if ($LASTEXITCODE -ne 0) {
Write-Host "❌ Prisma生成失败!" -ForegroundColor Red
exit 1
}
Write-Host "✅ Prisma Client生成成功!" -ForegroundColor Green
# 2. 编译TypeScript
Write-Host "`n[2/5] 编译TypeScript..." -ForegroundColor Cyan
npm run build
if ($LASTEXITCODE -ne 0) {
Write-Host "❌ 编译失败!" -ForegroundColor Red
exit 1
}
Write-Host "✅ 编译成功!" -ForegroundColor Green
# 3. 构建Docker镜像
Write-Host "`n[3/5] 构建Docker镜像..." -ForegroundColor Cyan
docker build -t backend-service:$Version .
if ($LASTEXITCODE -ne 0) {
Write-Host "❌ 构建失败!" -ForegroundColor Red
exit 1
}
Write-Host "✅ 镜像构建成功!" -ForegroundColor Green
# 4. 打标签
Write-Host "`n[4/5] 打标签..." -ForegroundColor Cyan
$ImageUrl = "crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:$Version"
docker tag backend-service:$Version $ImageUrl
Write-Host "✅ 标签已打!" -ForegroundColor Green
# 5. 推送到ACR
Write-Host "`n[5/5] 推送到ACR..." -ForegroundColor Cyan
Write-Host "推送地址: $ImageUrl" -ForegroundColor Yellow
docker push $ImageUrl
if ($LASTEXITCODE -ne 0) {
Write-Host "❌ 推送失败!" -ForegroundColor Red
exit 1
}
Write-Host "`n========================================" -ForegroundColor Green
Write-Host "✅ 镜像已推送成功!" -ForegroundColor Green
Write-Host "========================================" -ForegroundColor Green
Write-Host "`n下一步操作:" -ForegroundColor Yellow
Write-Host "1. 登录SAE控制台: https://sae.console.aliyun.com/" -ForegroundColor Yellow
Write-Host "2. 进入应用: nodejs-backend-test" -ForegroundColor Yellow
Write-Host "3. 【重要】先更新环境变量(如有变化)" -ForegroundColor Red
Write-Host "4. 点击【部署应用】" -ForegroundColor Yellow
Write-Host "5. 选择镜像版本: $Version" -ForegroundColor Yellow
Write-Host "6. 确认部署" -ForegroundColor Yellow
Write-Host "`n镜像地址(VPC):" -ForegroundColor Cyan
Write-Host "crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:$Version" -ForegroundColor Cyan
⚠️ 六、注意事项
6.1 部署前检查
- Prisma Schema已更新(包含iit_schema)
npx prisma generate成功npm run build无错误- 环境变量已确认
6.2 部署后检查
- 健康检查通过
- IIT模块API可访问
- ASL模块功能正常
- OSS上传下载正常
6.3 可能的问题
-
IP地址变更:
- SAE部署后内网IP可能变化
- 需要更新前端Nginx的环境变量
-
数据库连接:
- 确保DATABASE_URL正确
- 检查connection_limit设置
-
Prisma迁移冲突:
- 如果Schema不匹配,可能需要手动调整
🔄 七、回滚方案
如果v1.4出现问题,回滚到v1.3:
- 登录SAE控制台
- 进入应用:
nodejs-backend-test - 点击【部署应用】
- 选择镜像版本:
v1.3 - 确认部署
📊 八、时间估算
| 步骤 | 预计时间 |
|---|---|
| 更新Prisma Schema | 5分钟 |
| 生成Prisma Client | 2分钟 |
| 编译TypeScript | 5分钟 |
| 构建Docker镜像 | 5分钟 |
| 推送到ACR | 10分钟 |
| 更新SAE环境变量 | 5分钟 |
| SAE部署 | 10分钟 |
| 验证测试 | 10分钟 |
| 总计 | 52分钟 |
最后更新:2026-01-26
维护人员:开发团队