feat(aia): Complete AIA V2.0 with universal streaming capabilities
Major Changes: - Add StreamingService with OpenAI Compatible format - Upgrade Chat component V2 with Ant Design X integration - Implement AIA module with 12 intelligent agents - Update API routes to unified /api/v1 prefix - Update system documentation Backend (~1300 lines): - common/streaming: OpenAI Compatible adapter - modules/aia: 12 agents, conversation service, streaming integration - Update route versions (RVW, PKB to v1) Frontend (~3500 lines): - modules/aia: AgentHub + ChatWorkspace (100% prototype restoration) - shared/Chat: AIStreamChat, ThinkingBlock, useAIStream Hook - Update API endpoints to v1 Documentation: - AIA module status guide - Universal capabilities catalog - System overview updates - All module documentation sync Tested: Stream response verified, authentication working Status: AIA V2.0 core completed (85%)
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
**<EFBFBD><EFBFBD>﹝<EFBFBD><EFBFBD>𧋦**: v1.0
|
||||
**<EFBFBD>𥕦遣<EFBFBD>園𡢿**: 2024-12-24
|
||||
**<EFBFBD><EFBFBD>鍂<EFBFBD><EFBFBD>凒**: AIclinicalresearch 撟喳蝱 - Node.js <20>𡒊垢<F0A1928A>滚𦛚
|
||||
**目标读者**: 运维工程师、后端开发工程师
|
||||
**<EFBFBD>格<EFBFBD>霂餉<EFBFBD>?*: 餈鞟輕撌亦<E6928C>撣<EFBFBD><E692A3><EFBFBD><EFBFBD>蝡臬<E89DA1><E887AC>穃極蝔见<E89D94>
|
||||
|
||||
---
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
3. [<EFBFBD><EFBFBD>遣瘚<EFBFBD><EFBFBD>](#<23><>遣瘚<E981A3><E7989A>)
|
||||
4. [<EFBFBD>𨅯<EFBFBD>靽⊥<EFBFBD>](#<23>𨅯<EFBFBD>靽⊥<E99DBD>)
|
||||
5. [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>埝䰻](#<23><><EFBFBD><EFBFBD>埝䰻)
|
||||
6. [最佳实践](#最佳实践)
|
||||
6. [<EFBFBD><EFBFBD>雿喳<EFBFBD>頝琶(#<23><>雿喳<E99BBF>頝?
|
||||
|
||||
---
|
||||
|
||||
@@ -22,21 +22,21 @@
|
||||
|
||||
### 1.1 <20><>遣蝑𣇉裦
|
||||
|
||||
本次构建采用**改进版方案B(本地编译+Docker打包)**,相比传统方案有以下优势:
|
||||
<EFBFBD>祆活<EFBFBD><EFBFBD>遣<EFBFBD><EFBFBD>鍂**<2A>寡<EFBFBD><E5AFA1><EFBFBD>䲮獢㇂嚗<E38782>𧋦<EFBFBD>啁<EFBFBD>霂?Docker<65>枏<EFBFBD>嚗?*嚗𣬚㮾瘥𥪯<E798A5>蝏<EFBFBD>䲮獢<E4B2AE><E78DA2>隞乩<E99A9E>隡睃飵嚗?
|
||||
|
||||
| 对比项 | 传统方案 | 改进版方案B |
|
||||
| 撖寞<EFBFBD>憿?| 隡删<E99AA1><E588A0>寞<EFBFBD> | <20>寡<EFBFBD><E5AFA1><EFBFBD>䲮獢㇂ |
|
||||
|--------|----------|-------------|
|
||||
| **TypeScript编译** | Docker中执行 | 本地预编译 ✅ |
|
||||
| **依赖安装** | 完整依赖 | 仅生产依赖 ✅ |
|
||||
| **网络依赖** | 高(易超时) | 低(更稳定) ✅ |
|
||||
| **构建时间** | ~10分钟 | ~5分钟 ✅ |
|
||||
| **平台兼容性** | 有风险 | 无风险 ✅ |
|
||||
| **TypeScript蝻𤥁<EFBFBD>** | Docker銝剜<EFBFBD>銵?| <20>砍𧑐憸<F0A79190><E686B8>霂?<3F>?|
|
||||
| **靘肽<EFBFBD>摰㕑<EFBFBD>** | 摰峕㟲靘肽<EFBFBD> | 隞<><E99A9E>鈭找<E988AD>韏?<3F>?|
|
||||
| **蝵𤑳<EFBFBD>靘肽<EFBFBD>** | 擃矋<EFBFBD><EFBFBD>栞<EFBFBD><EFBFBD>塚<EFBFBD> | 雿𠬍<E99BBF><F0A0AC8D>渡迅摰𡄯<E691B0> <20>?|
|
||||
| **<EFBFBD><EFBFBD>遣<EFBFBD>園𡢿** | ~10<EFBFBD><EFBFBD><EFBFBD> | ~5<EFBFBD><EFBFBD><EFBFBD> <20>?|
|
||||
| **撟喳蝱<EFBFBD>澆捆<EFBFBD>?* | <20>厰<EFBFBD><E58EB0>?| <20>𣳇<EFBFBD><F0A3B387>?<3F>?|
|
||||
|
||||
### 1.2 <20><>遣<EFBFBD>鞉<EFBFBD>
|
||||
|
||||
```
|
||||
<EFBFBD>𨅯<EFBFBD><EFBFBD>滨妍: backend-service:v1.0
|
||||
镜像大小: 838MB (压缩后 ~186MB)
|
||||
<EFBFBD>𨅯<EFBFBD>憭批<EFBFBD>: 838MB (<EFBFBD>讠憬<EFBFBD>?~186MB)
|
||||
<EFBFBD>𨅯<EFBFBD>ID: a4ffb61c15af
|
||||
<EFBFBD><EFBFBD>遣<EFBFBD>園𡢿: ~5<><35><EFBFBD>
|
||||
ACR<EFBFBD>啣<EFBFBD>: crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.0
|
||||
@@ -46,10 +46,10 @@ ACR地址: crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical
|
||||
|
||||
## 2. <20>滨蔭<E6BBA8><E894AD><EFBFBD>
|
||||
|
||||
### 2.1 环境检查
|
||||
### 2.1 <EFBFBD>臬<EFBFBD>璉<EFBFBD><EFBFBD>?
|
||||
|
||||
```powershell
|
||||
# 1. 检查Docker状态
|
||||
# 1. 璉<EFBFBD><EFBFBD>主ocker<EFBFBD>嗆<EFBFBD>?
|
||||
docker --version
|
||||
docker ps
|
||||
|
||||
@@ -63,7 +63,7 @@ cd D:\MyCursor\AIclinicalresearch\backend
|
||||
|
||||
### 2.2 隞<><E99A9E><EFBFBD><EFBFBD><EFBFBD>
|
||||
|
||||
#### ✅ 必须完成的步骤
|
||||
#### <EFBFBD>?敹<>◆摰峕<E691B0><E5B395><EFBFBD>郊撉?
|
||||
|
||||
**甇仿炊1嚗䥪risma<6D>滚<EFBFBD><E6BB9A>峕郊嚗<E9838A><E59A97>憿鳴<E686BF>**
|
||||
|
||||
@@ -74,8 +74,8 @@ $env:DATABASE_URL = "postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3
|
||||
# <20>扯<EFBFBD>Prisma<6D>滚<EFBFBD><E6BB9A>峕郊
|
||||
npx prisma db pull
|
||||
|
||||
# 输出应该显示:
|
||||
# ✔ Introspected 32 models and wrote them into prisma\schema.prisma
|
||||
# 颲枏枂摨磰砲<EFBFBD>曄內嚗?
|
||||
# <EFBFBD>?Introspected 32 models and wrote them into prisma\schema.prisma
|
||||
```
|
||||
|
||||
**甇仿炊2嚗𡁶<E59A97><F0A181B6>辥risma Client**
|
||||
@@ -83,8 +83,8 @@ npx prisma db pull
|
||||
```powershell
|
||||
npx prisma generate
|
||||
|
||||
# 输出应该显示:
|
||||
# ✔ Generated Prisma Client (v6.17.0)
|
||||
# 颲枏枂摨磰砲<EFBFBD>曄內嚗?
|
||||
# <EFBFBD>?Generated Prisma Client (v6.17.0)
|
||||
```
|
||||
|
||||
**甇仿炊3嚗関ypeScript蝻𤥁<E89DBB>嚗<EFBFBD><E59A97>憿鳴<E686BF>**
|
||||
@@ -93,16 +93,16 @@ npx prisma generate
|
||||
# 蝻𤥁<E89DBB>TypeScript隞<74><E99A9E>
|
||||
npm run build
|
||||
|
||||
# 成功输出:
|
||||
# <EFBFBD>𣂼<EFBFBD>颲枏枂嚗?
|
||||
# > ai-clinical-backend@1.0.0 build
|
||||
# > tsc
|
||||
# (无错误信息)
|
||||
# (<EFBFBD>𣳇<EFBFBD>霂臭縑<EFBFBD>?
|
||||
|
||||
# 璉<><E79289>卡ist<73>桀<EFBFBD><E6A180>臬炏<E887AC><E7828F><EFBFBD>
|
||||
ls dist
|
||||
```
|
||||
|
||||
⚠️ **重要提示**:如果编译失败,必须先修复所有TypeScript错误!
|
||||
<EFBFBD>𩤃<EFBFBD> **<EFBFBD>滩<EFBFBD><EFBFBD>鞟內**嚗𡁜<E59A97><F0A1819C>𦦵<EFBFBD>霂穃仃韐伐<E99F90>敹<EFBFBD>◆<EFBFBD><E29786>耨憭齿<E686AD><E9BDBF>凤ypeScript<EFBFBD>躰秤嚗?
|
||||
|
||||
---
|
||||
|
||||
@@ -114,11 +114,11 @@ ls dist
|
||||
# 1. 蝖桐<E89D96><E6A190>灸ackend<6E>桀<EFBFBD>
|
||||
cd D:\MyCursor\AIclinicalresearch\backend
|
||||
|
||||
# 2. 检查Dockerfile和.dockerignore
|
||||
# 2. 璉<EFBFBD><EFBFBD>主ockerfile<EFBFBD>?dockerignore
|
||||
ls Dockerfile
|
||||
ls .dockerignore
|
||||
|
||||
# 3. 开始构建(需要5分钟)
|
||||
# 3. 撘<EFBFBD>憪𧢲<EFBFBD>撱綽<EFBFBD><EFBFBD><EFBFBD>閬?<3F><><EFBFBD>嚗?
|
||||
docker build -t backend-service:v1.0 .
|
||||
|
||||
# 4. <20>亦<EFBFBD><E4BAA6><EFBFBD>遣蝏𤘪<E89D8F>
|
||||
@@ -127,22 +127,22 @@ docker images backend-service:v1.0
|
||||
|
||||
### 3.2 <20><>遣餈<E981A3><E9A488>霂湔<E99C82>
|
||||
|
||||
**阶段1:依赖安装(约4分钟)**
|
||||
**<EFBFBD>嗆挾1嚗帋<EFBFBD>韏硋<EFBFBD>鋆<EFBFBD><EFBFBD>蝥?<3F><><EFBFBD>嚗?*
|
||||
```dockerfile
|
||||
FROM node:alpine AS builder
|
||||
RUN apk add --no-cache openssl
|
||||
COPY package*.json ./
|
||||
COPY prisma ./prisma/
|
||||
RUN npm ci --production # 仅安装生产依赖
|
||||
RUN npm ci --production # 隞<EFBFBD><EFBFBD>鋆<EFBFBD><EFBFBD>鈭找<EFBFBD>韏?
|
||||
RUN npx prisma generate # <20><><EFBFBD>Prisma Client
|
||||
```
|
||||
|
||||
**阶段2:复制本地编译结果(约10秒)**
|
||||
**<EFBFBD>嗆挾2嚗𡁜<EFBFBD><EFBFBD>嗆𧋦<EFBFBD>啁<EFBFBD>霂𤑳<EFBFBD><EFBFBD>頣<EFBFBD>蝥?0蝘𡜐<E89D98>**
|
||||
```dockerfile
|
||||
COPY dist ./dist # 憭滚<E686AD><E6BB9A>砍𧑐撌脩<E6928C>霂𤑳<E99C82>TypeScript隞<74><E99A9E>
|
||||
```
|
||||
|
||||
**阶段3:运行镜像打包(约1分钟)**
|
||||
**<EFBFBD>嗆挾3嚗朞<EFBFBD>銵屸<EFBFBD><EFBFBD>𤩺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝥?<3F><><EFBFBD>嚗?*
|
||||
```dockerfile
|
||||
FROM node:alpine
|
||||
COPY --from=builder /app/node_modules ./node_modules
|
||||
@@ -153,20 +153,20 @@ COPY --from=builder /app/prisma ./prisma
|
||||
### 3.3 <20>券<EFBFBD><E588B8><EFBFBD>ACR
|
||||
|
||||
```powershell
|
||||
# 1. 登录ACR(使用个人版实例地址)
|
||||
# 1. <EFBFBD>餃<EFBFBD>ACR嚗<EFBFBD>蝙<EFBFBD>其葵鈭箇<EFBFBD>摰硺<EFBFBD><EFBFBD>啣<EFBFBD>嚗?
|
||||
echo "fengzhibo117" | docker login --username=gofeng117@163.com --password-stdin crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com
|
||||
|
||||
# 颲枏枂嚗匁ogin Succeeded
|
||||
|
||||
# 2. 打标签
|
||||
# 2. <EFBFBD>𤘪<EFBFBD>蝑?
|
||||
docker tag backend-service:v1.0 crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.0
|
||||
docker tag backend-service:v1.0 crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:latest
|
||||
|
||||
# 3. 推送镜像
|
||||
# 3. <EFBFBD>券<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
|
||||
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.0
|
||||
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:latest
|
||||
|
||||
# 输出:
|
||||
# 颲枏枂嚗?
|
||||
# v1.0: digest: sha256:a4ffb61c15af... size: 856
|
||||
# latest: digest: sha256:a4ffb61c15af... size: 856
|
||||
```
|
||||
@@ -191,7 +191,7 @@ crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-se
|
||||
|
||||
```yaml
|
||||
<EFBFBD>𨅯<EFBFBD><EFBFBD>䁅<EFBFBD>: sha256:a4ffb61c15af1cd1ed9de187b4464a1aab773918e5b41b4df5b8ad96514f9941
|
||||
大小: 838MB (压缩后 ~186MB)
|
||||
憭批<EFBFBD>: 838MB (<EFBFBD>讠憬<EFBFBD>?~186MB)
|
||||
<EFBFBD>嗆<EFBFBD>: linux/amd64
|
||||
<EFBFBD>箇<EFBFBD><EFBFBD>𨅯<EFBFBD>: node:alpine
|
||||
Node<EFBFBD><EFBFBD>𧋦: 22.x
|
||||
@@ -205,7 +205,7 @@ Node版本: 22.x
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> node_modules/ # <20>煺漣靘肽<E99D98>
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> dist/ # 蝻𤥁<E89DBB><F0A4A581>𡒊<EFBFBD>JS隞<53><E99A9E>
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> prisma/ # Prisma Schema
|
||||
│ └── schema.prisma
|
||||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> schema.prisma
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> package.json
|
||||
<EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> uploads/ # 銝湔𧒄<E6B994><F0A79284>辣<EFBFBD>桀<EFBFBD>
|
||||
```
|
||||
@@ -216,7 +216,7 @@ Node版本: 22.x
|
||||
CMD ["node", "dist/index.js"]
|
||||
```
|
||||
|
||||
### 4.5 健康检查
|
||||
### 4.5 <EFBFBD>亙熒璉<EFBFBD><EFBFBD>?
|
||||
|
||||
```dockerfile
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
||||
@@ -229,19 +229,19 @@ HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
||||
|
||||
### 5.1 撣貉<E692A3><E8B289>桅<EFBFBD>
|
||||
|
||||
#### ❌ 问题1:TypeScript编译失败
|
||||
#### <EFBFBD>?<3F>桅<EFBFBD>1嚗関ypeScript蝻𤥁<EFBFBD>憭梯揖
|
||||
|
||||
**症状:**
|
||||
**<EFBFBD><EFBFBD>𠶖嚗?*
|
||||
```
|
||||
error TS2554: Expected 2-3 arguments, but got 1.
|
||||
error TS2322: Type 'XXX' is not assignable to type 'YYY'.
|
||||
```
|
||||
|
||||
**原因:**
|
||||
- Prisma反向同步后缺少关系字段
|
||||
**<EFBFBD>笔<EFBFBD>嚗?*
|
||||
- Prisma<EFBFBD>滚<EFBFBD><EFBFBD>峕郊<EFBFBD>𡒊撩撠穃<EFBFBD>蝟餃<EFBFBD>畾?
|
||||
- 隞<><E99A9E>銝窰risma<6D><61><EFBFBD><EFBFBD><EFBFBD>掩<EFBFBD>衤<EFBFBD><E8A1A4>寥<EFBFBD>
|
||||
|
||||
**解决方案:**
|
||||
**閫<EFBFBD><EFBFBD><EFBFBD>寞<EFBFBD>嚗?*
|
||||
```powershell
|
||||
# 1. <20>齿鰵<E9BDBF>峕郊Prisma
|
||||
npx prisma db pull
|
||||
@@ -253,57 +253,57 @@ npm run build
|
||||
# 3. 憒<><E68692>餈䀹<E9A488><E480B9>躰秤嚗峕<E59A97><E5B395>另sconfig.json<6F>滨蔭
|
||||
```
|
||||
|
||||
#### ❌ 问题2:Docker构建网络超时
|
||||
#### <EFBFBD>?<3F>桅<EFBFBD>2嚗鋽ocker<65><72>遣蝵𤑳<E89DB5>頞<EFBFBD>𧒄
|
||||
|
||||
**症状:**
|
||||
**<EFBFBD><EFBFBD>𠶖嚗?*
|
||||
```
|
||||
npm error code ECONNRESET
|
||||
npm error network aborted
|
||||
```
|
||||
|
||||
**原因:**
|
||||
**<EFBFBD>笔<EFBFBD>嚗?*
|
||||
- npm<70>𨅯<EFBFBD>皞鞟<E79A9E>蝏靝<E89D8F>蝔喳<E89D94>
|
||||
- npm ci 銝贝蝸靘肽<E99D98>憭梯揖
|
||||
|
||||
**解决方案:**
|
||||
✅ **使用改进版方案B(本次采用的方案)**
|
||||
**閫<EFBFBD><EFBFBD><EFBFBD>寞<EFBFBD>嚗?*
|
||||
<EFBFBD>?**雿輻鍂<E8BCBB>寡<EFBFBD><E5AFA1><EFBFBD>䲮獢㇂嚗<E38782>𧋦甈⊿<E79488><E28ABF>函<EFBFBD><E587BD>寞<EFBFBD>嚗?*
|
||||
- <20>砍𧑐憸<F0A79190><E686B8>霂𡢅<E99C82>頝唾<E9A09D>Docker銝剔<E98A9D>蝻𤥁<E89DBB>甇仿炊
|
||||
- <20>芸<EFBFBD>鋆<EFBFBD><E98B86>鈭找<E988AD>韏吔<E99F8F><E59094>誩<EFBFBD>蝵𤑳<E89DB5>隡㰘<E99AA1>
|
||||
|
||||
#### ❌ 问题3:推送到ACR失败(403 Forbidden)
|
||||
#### <EFBFBD>?<3F>桅<EFBFBD>3嚗𡁏綫<F0A1818F><E7B6AB><EFBFBD>ACR憭梯揖嚗?03 Forbidden嚗?
|
||||
|
||||
**症状:**
|
||||
**<EFBFBD><EFBFBD>𠶖嚗?*
|
||||
```
|
||||
Error response from daemon: login attempt to https://registry.cn-beijing.aliyuncs.com/v2/ failed with status: 403 Forbidden
|
||||
```
|
||||
|
||||
**原因:**
|
||||
**<EFBFBD>笔<EFBFBD>嚗?*
|
||||
- 雿輻鍂鈭<E98D82><E988AD>霂舐<E99C82>ACR<43>啣<EFBFBD>
|
||||
- 摨磰砲雿輻鍂銝芯犖<E88AAF><E78A96><EFBFBD>靘见𧑐<E8A781><F0A79190>嚗䔶<E59A97><E494B6>臭<EFBFBD>銝𡁶<E98A9D><F0A181B6>啣<EFBFBD>
|
||||
|
||||
**解决方案:**
|
||||
**閫<EFBFBD><EFBFBD><EFBFBD>寞<EFBFBD>嚗?*
|
||||
```powershell
|
||||
# ✅ 正确的登录地址(个人版实例)
|
||||
# <EFBFBD>?甇<>&<EFBFBD><EFBC86>蒈敶訫𧑐<E8A8AB><F0A79190>嚗<EFBFBD>葵鈭箇<E988AD>摰硺<E691B0>嚗?
|
||||
docker login crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com
|
||||
|
||||
# ❌ 错误的登录地址(企业版)
|
||||
# <EFBFBD>?<3F>躰秤<E8BAB0><E7A7A4>蒈敶訫𧑐<E8A8AB><F0A79190>嚗<EFBFBD><E59A97>銝𡁶<E98A9D>嚗?
|
||||
docker login registry.cn-beijing.aliyuncs.com
|
||||
```
|
||||
|
||||
#### ❌ 问题4:VPC内网地址推送超时
|
||||
#### <EFBFBD>?<3F>桅<EFBFBD>4嚗间PC<50><43><EFBFBD><EFBFBD>啣<EFBFBD><E595A3>券<EFBFBD><E588B8><EFBFBD><EFBFBD>?
|
||||
|
||||
**症状:**
|
||||
**<EFBFBD><EFBFBD>𠶖嚗?*
|
||||
```
|
||||
failed to do request: Head "https://crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/...": net/http: TLS handshake timeout
|
||||
```
|
||||
|
||||
**原因:**
|
||||
- VPC内网地址只能在阿里云VPC内访问
|
||||
**<EFBFBD>笔<EFBFBD>嚗?*
|
||||
- VPC<EFBFBD><EFBFBD><EFBFBD><EFBFBD>啣<EFBFBD><EFBFBD>芾<EFBFBD><EFBFBD>券燵<EFBFBD>䔶<EFBFBD>VPC<EFBFBD><EFBFBD>挪<EFBFBD>?
|
||||
- <20>砍𧑐撘<F0A79190><E69298>𤑳㴓憓<E3B493><E68693>瘜閗挪<E99697>姬PC<50><43><EFBFBD>
|
||||
|
||||
**解决方案:**
|
||||
**閫<EFBFBD><EFBFBD><EFBFBD>寞<EFBFBD>嚗?*
|
||||
```powershell
|
||||
# 本地开发环境使用公网地址推送
|
||||
# <EFBFBD>砍𧑐撘<EFBFBD><EFBFBD>𤑳㴓憓<EFBFBD>蝙<EFBFBD>典<EFBFBD>蝵穃𧑐<EFBFBD><EFBFBD><EFBFBD>券<EFBFBD>?
|
||||
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.0
|
||||
|
||||
# SAE<41>函蔡<E587BD>嗡蝙<E597A1>汲PC<50><43><EFBFBD><EFBFBD>啣<EFBFBD><E595A3>匧<EFBFBD>嚗<EFBFBD>銁SAE<41>批<EFBFBD><E689B9>圈<EFBFBD>蝵殷<E89DB5>
|
||||
@@ -312,7 +312,7 @@ docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinica
|
||||
### 5.2 撉諹<E69289><E8ABB9>𨅯<EFBFBD>
|
||||
|
||||
```powershell
|
||||
# 1. 检查镜像是否存在
|
||||
# 1. 璉<EFBFBD><EFBFBD>仿<EFBFBD><EFBFBD>𤩺糓<EFBFBD>血<EFBFBD><EFBFBD>?
|
||||
docker images backend-service:v1.0
|
||||
|
||||
# 2. <20>亦<EFBFBD><E4BAA6>𨅯<EFBFBD>霂衣<E99C82>靽⊥<E99DBD>
|
||||
@@ -329,7 +329,7 @@ docker run -d `
|
||||
# 4. <20>亦<EFBFBD>摰孵膥<E5ADB5>亙<EFBFBD>
|
||||
docker logs backend-test
|
||||
|
||||
# 5. 测试健康检查
|
||||
# 5. 瘚贝<EFBFBD><EFBFBD>亙熒璉<EFBFBD><EFBFBD>?
|
||||
curl http://localhost:3001/health
|
||||
|
||||
# 6. 皜<><E79A9C>瘚贝<E7989A>摰孵膥
|
||||
@@ -339,23 +339,23 @@ docker rm backend-test
|
||||
|
||||
---
|
||||
|
||||
## 6. 最佳实践
|
||||
## 6. <EFBFBD><EFBFBD>雿喳<EFBFBD>頝?
|
||||
|
||||
### 6.1 构建前检查清单
|
||||
### 6.1 <EFBFBD><EFBFBD>遣<EFBFBD>齿<EFBFBD><EFBFBD>交<EFBFBD><EFBFBD>?
|
||||
|
||||
- [ ] 已完成Prisma反向同步(`npx prisma db pull`)
|
||||
- [ ] 已生成Prisma Client(`npx prisma generate`)
|
||||
- [ ] TypeScript编译成功(`npm run build`)
|
||||
- [ ] 撌脣<EFBFBD><EFBFBD>辥risma<EFBFBD>滚<EFBFBD><EFBFBD>峕郊嚗Ǒnpx prisma db pull`嚗?
|
||||
- [ ] 撌脩<EFBFBD><EFBFBD>辥risma Client嚗Ǒnpx prisma generate`嚗?
|
||||
- [ ] TypeScript蝻𤥁<EFBFBD><EFBFBD>𣂼<EFBFBD>嚗Ǒnpm run build`嚗?
|
||||
- [ ] dist<73>桀<EFBFBD>撌脩<E6928C><E884A9>𣂷<EFBFBD><F0A382B7><EFBFBD>鉄<EFBFBD><E98984><EFBFBD>厩<EFBFBD>霂穃<E99C82><E7A983><EFBFBD>S<EFBFBD><53>辣
|
||||
- [ ] Docker Desktop撌脣鍳<E884A3>典僎餈鞱<E9A488>
|
||||
- [ ] 蝵𤑳<E89DB5>餈墧𦻖甇<F0A6BB96>虜
|
||||
|
||||
### 6.2 <20><>𧋦蝞∠<E89D9E>
|
||||
|
||||
**镜像标签规范:**
|
||||
**<EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD>倌閫<EFBFBD><EFBFBD>嚗?*
|
||||
```
|
||||
v1.0 - <20>孵<EFBFBD><E5ADB5><EFBFBD>𧋦嚗<F0A78BA6>綫<EFBFBD>鞟鍂鈭𡒊<E988AD>鈭抒㴓憓<E3B493><E68693>
|
||||
latest - 最新版本(用于测试环境)
|
||||
latest - <EFBFBD><EFBFBD><EFBFBD>啁<EFBFBD><EFBFBD>穿<EFBFBD><EFBFBD>其<EFBFBD>瘚贝<EFBFBD><EFBFBD>臬<EFBFBD>嚗?
|
||||
v1.0.1 - Bug靽桀<E99DBD><E6A180><EFBFBD>𧋦
|
||||
v1.1.0 - <20>蠘<EFBFBD><E8A098>湔鰵<E6B994><E9B0B5>𧋦
|
||||
```
|
||||
@@ -365,7 +365,7 @@ v1.1.0 - 功能更新版本
|
||||
# <20>煺漣<E785BA>臬<EFBFBD><E887AC>函蔡嚗<E894A1>綫<EFBFBD><E7B6AB>鸌摰𡁶<E691B0><F0A181B6>穿<EFBFBD>
|
||||
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.0
|
||||
|
||||
# 测试环境部署(同时推送latest)
|
||||
# 瘚贝<EFBFBD><EFBFBD>臬<EFBFBD><EFBFBD>函蔡嚗<EFBFBD><EFBFBD><EFBFBD>嗆綫<EFBFBD><EFBFBD>atest嚗?
|
||||
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.0
|
||||
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:latest
|
||||
```
|
||||
@@ -374,11 +374,11 @@ docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinica
|
||||
|
||||
**1. <20>拍鍂Docker蝻枏<E89DBB>**
|
||||
```dockerfile
|
||||
# ✅ 先复制package.json,利用依赖缓存
|
||||
# <EFBFBD>?<3F><><EFBFBD><EFBFBD>酥ackage.json嚗<EFBFBD>⏚<EFBFBD>其<EFBFBD>韏𣇉<EFBFBD>摮?
|
||||
COPY package*.json ./
|
||||
RUN npm ci --production
|
||||
|
||||
# ✅ 最后复制代码,代码变化不影响依赖层缓存
|
||||
# <EFBFBD>?<3F><><EFBFBD>𤾸<EFBFBD><F0A4BEB8>嗡誨<E597A1><E8AAA8><EFBFBD>隞<EFBFBD><E99A9E><EFBFBD>睃<EFBFBD>銝滚蔣<E6BB9A>滢<EFBFBD>韏硋<E99F8F>蝻枏<E89DBB>
|
||||
COPY dist ./dist
|
||||
```
|
||||
|
||||
@@ -394,9 +394,9 @@ tests
|
||||
.git
|
||||
```
|
||||
|
||||
**3. 多阶段构建**
|
||||
**3. 憭𡁻𧫴畾菜<EFBFBD>撱?*
|
||||
```dockerfile
|
||||
# 阶段1:依赖安装
|
||||
# <EFBFBD>嗆挾1嚗帋<EFBFBD>韏硋<EFBFBD>鋆?
|
||||
FROM node:alpine AS builder
|
||||
...
|
||||
|
||||
@@ -408,8 +408,8 @@ COPY --from=builder ...
|
||||
### 6.4 摰匧<E691B0>撱箄悅
|
||||
|
||||
1. **銝滩<E98A9D><E6BBA9>券<EFBFBD><E588B8>譍葉<E8AD8D><E89189>鉄<EFBFBD>𤩺<EFBFBD>靽⊥<E99DBD>**
|
||||
- ❌ 不要把`.env`文件复制到镜像
|
||||
- ✅ 使用SAE环境变量注入配置
|
||||
- <EFBFBD>?銝滩<E98A9D><E6BBA9>𢲩.env`<60><>辣憭滚<E686AD><E6BB9A>圈<EFBFBD><E59C88>?
|
||||
- <EFBFBD>?雿輻鍂SAE<41>臬<EFBFBD><E887AC>㗛<EFBFBD>瘜典<E7989C><E585B8>滨蔭
|
||||
|
||||
2. **雿輻鍂<E8BCBB>𡇙oot<6F>冽<EFBFBD>餈鞱<E9A488>**
|
||||
```dockerfile
|
||||
@@ -431,10 +431,10 @@ COPY --from=builder ...
|
||||
# ==================== <20>嗆挾 1: 靘肽<E99D98>摰㕑<E691B0><E39591>嗆挾 ====================
|
||||
FROM node:alpine AS builder
|
||||
|
||||
# 替换Alpine镜像源为阿里云镜像(解决网络问题)
|
||||
# <EFBFBD>踵揢Alpine<EFBFBD>𨅯<EFBFBD>皞𣂷蛹<EFBFBD>輸<EFBFBD>鈭煾<EFBFBD><EFBFBD>𧶏<EFBFBD>閫<EFBFBD><EFBFBD>蝵𤑳<EFBFBD><EFBFBD>桅<EFBFBD>嚗?
|
||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||
|
||||
# 安装 Prisma 运行时依赖
|
||||
# 摰㕑<EFBFBD> Prisma 餈鞱<EFBFBD><EFBFBD>嗡<EFBFBD>韏?
|
||||
RUN apk add --no-cache openssl
|
||||
|
||||
WORKDIR /app
|
||||
@@ -442,7 +442,7 @@ WORKDIR /app
|
||||
# 1. 憭滚<E686AD>靘肽<E99D98><E882BD><EFBFBD>辣
|
||||
COPY package*.json ./
|
||||
|
||||
# 2. 复制 Prisma Schema(用于生成Prisma Client)
|
||||
# 2. 憭滚<EFBFBD> Prisma Schema嚗<EFBFBD>鍂鈭𡒊<EFBFBD><EFBFBD>辥risma Client嚗?
|
||||
COPY prisma ./prisma/
|
||||
|
||||
# 3. <20>芸<EFBFBD>鋆<EFBFBD><E98B86>鈭找<E988AD>韏吔<E99F8F>憭批<E686AD><E689B9>誩<EFBFBD>蝵𤑳<E89DB5>隡㰘<E99AA1><E3B098><EFBFBD><EFBFBD>鋆<EFBFBD>𧒄<EFBFBD>湛<EFBFBD>
|
||||
@@ -455,16 +455,16 @@ RUN npm config set registry https://registry.npmmirror.com && \
|
||||
# 4. <20><><EFBFBD> Prisma Client嚗<74><E59A97>鈭抒㴓憓<E3B493><E68693>閬<EFBFBD><E996AC>
|
||||
RUN npx prisma generate
|
||||
|
||||
# 5. 复制本地已编译好的 dist 文件夹(跳过TypeScript编译)
|
||||
# 5. 憭滚<EFBFBD><EFBFBD>砍𧑐撌脩<EFBFBD>霂穃末<EFBFBD>?dist <20><>辣憭對<E686AD>頝唾<E9A09D>TypeScript蝻𤥁<EFBFBD>嚗?
|
||||
COPY dist ./dist
|
||||
|
||||
# ==================== <20>嗆挾 2: 餈鞱<E9A488><E99EB1>嗆挾 ====================
|
||||
FROM node:alpine
|
||||
|
||||
# 替换Alpine镜像源为阿里云镜像(解决网络问题)
|
||||
# <EFBFBD>踵揢Alpine<EFBFBD>𨅯<EFBFBD>皞𣂷蛹<EFBFBD>輸<EFBFBD>鈭煾<EFBFBD><EFBFBD>𧶏<EFBFBD>閫<EFBFBD><EFBFBD>蝵𤑳<EFBFBD><EFBFBD>桅<EFBFBD>嚗?
|
||||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||
|
||||
# 安装运行时依赖 + 时区数据
|
||||
# 摰㕑<EFBFBD>餈鞱<EFBFBD><EFBFBD>嗡<EFBFBD>韏?+ <20>嗅躹<E59785>唳旿
|
||||
RUN apk add --no-cache \
|
||||
openssl \
|
||||
curl \
|
||||
@@ -474,13 +474,13 @@ RUN apk add --no-cache \
|
||||
# <20>𩤃<EFBFBD> 蝏煺<E89D8F><E785BA>嗅躹嚗鋫sia/Shanghai
|
||||
ENV TZ=Asia/Shanghai
|
||||
|
||||
# 创建非 root 用户(安全最佳实践)
|
||||
# <EFBFBD>𥕦遣<EFBFBD>?root <20>冽<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>冽<EFBFBD>雿喳<E99BBF>頝蛛<E9A09D>
|
||||
RUN addgroup -g 1001 -S nodejs && \
|
||||
adduser -S nodejs -u 1001
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 从构建阶段复制产物
|
||||
# 隞擧<EFBFBD>撱粹𧫴畾萄<EFBFBD><EFBFBD>嗡漣<EFBFBD>?
|
||||
COPY --from=builder --chown=nodejs:nodejs /app/node_modules ./node_modules
|
||||
COPY --from=builder --chown=nodejs:nodejs /app/dist ./dist
|
||||
COPY --from=builder --chown=nodejs:nodejs /app/package*.json ./
|
||||
@@ -492,7 +492,7 @@ RUN mkdir -p /app/uploads && chown -R nodejs:nodejs /app/uploads
|
||||
# <20><>揢<EFBFBD>圈<EFBFBD> root <20>冽<EFBFBD>
|
||||
USER nodejs
|
||||
|
||||
# 健康检查
|
||||
# <EFBFBD>亙熒璉<EFBFBD><EFBFBD>?
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
|
||||
CMD node -e "require('http').get('http://localhost:3001/health', (res) => { process.exit(res.statusCode === 200 ? 0 : 1); })"
|
||||
|
||||
@@ -505,7 +505,7 @@ CMD ["node", "dist/index.js"]
|
||||
|
||||
---
|
||||
|
||||
## 附录B:.dockerignore完整内容
|
||||
## <EFBFBD><EFBFBD><EFBFBD>B嚗?dockerignore摰峕㟲<EFBFBD><EFBFBD>捆
|
||||
|
||||
```
|
||||
# Node.js
|
||||
@@ -513,12 +513,12 @@ node_modules
|
||||
npm-debug.log
|
||||
yarn-error.log
|
||||
|
||||
# 开发文件
|
||||
# 撘<EFBFBD><EFBFBD>烐<EFBFBD>隞?
|
||||
.env
|
||||
.env.*
|
||||
*.local
|
||||
|
||||
# 构建产物(改进方案B:使用本地编译好的dist)
|
||||
# <EFBFBD><EFBFBD>遣鈭抒<EFBFBD>嚗<EFBFBD>㺿餈𥟇䲮獢㇂嚗帋蝙<EFBFBD>冽𧋦<EFBFBD>啁<EFBFBD>霂穃末<EFBFBD><EFBFBD>ist嚗?
|
||||
# dist # <20><>𧒄瘜券<E7989C><E588B8>㚁<EFBFBD><E39A81><EFBFBD>捂憭滚<E686AD><E6BB9A>砍𧑐dist
|
||||
|
||||
# 瘚贝<E7989A><E8B49D><EFBFBD>辣
|
||||
@@ -528,7 +528,7 @@ tests
|
||||
*.spec.ts
|
||||
coverage
|
||||
|
||||
# 文档和临时文件
|
||||
# <EFBFBD><EFBFBD>﹝<EFBFBD>䔶葩<EFBFBD>嗆<EFBFBD>隞?
|
||||
docs
|
||||
*.md
|
||||
.vscode
|
||||
@@ -536,7 +536,7 @@ docs
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# 上传文件(运行时生成)
|
||||
# 銝𠹺<EFBFBD><EFBFBD><EFBFBD>辣嚗<EFBFBD><EFBFBD>銵峕𧒄<EFBFBD><EFBFBD><EFBFBD>嚗?
|
||||
uploads/*
|
||||
|
||||
# Git
|
||||
@@ -554,7 +554,7 @@ tmp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# 数据库文件(SQLite,如果有)
|
||||
# <EFBFBD>唳旿摨𤘪<EFBFBD>隞塚<EFBFBD>SQLite嚗<EFBFBD><EFBFBD><EFBFBD>𨀣<EFBFBD>嚗?
|
||||
*.db
|
||||
*.sqlite
|
||||
|
||||
@@ -566,17 +566,17 @@ scripts/*.ts
|
||||
|
||||
---
|
||||
|
||||
## 附录C:相关文档
|
||||
## <EFBFBD><EFBFBD><EFBFBD>C嚗𡁶㮾<EFBFBD>單<EFBFBD>獢?
|
||||
|
||||
- [Node.js<6A>𡒊垢-SAE摰孵膥<E5ADB5>函蔡<E587BD><E894A1><EFBFBD>](./05-Node.js<6A>𡒊垢-SAE摰孵膥<E5ADB5>函蔡<E587BD><E894A1><EFBFBD>.md)
|
||||
- [<EFBFBD>函蔡餈𥕦漲<EFBFBD>餉<EFBFBD>](./00-<2D>函蔡餈𥕦漲<F0A595A6>餉<EFBFBD>.md)
|
||||
- [PostgreSQL数据库部署操作手册](./08-PostgreSQL数据库部署操作手册.md)
|
||||
- [Python微服务-SAE部署操作手册](./09-Python微服务-SAE部署操作手册.md)
|
||||
- [PostgreSQL<EFBFBD>唳旿摨㯄<EFBFBD>蝵脫<EFBFBD>雿𨀣<EFBFBD><EFBFBD>䀉(./08-PostgreSQL<EFBFBD>唳旿摨㯄<EFBFBD>蝵脫<EFBFBD>雿𨀣<EFBFBD><EFBFBD>?md)
|
||||
- [Python敺格<EFBFBD><EFBFBD>?SAE<41>函蔡<E587BD>滢<EFBFBD><E6BBA2>见<EFBFBD>](./09-Python敺格<E695BA><E6A0BC>?SAE<41>函蔡<E587BD>滢<EFBFBD><E6BBA2>见<EFBFBD>.md)
|
||||
|
||||
---
|
||||
|
||||
**文档维护者**: AI Assistant
|
||||
**最后更新**: 2024-12-24
|
||||
**<EFBFBD><EFBFBD>﹝蝏湔擪<EFBFBD>?*: AI Assistant
|
||||
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>?*: 2024-12-24
|
||||
**<EFBFBD><EFBFBD>𧋦**: v1.0
|
||||
|
||||
|
||||
@@ -606,5 +606,6 @@ scripts/*.ts
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user