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%)
5.0 KiB
Node.js å<>Žç«¯ - 镜åƒ<C3A5>ä¿®å¤<C3A5>记录
**ä¿®å¤<C3A5>æ—¶é—´**ï¼?025-12-24 **é—®é¢˜åŽŸå› **:Docker镜åƒ<C3A5>ä¸ç¼ºå°‘config目录 解决方案:é‡<EFBFBD>新构建镜åƒ<EFBFBD>v1.1
ðŸ<EFBFBD>› 问题æ<CB9C><C3A6>è¿°
错误信æ<EFBFBD>¯
Error: ENOENT: no such file or directory, open '/app/config/agents.yaml'
æ ¹æœ¬åŽŸå›
- 应用å<EFBFBD>¯åŠ¨æ—¶éœ€è¦<EFBFBD>读å<EFBFBD>?
/app/config/agents.yamlé…<C3A9>置文件 - Dockerfile v1.0 ä¸å<C2AD>ªå¤<C3A5>制äº?
distå’?prisma目录 - é<EFBFBD>—æ¼<EFBFBD>äº?
config目录
�解决方案
1. 修改Dockerfile
修改ä½<EFBFBD>ç½®1:构建阶段(ç¬?2行)
# 5. å¤<C3A5>制本地已编译好çš?dist 文件夹(跳过TypeScript编译ï¼?
COPY dist ./dist
# 6. å¤<C3A5>制é…<C3A9>置文件(agents.yamlç‰ï¼‰âœ?新增
COPY config ./config
修改ä½<EFBFBD>ç½®2:è¿<EFBFBD>行阶段(ç¬?1行)
# 从构建阶段å¤<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>
**构建命令**�
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>命ä»?*ï¼?
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修改 | â<EFBFBD>?缺少config | âœ?包å<E280A6>«config |
| 镜åƒ<EFBFBD>大å°<EFBFBD> | 838MB | 838MB(基本一致) |
| 构建时间 | ~5分钟 | ~1分钟(缓å˜ä¼˜åŒ–) |
| *状æ€? | â<EFBFBD>?å<>¯åŠ¨å¤±è´¥ | âœ?待验è¯? |
新版本镜åƒ<EFBFBD>地å<EFBFBD>€
**公网地å<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控制å<EFBFBD>?
访问:https://sae.console.aliyun.com/
æ¥éª¤2:更新应用镜åƒ<EFBFBD>版æœ?
- 找到应用:
nodejs-backend-test - 点击ã€<EFBFBD>é…<EFBFBD>置管ç<EFBFBD>†ã€‘→ã€<EFBFBD>部署é…<EFBFBD>ç½®ã€?
- 找到"镜åƒ<C3A5>设置"部分
- 修改镜åƒ<EFBFBD>版本ï¼?
- 从:
backend-service:v1.0 - 改为:
backend-service:v1.1�
- 从:
æ¥éª¤3:ä¿<EFBFBD>å˜å¹¶é‡<EFBFBD>新部署
- 点击ã€<EFBFBD>ä¿<EFBFBD>å˜ã€?
- 点击ã€<EFBFBD>é‡<EFBFBD>新部署ã€?
- ç‰å¾…3-5分钟
- 查看实时日志
�预期结果
æˆ<EFBFBD>功的日志输å‡?
============================================================
🚀 AIä¸´åºŠç ”ç©¶å¹³å<C2B3>° - å<>Žç«¯æœ<C3A6>务器å<C2A8>¯åЍæˆ<C3A6>功ï¼<C3AF>
============================================================
ðŸ“<C5B8> æœ<C3A6>务地å<C2B0>€: http://0.0.0.0:3001
ðŸ”<C5B8> å<>¥åº·æ£€æŸ? http://0.0.0.0:3001/health
📡 APIå…¥å<C2A5>£: http://0.0.0.0:3001/api/v1
ðŸŒ<C5B8> è¿<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
关键验è¯<EFBFBD>ç‚?
- 应用状æ€<EFBFBD>:è¿<EFBFBD>行ä¸ï¼ˆç»¿è‰²ï¼?
- å<EFBFBD>¥åº·æ£€æŸ¥ï¼šé€šè¿‡ï¼ˆç»¿è‰²ï¼‰
- 日志ä¸å‡ºçŽ°ï¼š
Config loaded: /app/config/agents.yamlâœ? - æ— ENOENT错误
ðŸ“<EFBFBD> ä¿®å¤<C3A5>总结
**é—®é¢˜æ ¹æº<C3A6>**:Dockerfileä¸<C3A4>完整,é<C592>—æ¼<C3A6>é…<C3A9>置文件 **ä¿®å¤<C3A5>æ–¹å¼<C3A5>**:添åŠ?行COPY指令 **å½±å“<C3A5>范围**:仅需é‡<C3A9>æ–°æž„å»ºå’Œéƒ¨ç½²ï¼Œæ— éœ€ä¿®æ”¹ä»£ç <C3A7> **ä¿®å¤<C3A5>æ—¶é—´**:约5分钟(构å»?分钟 + 推é€?分钟 + 部署3分钟ï¼?
ðŸ”<EFBFBD> 预防措施
1. Dockerfile检查清å<E280A6>?
创建完整的文件å¤<EFBFBD>制清å<EFBFBD>•:
�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>,先在本地测试:
# 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䏿·»åŠ ï¼š
- 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>维团é˜?