Files
AIclinicalresearch/docs/05-部署文档/_archive-2025首次部署/12-Node.js后端-SAE部署操作手册.md
HaHafeng 6124c7abc6 docs(platform): Add database documentation system and restructure deployment docs
Completed:
- Add 6 core database documents (docs/01-平台基础层/07-数据库/)
  Architecture overview, migration history, environment comparison,
  tech debt tracking, seed data management, PostgreSQL extensions
- Restructure deployment docs: archive 20 legacy files to _archive-2025/
- Create unified daily operations manual (01-日常更新操作手册.md)
- Add pending deployment change tracker (03-待部署变更清单.md)
- Update database development standard to v3.0 (three iron rules)
- Fix Prisma schema type drift: align @db.* annotations with actual DB
  IIT: UUID/Timestamptz(6), SSA: Timestamp(6)/VarChar(20/50/100)
- Add migration: 20260227_align_schema_with_db_types (idempotent ALTER)
- Add Cursor Rule for auto-reminding deployment change documentation
- Update system status guide v6.4 with deployment and DB doc references
- Add architecture consultation docs (Prisma guide, SAE deployment guide)

Technical details:
- Manual migration due to shadow DB limitation (TD-001 in tech debt)
- Deployment docs reduced from 20+ scattered files to 3 core documents
- Cursor Rule triggers on schema.prisma, package.json, Dockerfile changes

Made-with: Cursor
2026-02-27 14:35:25 +08:00

