Files
AIclinicalresearch/docs/05-部署文档/13-Node.js后端-镜像修复记录.md
HaHafeng 1b53ab9d52 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%)
2026-01-14 19:15:01 +08:00

238 lines
5.0 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 å<>Žç«¯ - 镜åƒ<C3A5>ä¿®å¤<C3A5>记录
> **ä¿®å¤<C3A5>æ—¶é—´**ï¼?025-12-24
> **问题原因**:Docker镜åƒ<C3A5>中缺å°configç®å½•
> **解决方案**:é‡<C3A9>æ°æž„建镜åƒ<C3A5>v1.1
---
## ðŸ<C3B0> 问题æ<CB9C><C3A6>è¿°
### 错误信æ<C2A1>¯
```
Error: ENOENT: no such file or directory, open '/app/config/agents.yaml'
```
### 根本原因
- 应用å<C2A8>¯åŠ¨æ—¶éœ€è¦<C3A8>读å<C2BB>?`/app/config/agents.yaml` é…<C3A9>ç½®æ‡ä»¶
- Dockerfile v1.0 中å<C2AD>ªå¤<C3A5>制äº?`dist` å’?`prisma` 目录
- **é<>—æ¼<C3A6>äº?`config` 目录**
---
## �解决方案
### 1. 修改Dockerfile
**修改ä½<C3A4>ç½®1**:构建阶段(ç¬?2行)
```dockerfile
# 5. å¤<C3A5>制本地已ç¼è¯å¥½çš?dist æ‡ä»¶å¤¹ï¼ˆè·³è¿‡TypeScriptç¼è¯ï¼?
COPY dist ./dist
# 6. å¤<C3A5>制é…<C3A9>ç½®æ‡ä»¶ï¼ˆagents.yaml等)âœ?新增
COPY config ./config
```
**修改ä½<C3A4>ç½®2**:è¿<C3A8>行阶段(ç¬?1行)
```dockerfile
# 从构建阶段å¤<C3A5>制产ç‰?
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 ./
COPY --from=builder --chown=nodejs:nodejs /app/prisma ./prisma
COPY --from=builder --chown=nodejs:nodejs /app/config ./config �新增
```
### 2. é‡<C3A9>æ°æž„建镜åƒ<C3A5>
**构建命令**�
```bash
docker build -t crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.1 .
```
**构建结果**�
- âœ?构建æˆ<C3A6>功
- �耗时�9.4�
- âœ?镜åƒ<C3A5>大å°<C3A5>:~186MB(åŽç¼©å<C2A9>Žï¼?
### 3. 推é€<C3A9>到ACR
**推é€<C3A9>å½ä»?*ï¼?
```bash
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.1
```
**推é€<C3A9>结æž?*ï¼?
- âœ?推é€<C3A9>æˆ<C3A6>åŠ?
- �Digest: `sha256:f309cec92d2ebb7fd40c38916980d7fcc2d589e61d10a8875f2976c267eac890`
---
## 📦 æ°ç‰ˆæœ¬é•œåƒ<C3A5>ä¿¡æ<C2A1>?
### 版本对比
| 项目 | v1.0(旧版本�| v1.1(新版本�|
|------|--------------|--------------|
| **Dockerfile修改** | â<>?缺å°config | âœ?包å<E280A6>«config |
| **镜åƒ<C3A5>大å°<C3A5>** | 838MB | 838MB(基本一致) |
| **构建时间** | ~5åˆ†éŸ | ~1分éŸï¼ˆç¼“存优åŒï¼‰ |
| **状æ€?* | â<><>¯åŠ¨å¤±è´¥ | âœ?待验è¯?|
### æ°ç‰ˆæœ¬é•œåƒ<C3A5>地å<C2B0>
**å…¬ç½åœ°å<C2B0>€**(用于本地æ‰å<E280B0>)ï¼?
```
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.1
```
**VPC地å<C2B0>€**(SAE部署使用):
```
crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.1
```
---
## 🎯 ä¸ä¸€æ­¥æ“<C3A6>ä½?
### 步骤1:登录SAE控制å<C2B6>?
访问:https://sae.console.aliyun.com/
### 步骤2ï¼šæ´æ°åº”用镜åƒ<C3A5>版æœ?
1. 找到应用:`nodejs-backend-test`
2. ç¹å‡»ã€<C3A3>é…<C3A9>置管ç<C2A1>†ã€â†ã€<C3A3>部署é…<C3A9>ç½®ã€?
3. 找到"镜åƒ<C3A5>设置"部分
4. 修改镜åƒ<C3A5>版本ï¼?
- 从:`backend-service:v1.0`
- 改为:`backend-service:v1.1` �
### 步骤3:ä¿<C3A4>存并é‡<C3A9>æ°éƒ¨ç½²
1. ç¹å‡»ã€<C3A3>ä¿<C3A4>å­˜ã€?
2. ç¹å‡»ã€<C3A3>é‡<C3A9>æ°éƒ¨ç½²ã€?
3. 等待3-5分éŸ
4. 查看实时日志
---
## �预期结果
### æˆ<C3A6>功的日志输å‡?
```
============================================================
🚀 AI临床研究平å<C2B3>° - å<>Žç«¯æœ<C3A6>务器å<C2A8>¯åЍæˆ<C3A6>功ï¼<C3AF>
============================================================
ðŸ“<EFBFBD> æœ<C3A6>务地å<C2B0>€: http://0.0.0.0:3001
ðŸ”<EFBFBD> å<>¥åº·æ£€æŸ? http://0.0.0.0:3001/health
📡 APIå…¥å<C2A5>£: http://0.0.0.0:3001/api/v1
ðŸŒ<EFBFBD> è¿<C3A8>行环境: production
============================================================
[INFO] Server listening at http://0.0.0.0:3001
[INFO] Config loaded: /app/config/agents.yaml �
[INFO] Database connected successfully
[INFO] Health check endpoint available
```
### 关键验è¯<C3A8>ç?
- [x] 应用状æ€<C3A6>:è¿<C3A8>行中(绿色ï¼?
- [x] å<>¥åº·æ£€æŸ¥ï¼šé€šè¿‡ï¼ˆç»¿è‰²ï¼‰
- [x] 日志中出现:`Config loaded: /app/config/agents.yaml` �
- [x] 无ENOENT错误
---
## ðŸ“<C5B8> ä¿®å¤<C3A5>总结
**问题根æº<C3A6>**:Dockerfileä¸<C3A4>完整,é<C592>—æ¼<C3A6>é…<C3A9>ç½®æ‡ä»¶
**ä¿®å¤<C3A5>æ¹å¼<C3A5>**:添åŠ?行COPY指令
**å½±å“<C3A5>范å´**:仅需é‡<C3A9>æ°æž„建åŒéƒ¨ç½²ï¼Œæ— éœ€ä¿®æ”¹ä»£ç <C3A7>
**ä¿®å¤<C3A5>æ—¶é—´**:约5分éŸï¼ˆæž„å»?分钟 + 推é€?分钟 + 部署3分éŸï¼?
---
## ðŸ”<C5B8> 预防措施
### 1. Dockerfile检查清å<E280A6>?
åˆå»ºå®Œæ•´çš„æ‡ä»¶å¤<EFBFBD>制清å<EFBFBD>•:
```dockerfile
�COPY package*.json ./
�COPY prisma ./prisma/
�COPY dist ./dist/
âœ?COPY config ./config/ # ä¸<C3A4>è¦<C3A8>é<EFBFBD>—æ¼<C3A6>ï¼?
â<EFBFBD>?COPY public ./public/ # 妿žœæœ‰é<E280B0>™æ€<C3A6>æ‡ä»?
â<EFBFBD>?COPY scripts ./scripts/ # 妿žœæœ‰å<E280B0>¯åŠ¨è„šæœ?
```
### 2. 本地æµè¯•æµ<C3A6>ç¨
在推é€<EFBFBD>镜åƒ<EFBFBD>å‰<EFBFBD>,先在本地æµè¯•:
```bash
# 1. 构建镜åƒ<C3A5>
docker build -t backend-test:local .
# 2. 本地è¿<C3A8>行æµè¯•
docker run -p 3001:3001 \
-e DATABASE_URL="..." \
-e JWT_SECRET="..." \
backend-test:local
# 3. 访问å<C2AE>¥åº·æ£€æŸ?
curl http://localhost:3001/health
# 4. 确认无错误å<C2AF>Žå†<C3A5>推é€?
```
### 3. CI/CD醿ˆ<C3A6>
建议在GitHub Actions中添加:
```yaml
- name: Build Docker Image
run: docker build -t backend:${{ github.sha }} .
- name: Test Docker Image
run: |
docker run -d -p 3001:3001 backend:${{ github.sha }}
sleep 10
curl http://localhost:3001/health
```
---
**文档创建时间**�025-12-24
**维护人员**:è¿<C3A8>ç»´å¢é˜?