540 lines
12 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.
# Node.js 后端 - SAE部署操作手册
> **创建时间**2025-12-24
> **操作对象**Node.js 后端服务
> **部署目标**:阿里云 SAEServerless应用引擎
> **预计时间**30-40分钟
---
## 📋 前置检查
开始之前,请确认:
- [x] Docker镜像已推送到ACR`backend-service:v1.0`
- [x] RDS PostgreSQL已部署并迁移数据
- [x] Python微服务已部署内网地址`http://172.17.173.66:8000`
- [x] 环境变量配置清单已准备(见 `11-Node.js后端-SAE部署配置清单.md`
---
## 🚀 第一步登录SAE控制台并创建应用
### 1.1 进入SAE控制台
1. 打开浏览器访问https://sae.console.aliyun.com/
2. 选择地域:**华北2北京**
3. 选择命名空间:**cn-beijing:test-airesearch**
### 1.2 创建新应用
1. 点击【创建应用】按钮
2. 填写基本信息:
```yaml
应用名称: nodejs-backend-test
部署方式: 容器镜像
```
3. 点击【下一步】
---
## 🐳 第二步:配置容器镜像
### 2.1 选择镜像来源
1. 镜像类型:选择 **容器镜像服务ACR**
2. 选择实例:**个人版**
3. 选择地域:**华北2北京**
### 2.2 配置镜像仓库认证
⚠️ **重要**:必须先配置认证,否则无法拉取私有镜像
1. 点击【配置镜像仓库】
2. 填写认证信息:
```yaml
Registry地址: crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com
用户名: gofeng117@163.com
密码: fengzhibo117
```
3. 点击【确定】
4. 点击【验证认证】,确保认证成功
### 2.3 选择镜像
1. 选择命名空间:**ai-clinical**
2. 选择镜像:**backend-service**
3. 选择镜像版本:**v1.0**
完整镜像地址应显示为:
```
crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.0
```
4. 点击【下一步】
---
## ⚙️ 第三步:配置应用参数
### 3.1 基础配置
```yaml
应用实例数: 1
CPU: 1核
内存: 2048 MB2GB
应用类型: Web应用
```
### 3.2 网络配置
1. **VPC配置**
- VPC ID`vpc-2ze055cptkew9c38w4r06`
- 安全组:`sg-2zedk6fi8sgmmcwdu7tu`
- 勾选【自动分配公网SLB】❌ 不勾选(仅内网访问)
2. **端口配置**
- 容器端口:`3001`
- 协议:`TCP`
### 3.3 环境变量配置
⚠️ **关键步骤**:复制 `11-Node.js后端-SAE部署配置清单.md` 中的环境变量
**方式A批量导入推荐**
1. 点击【批量导入】
2. 复制以下内容粘贴:
```env
DATABASE_URL=postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research?connection_limit=18&pool_timeout=10
JWT_SECRET=146c2fd064a69aa026496ee60e20483d07e951eae8323a501126469583433415
JWT_EXPIRES_IN=7d
DEEPSEEK_API_KEY=sk-7f8cc37a79fa4799860b38fc7ba2e150
DASHSCOPE_API_KEY=sk-75b4ff29a14a49e79667a331034f3298
CLOSEAI_API_KEY=sk-cu0ienbXYGGx2jc7BqP6ogtSWmP6fk918qV3RUdtGC3Ed1po
CLOSEAI_OPENAI_BASE_URL=https://api.openai-proxy.org/v1
CLOSEAI_CLAUDE_BASE_URL=https://api.openai-proxy.org/anthropic
DIFY_API_URL=http://localhost/v1
DIFY_API_KEY=dataset-mfvdiKvQ2l3NvxWm7RoYMN3c
PORT=3001
NODE_ENV=production
QUEUE_TYPE=pgboss
CACHE_TYPE=postgres
OSS_REGION=oss-cn-beijing
OSS_BUCKET=ai-clinical-research
OSS_ACCESS_KEY_ID=LTAI5tB2Dt3NdvBL3G7nYGv7
OSS_ACCESS_KEY_SECRET=1iSN9k39RkApP93QjUhC1DcPIeMG4V
OSS_ENDPOINT=oss-cn-beijing-internal.aliyuncs.com
PYTHON_SERVICE_URL=http://172.17.173.66:8000
LOG_LEVEL=info
```
3. 点击【确定】
**方式B逐个添加**(如果批量导入不可用)
在环境变量表格中逐个添加,参考 `11-Node.js后端-SAE部署配置清单.md` 中的表格。
### 3.4 启动命令配置
1. 在【启动命令】中填写:
```bash
node dist/server.js
```
**说明**
- ✅ 不需要 `npm start`(镜像已经编译好)
- ✅ 不需要 `prisma migrate`(数据已导入)
- ✅ 不需要 `prisma generate`(镜像构建时已生成)
### 3.5 健康检查配置
1. 勾选【启用健康检查】
2. 配置参数:
```yaml
检查方式: HTTP请求
请求路径: /health
端口: 3001
初始延迟: 30秒
检查间隔: 10秒
超时时间: 3秒
不健康阈值: 3次
健康阈值: 2次
```
**为什么初始延迟设置30秒**
- Node.js应用启动需要10-15秒
- Prisma Client初始化需要5-10秒
- 数据库连接池建立需要5秒
- 留有余量,避免首次健康检查失败
3. 点击【下一步】
---
## 📝 第四步:确认配置并部署
### 4.1 检查配置摘要
在确认页面,仔细检查:
- [x] 镜像地址正确:`backend-service:v1.0`
- [x] 资源配置正确1核2GB
- [x] 环境变量数量21个可以点击查看详情
- [x] 健康检查路径:`/health`
- [x] 启动命令:`node dist/server.js`
### 4.2 开始部署
1. 点击【创建应用】
2. 等待部署约3-5分钟
**部署过程**
```
1. 拉取镜像2分钟
2. 创建容器实例1分钟
3. 启动应用30秒
4. 执行健康检查30秒
```
---
## ✅ 第五步:部署验证
### 5.1 检查应用状态
1. 在SAE应用列表中找到 `nodejs-backend-test`
2. 查看状态:
- ✅ 实例状态:**运行中**(绿色)
- ✅ 健康检查:**通过**(绿色)
- ❌ 如果显示"异常"或"未通过",进入第六步排查
### 5.2 查看实时日志
1. 点击应用名称,进入应用详情
2. 点击【日志】→【实时日志】
3. 查找以下关键信息:
**✅ 成功的日志示例**
```
============================================================
🚀 AI临床研究平台 - 后端服务器启动成功!
============================================================
📍 服务地址: http://0.0.0.0:3001
🔍 健康检查: http://0.0.0.0:3001/health
📡 API入口: http://0.0.0.0:3001/api/v1
🌍 运行环境: production
============================================================
[INFO] Server listening at http://0.0.0.0:3001
[INFO] Database connected: ai_clinical_research
[INFO] Health check endpoint available: /health
```
**❌ 失败的日志示例**
```
[ERROR] Database connection failed: connect ETIMEDOUT
[ERROR] Prisma Client initialization failed
[ERROR] Application startup failed
```
如果看到错误,进入第六步排查。
### 5.3 获取内网地址
1. 在应用详情页,找到【基本信息】
2. 复制内网地址,格式类似:`http://172.17.x.x:3001`
3. 记录到部署文档中
**示例内网地址**
```
http://172.17.173.88:3001
```
### 5.4 测试健康检查
在SAE的【Webshell】中执行
```bash
# 测试健康检查
curl http://172.17.173.88:3001/health
# 期望返回HTTP 200
{
"status": "ok",
"timestamp": "2025-12-24T12:00:00.000Z",
"database": "connected",
"uptime": 123,
"environment": "production"
}
```
### 5.5 测试数据库连接
```bash
# 测试用户API如果有数据
curl http://172.17.173.88:3001/api/v1/users \
-H "Authorization: Bearer test-token"
# 或测试其他已知API端点
```
---
## 🔧 第六步:故障排查(可选)
### 问题1健康检查一直失败
**症状**:应用状态显示"异常",实例频繁重启
**排查步骤**
1. **检查日志中的错误信息**
```bash
# 在SAE实时日志中查找关键错误
[ERROR] ...
```
2. **常见原因及解决方案**
| 错误信息 | 原因 | 解决方案 |
|---------|------|---------|
| `connect ETIMEDOUT` | 数据库连接超时 | 检查RDS白名单、VPC配置 |
| `authentication failed` | 数据库密码错误 | 检查DATABASE_URL中的密码编码 |
| `ENOENT: no such file or directory` | 启动命令错误 | 确认启动命令为 `node dist/server.js` |
| `Cannot find module 'prisma'` | Prisma Client未生成 | 重新构建镜像 |
| `Port 3001 already in use` | 端口冲突 | 检查容器端口配置 |
3. **验证数据库连接**
```bash
# 在SAE的Webshell中测试
curl -v telnet://pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432
```
### 问题2镜像拉取失败
**症状**:日志显示 `Failed to pull image`
**解决方案**
1. 检查ACR认证配置
- Registry地址是否正确VPC域名
- 用户名密码是否正确
2. 重新配置镜像仓库认证:
- SAE应用详情 → 配置管理 → 镜像设置
- 重新输入认证信息
### 问题3环境变量未生效
**症状**:应用行为与预期不符
**排查步骤**
1. 在SAE应用详情 → 环境变量中,确认所有变量已配置
2. 在Webshell中查看环境变量
```bash
env | grep DATABASE_URL
env | grep JWT_SECRET
```
### 问题4内存不足OOM
**症状**:应用频繁重启,日志中出现 `Out of Memory`
**解决方案**
1. 在SAE应用详情 → 基本配置中,将内存调整为 **2核4GB**
2. 重新部署应用
---
## 📊 第七步:性能监控
### 7.1 查看监控指标
在SAE应用详情 → 监控中,关注以下指标:
```yaml
CPU使用率: 应 < 70%
内存使用率: 应 < 80%
实例健康状态: 应保持"健康"
请求响应时间: 应 < 1000ms
```
### 7.2 设置告警
建议配置以下告警:
```yaml
CPU使用率 > 80%: 发送告警
内存使用率 > 90%: 发送告警
实例不健康: 立即发送告警
```
---
## 📝 第八步:更新部署文档
部署成功后,更新以下文档:
### 8.1 更新部署进度总览
编辑 `00-部署进度总览.md`
```markdown
| **Node.js后端** | ✅ 已完成 | v1.0 | SAE | 2025-12-24 | ... |
```
### 8.2 记录内网地址
在 `00-部署进度总览.md` 中添加:
```markdown
| nodejs-backend-test | ✅ 运行中 | 1核2GB | 1 | 3001 | http://172.17.173.88:3001 | 无(仅内网) |
```
---
## 🎯 后续步骤
Node.js后端部署成功后
### 1. 部署前端Nginx下一步
前端Nginx需要配置Node.js后端的内网地址
```bash
# 前端Nginx环境变量
VITE_API_BASE_URL=http://172.17.173.88:3001
```
参考文档:`07-前端Nginx-SAE部署操作手册.md`
### 2. 全链路测试
完整的请求链路:
```
用户浏览器
前端Nginx (SAE)
Node.js后端 (SAE) ← http://172.17.173.88:3001
├─→ Python微服务 (SAE) ← http://172.17.173.66:8000
├─→ RDS PostgreSQL ← pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432
└─→ 阿里云OSS ← ai-clinical-research.oss-cn-beijing-internal.aliyuncs.com
```
### 3. 性能优化(可选)
如果测试环境运行稳定,可以考虑:
- **弹性伸缩**:配置自动扩缩容规则
- **资源调整**根据监控数据调整CPU/内存
- **日志优化**:配置日志清理策略
---
## ✅ 部署完成检查清单
在完成部署后,请确认:
- [ ] SAE应用状态为"运行中"
- [ ] 健康检查显示"通过"
- [ ] 实时日志无ERROR级别错误
- [ ] 健康检查接口返回200
- [ ] 内网地址已记录
- [ ] 部署文档已更新
- [ ] Python微服务可以正常调用
- [ ] 数据库连接正常
- [ ] OSS文件上传/下载正常
---
## 📞 支持与帮助
### 常见问题
1. **Q: 如何重启应用?**
- A: SAE应用详情 → 基本信息 → 点击【重启】
2. **Q: 如何查看完整日志?**
- A: SAE应用详情 → 日志 → 历史日志(支持时间范围查询)
3. **Q: 如何回滚到之前的版本?**
- A: SAE应用详情 → 版本管理 → 选择历史版本 → 回滚
4. **Q: 如何扩容实例?**
- A: SAE应用详情 → 基本配置 → 修改实例数/规格 → 确认变更
### 联系方式
- **技术支持**:开发团队
- **阿里云工单**https://workorder.console.aliyun.com/
---
**文档创建时间**2025-12-24
**最后更新**2025-12-24
**维护人员**:运维团队
---
🎉 **祝部署顺利!如有问题,请参考故障排查章节或联系技术支持。**