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%)
612 lines
13 KiB
Markdown
612 lines
13 KiB
Markdown
# Node.js <20>𡒊垢 - Docker <20>𨅯<EFBFBD><F0A885AF><EFBFBD>遣<EFBFBD>滢<EFBFBD><E6BBA2>见<EFBFBD>
|
||
|
||
**<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>
|
||
|
||
---
|
||
|
||
## <20><> <20>桀<EFBFBD>
|
||
|
||
1. [<EFBFBD><EFBFBD>遣璁<EFBFBD>膩](#<23><>遣璁<E981A3>膩)
|
||
2. [<EFBFBD>滨蔭<EFBFBD><EFBFBD><EFBFBD>](#<23>滨蔭<E6BBA8><E894AD><EFBFBD>)
|
||
3. [<EFBFBD><EFBFBD>遣瘚<EFBFBD><EFBFBD>](#<23><>遣瘚<E981A3><E7989A>)
|
||
4. [<EFBFBD>𨅯<EFBFBD>靽⊥<EFBFBD>](#<23>𨅯<EFBFBD>靽⊥<E99DBD>)
|
||
5. [<EFBFBD><EFBFBD><EFBFBD><EFBFBD>埝䰻](#<23><><EFBFBD><EFBFBD>埝䰻)
|
||
6. [<5B><>雿喳<E99BBF>頝琶(#<23><>雿喳<E99BBF>頝?
|
||
|
||
---
|
||
|
||
## 1. <20><>遣璁<E981A3>膩
|
||
|
||
### 1.1 <20><>遣蝑𣇉裦
|
||
|
||
<EFBFBD>祆活<EFBFBD><EFBFBD>遣<EFBFBD><EFBFBD>鍂**<2A>寡<EFBFBD><E5AFA1><EFBFBD>䲮獢㇂嚗<E38782>𧋦<EFBFBD>啁<EFBFBD>霂?Docker<65>枏<EFBFBD>嚗?*嚗𣬚㮾瘥𥪯<E798A5>蝏<EFBFBD>䲮獢<E4B2AE><E78DA2>隞乩<E99A9E>隡睃飵嚗?
|
||
|
||
| 撖寞<E69296>憿?| 隡删<E99AA1><E588A0>寞<EFBFBD> | <20>寡<EFBFBD><E5AFA1><EFBFBD>䲮獢㇂ |
|
||
|--------|----------|-------------|
|
||
| **TypeScript蝻𤥁<E89DBB>** | Docker銝剜<E98A9D>銵?| <20>砍𧑐憸<F0A79190><E686B8>霂?<3F>?|
|
||
| **靘肽<E99D98>摰㕑<E691B0>** | 摰峕㟲靘肽<E99D98> | 隞<><E99A9E>鈭找<E988AD>韏?<3F>?|
|
||
| **蝵𤑳<E89DB5>靘肽<E99D98>** | 擃矋<E69383><E79F8B>栞<EFBFBD><E6A09E>塚<EFBFBD> | 雿𠬍<E99BBF><F0A0AC8D>渡迅摰𡄯<E691B0> <20>?|
|
||
| **<EFBFBD><EFBFBD>遣<EFBFBD>園𡢿** | ~10<31><30><EFBFBD> | ~5<><35><EFBFBD> <20>?|
|
||
| **撟喳蝱<E596B3>澆捆<E6BE86>?* | <20>厰<EFBFBD><E58EB0>?| <20>𣳇<EFBFBD><F0A3B387>?<3F>?|
|
||
|
||
### 1.2 <20><>遣<EFBFBD>鞉<EFBFBD>
|
||
|
||
```
|
||
<EFBFBD>𨅯<EFBFBD><EFBFBD>滨妍: backend-service:v1.0
|
||
<EFBFBD>𨅯<EFBFBD>憭批<EFBFBD>: 838MB (<28>讠憬<E8AEA0>?~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
|
||
```
|
||
|
||
---
|
||
|
||
## 2. <20>滨蔭<E6BBA8><E894AD><EFBFBD>
|
||
|
||
### 2.1 <20>臬<EFBFBD>璉<EFBFBD><E79289>?
|
||
|
||
```powershell
|
||
# 1. 璉<><E79289>主ocker<65>嗆<EFBFBD>?
|
||
docker --version
|
||
docker ps
|
||
|
||
# 2. 璉<><E79289>代ode.js<6A>臬<EFBFBD>
|
||
node --version # 摨磰砲<E7A3B0>曄內 v22.x
|
||
npm --version
|
||
|
||
# 3. 蝖株恕敶枏<E695B6><E69E8F>桀<EFBFBD>
|
||
cd D:\MyCursor\AIclinicalresearch\backend
|
||
```
|
||
|
||
### 2.2 隞<><E99A9E><EFBFBD><EFBFBD><EFBFBD>
|
||
|
||
#### <20>?敹<>◆摰峕<E691B0><E5B395><EFBFBD>郊撉?
|
||
|
||
**甇仿炊1嚗䥪risma<6D>滚<EFBFBD><E6BB9A>峕郊嚗<E9838A><E59A97>憿鳴<E686BF>**
|
||
|
||
```powershell
|
||
# 霈曄蔭銝湔𧒄RDS餈墧𦻖<E5A2A7>臬<EFBFBD><E887AC>㗛<EFBFBD>
|
||
$env:DATABASE_URL = "postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5oo.pg.rds.aliyuncs.com:5432/ai_clinical_research?connection_limit=18&pool_timeout=10"
|
||
|
||
# <20>扯<EFBFBD>Prisma<6D>滚<EFBFBD><E6BB9A>峕郊
|
||
npx prisma db pull
|
||
|
||
# 颲枏枂摨磰砲<E7A3B0>曄內嚗?
|
||
# <20>?Introspected 32 models and wrote them into prisma\schema.prisma
|
||
```
|
||
|
||
**甇仿炊2嚗𡁶<E59A97><F0A181B6>辥risma Client**
|
||
|
||
```powershell
|
||
npx prisma generate
|
||
|
||
# 颲枏枂摨磰砲<E7A3B0>曄內嚗?
|
||
# <20>?Generated Prisma Client (v6.17.0)
|
||
```
|
||
|
||
**甇仿炊3嚗関ypeScript蝻𤥁<E89DBB>嚗<EFBFBD><E59A97>憿鳴<E686BF>**
|
||
|
||
```powershell
|
||
# 蝻𤥁<E89DBB>TypeScript隞<74><E99A9E>
|
||
npm run build
|
||
|
||
# <20>𣂼<EFBFBD>颲枏枂嚗?
|
||
# > ai-clinical-backend@1.0.0 build
|
||
# > tsc
|
||
# (<28>𣳇<EFBFBD>霂臭縑<E887AD>?
|
||
|
||
# 璉<><E79289>卡ist<73>桀<EFBFBD><E6A180>臬炏<E887AC><E7828F><EFBFBD>
|
||
ls dist
|
||
```
|
||
|
||
<EFBFBD>𩤃<EFBFBD> **<EFBFBD>滩<EFBFBD><EFBFBD>鞟內**嚗𡁜<E59A97><F0A1819C>𦦵<EFBFBD>霂穃仃韐伐<E99F90>敹<EFBFBD>◆<EFBFBD><E29786>耨憭齿<E686AD><E9BDBF>凤ypeScript<70>躰秤嚗?
|
||
|
||
---
|
||
|
||
## 3. <20><>遣瘚<E981A3><E7989A>
|
||
|
||
### 3.1 摰峕㟲<E5B395><E39FB2>遣甇仿炊
|
||
|
||
```powershell
|
||
# 1. 蝖桐<E89D96><E6A190>灸ackend<6E>桀<EFBFBD>
|
||
cd D:\MyCursor\AIclinicalresearch\backend
|
||
|
||
# 2. 璉<><E79289>主ockerfile<6C>?dockerignore
|
||
ls Dockerfile
|
||
ls .dockerignore
|
||
|
||
# 3. 撘<>憪𧢲<E686AA>撱綽<E692B1><E7B6BD><EFBFBD>閬?<3F><><EFBFBD>嚗?
|
||
docker build -t backend-service:v1.0 .
|
||
|
||
# 4. <20>亦<EFBFBD><E4BAA6><EFBFBD>遣蝏𤘪<E89D8F>
|
||
docker images backend-service:v1.0
|
||
```
|
||
|
||
### 3.2 <20><>遣餈<E981A3><E9A488>霂湔<E99C82>
|
||
|
||
**<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 # 隞<><E99A9E>鋆<EFBFBD><E98B86>鈭找<E988AD>韏?
|
||
RUN npx prisma generate # <20><><EFBFBD>Prisma Client
|
||
```
|
||
|
||
**<EFBFBD>嗆挾2嚗𡁜<EFBFBD><EFBFBD>嗆𧋦<EFBFBD>啁<EFBFBD>霂𤑳<EFBFBD><EFBFBD>頣<EFBFBD>蝥?0蝘𡜐<E89D98>**
|
||
```dockerfile
|
||
COPY dist ./dist # 憭滚<E686AD><E6BB9A>砍𧑐撌脩<E6928C>霂𤑳<E99C82>TypeScript隞<74><E99A9E>
|
||
```
|
||
|
||
**<EFBFBD>嗆挾3嚗朞<EFBFBD>銵屸<EFBFBD><EFBFBD>𤩺<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝥?<3F><><EFBFBD>嚗?*
|
||
```dockerfile
|
||
FROM node:alpine
|
||
COPY --from=builder /app/node_modules ./node_modules
|
||
COPY --from=builder /app/dist ./dist
|
||
COPY --from=builder /app/prisma ./prisma
|
||
```
|
||
|
||
### 3.3 <20>券<EFBFBD><E588B8><EFBFBD>ACR
|
||
|
||
```powershell
|
||
# 1. <20>餃<EFBFBD>ACR嚗<52>蝙<EFBFBD>其葵鈭箇<E988AD>摰硺<E691B0><E7A1BA>啣<EFBFBD>嚗?
|
||
echo "fengzhibo117" | docker login --username=gofeng117@163.com --password-stdin crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com
|
||
|
||
# 颲枏枂嚗匁ogin Succeeded
|
||
|
||
# 2. <20>𤘪<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. <20>券<EFBFBD><E588B8><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
|
||
```
|
||
|
||
---
|
||
|
||
## 4. <20>𨅯<EFBFBD>靽⊥<E99DBD>
|
||
|
||
### 4.1 <20>𨅯<EFBFBD><F0A885AF>啣<EFBFBD>
|
||
|
||
**VPC<50><43><EFBFBD><EFBFBD>啣<EFBFBD>嚗𠄎AE<41>函蔡雿輻鍂嚗㚁<E59A97>**
|
||
```
|
||
crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.0
|
||
```
|
||
|
||
**<EFBFBD>祉<EFBFBD><EFBFBD>啣<EFBFBD>嚗<EFBFBD>䰻<EFBFBD>见<EFBFBD><EFBFBD>匧<EFBFBD>嚗㚁<EFBFBD>**
|
||
```
|
||
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.0
|
||
```
|
||
|
||
### 4.2 <20>𨅯<EFBFBD>霂行<E99C82>
|
||
|
||
```yaml
|
||
<EFBFBD>𨅯<EFBFBD><EFBFBD>䁅<EFBFBD>: sha256:a4ffb61c15af1cd1ed9de187b4464a1aab773918e5b41b4df5b8ad96514f9941
|
||
憭批<EFBFBD>: 838MB (<28>讠憬<E8AEA0>?~186MB)
|
||
<EFBFBD>嗆<EFBFBD>: linux/amd64
|
||
<EFBFBD>箇<EFBFBD><EFBFBD>𨅯<EFBFBD>: node:alpine
|
||
Node<EFBFBD><EFBFBD>𧋦: 22.x
|
||
<EFBFBD><EFBFBD>倌: v1.0, latest
|
||
```
|
||
|
||
### 4.3 <20>𨅯<EFBFBD><F0A885AF><EFBFBD>捆
|
||
|
||
```
|
||
/app/
|
||
<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
|
||
<EFBFBD>? <20>婙<EFBFBD><E5A999><EFBFBD> schema.prisma
|
||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> package.json
|
||
<EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> uploads/ # 銝湔𧒄<E6B994><F0A79284>辣<EFBFBD>桀<EFBFBD>
|
||
```
|
||
|
||
### 4.4 <20>臬𢆡<E887AC>賭誘
|
||
|
||
```dockerfile
|
||
CMD ["node", "dist/index.js"]
|
||
```
|
||
|
||
### 4.5 <20>亙熒璉<E78692><E79289>?
|
||
|
||
```dockerfile
|
||
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); })"
|
||
```
|
||
|
||
---
|
||
|
||
## 5. <20><><EFBFBD><EFBFBD>埝䰻
|
||
|
||
### 5.1 撣貉<E692A3><E8B289>桅<EFBFBD>
|
||
|
||
#### <20>?<3F>桅<EFBFBD>1嚗関ypeScript蝻𤥁<E89DBB>憭梯揖
|
||
|
||
**<EFBFBD><EFBFBD>𠶖嚗?*
|
||
```
|
||
error TS2554: Expected 2-3 arguments, but got 1.
|
||
error TS2322: Type 'XXX' is not assignable to type 'YYY'.
|
||
```
|
||
|
||
**<EFBFBD>笔<EFBFBD>嚗?*
|
||
- Prisma<6D>滚<EFBFBD><E6BB9A>峕郊<E5B395>𡒊撩撠穃<E692A0>蝟餃<E89D9F>畾?
|
||
- 隞<><E99A9E>銝窰risma<6D><61><EFBFBD><EFBFBD><EFBFBD>掩<EFBFBD>衤<EFBFBD><E8A1A4>寥<EFBFBD>
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>嚗?*
|
||
```powershell
|
||
# 1. <20>齿鰵<E9BDBF>峕郊Prisma
|
||
npx prisma db pull
|
||
npx prisma generate
|
||
|
||
# 2. <20>齿鰵蝻𤥁<E89DBB>
|
||
npm run build
|
||
|
||
# 3. 憒<><E68692>餈䀹<E9A488><E480B9>躰秤嚗峕<E59A97><E5B395>另sconfig.json<6F>滨蔭
|
||
```
|
||
|
||
#### <20>?<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>憭梯揖
|
||
|
||
**閫<><E996AB><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>
|
||
|
||
#### <20>?<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>
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>嚗?*
|
||
```powershell
|
||
# <20>?甇<>&<EFBFBD><EFBC86>蒈敶訫𧑐<E8A8AB><F0A79190>嚗<EFBFBD>葵鈭箇<E988AD>摰硺<E691B0>嚗?
|
||
docker login crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com
|
||
|
||
# <20>?<3F>躰秤<E8BAB0><E7A7A4>蒈敶訫𧑐<E8A8AB><F0A79190>嚗<EFBFBD><E59A97>銝𡁶<E98A9D>嚗?
|
||
docker login registry.cn-beijing.aliyuncs.com
|
||
```
|
||
|
||
#### <20>?<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
|
||
```
|
||
|
||
**<EFBFBD>笔<EFBFBD>嚗?*
|
||
- VPC<50><43><EFBFBD><EFBFBD>啣<EFBFBD><E595A3>芾<EFBFBD><E88ABE>券燵<E588B8>䔶<EFBFBD>VPC<50><43>挪<EFBFBD>?
|
||
- <20>砍𧑐撘<F0A79190><E69298>𤑳㴓憓<E3B493><E68693>瘜閗挪<E99697>姬PC<50><43><EFBFBD>
|
||
|
||
**閫<><E996AB><EFBFBD>寞<EFBFBD>嚗?*
|
||
```powershell
|
||
# <20>砍𧑐撘<F0A79190><E69298>𤑳㴓憓<E3B493>蝙<EFBFBD>典<EFBFBD>蝵穃𧑐<E7A983><F0A79190><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>
|
||
```
|
||
|
||
### 5.2 撉諹<E69289><E8ABB9>𨅯<EFBFBD>
|
||
|
||
```powershell
|
||
# 1. 璉<><E79289>仿<EFBFBD><E4BBBF>𤩺糓<F0A4A9BA>血<EFBFBD><E8A180>?
|
||
docker images backend-service:v1.0
|
||
|
||
# 2. <20>亦<EFBFBD><E4BAA6>𨅯<EFBFBD>霂衣<E99C82>靽⊥<E99DBD>
|
||
docker inspect backend-service:v1.0
|
||
|
||
# 3. 瘚贝<E7989A>餈鞱<E9A488><E99EB1>𨅯<EFBFBD>嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>
|
||
docker run -d `
|
||
--name backend-test `
|
||
-p 3001:3001 `
|
||
-e DATABASE_URL="postgresql://..." `
|
||
-e NODE_ENV=production `
|
||
backend-service:v1.0
|
||
|
||
# 4. <20>亦<EFBFBD>摰孵膥<E5ADB5>亙<EFBFBD>
|
||
docker logs backend-test
|
||
|
||
# 5. 瘚贝<E7989A><E8B49D>亙熒璉<E78692><E79289>?
|
||
curl http://localhost:3001/health
|
||
|
||
# 6. 皜<><E79A9C>瘚贝<E7989A>摰孵膥
|
||
docker stop backend-test
|
||
docker rm backend-test
|
||
```
|
||
|
||
---
|
||
|
||
## 6. <20><>雿喳<E99BBF>頝?
|
||
|
||
### 6.1 <20><>遣<EFBFBD>齿<EFBFBD><E9BDBF>交<EFBFBD><E4BAA4>?
|
||
|
||
- [ ] 撌脣<E6928C><E884A3>辥risma<6D>滚<EFBFBD><E6BB9A>峕郊嚗Ǒnpx prisma db pull`嚗?
|
||
- [ ] 撌脩<E6928C><E884A9>辥risma Client嚗Ǒnpx prisma generate`嚗?
|
||
- [ ] TypeScript蝻𤥁<E89DBB><F0A4A581>𣂼<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 - <20><><EFBFBD>啁<EFBFBD><E59581>穿<EFBFBD><E7A9BF>其<EFBFBD>瘚贝<E7989A><E8B49D>臬<EFBFBD>嚗?
|
||
v1.0.1 - Bug靽桀<E99DBD><E6A180><EFBFBD>𧋦
|
||
v1.1.0 - <20>蠘<EFBFBD><E8A098>湔鰵<E6B994><E9B0B5>𧋦
|
||
```
|
||
|
||
**<EFBFBD>券<EFBFBD><EFBFBD><EFBFBD><EFBFBD>伐<EFBFBD>**
|
||
```powershell
|
||
# <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
|
||
|
||
# 瘚贝<E7989A><E8B49D>臬<EFBFBD><E887AC>函蔡嚗<E894A1><E59A97><EFBFBD>嗆綫<E59786><E7B6AB>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
|
||
```
|
||
|
||
### 6.3 <20><>遣隡睃<E99AA1>
|
||
|
||
**1. <20>拍鍂Docker蝻枏<E89DBB>**
|
||
```dockerfile
|
||
# <20>?<3F><><EFBFBD><EFBFBD>酥ackage.json嚗<6E>⏚<EFBFBD>其<EFBFBD>韏𣇉<E99F8F>摮?
|
||
COPY package*.json ./
|
||
RUN npm ci --production
|
||
|
||
# <20>?<3F><><EFBFBD>𤾸<EFBFBD><F0A4BEB8>嗡誨<E597A1><E8AAA8><EFBFBD>隞<EFBFBD><E99A9E><EFBFBD>睃<EFBFBD>銝滚蔣<E6BB9A>滢<EFBFBD>韏硋<E99F8F>蝻枏<E89DBB>
|
||
COPY dist ./dist
|
||
```
|
||
|
||
**2. 雿輻鍂.dockerignore**
|
||
```
|
||
node_modules
|
||
.env
|
||
.env.*
|
||
dist # <20>砍𧑐dist<73>朞<EFBFBD>COPY<50>曉<EFBFBD>憭滚<E686AD>
|
||
test
|
||
tests
|
||
*.md
|
||
.git
|
||
```
|
||
|
||
**3. 憭𡁻𧫴畾菜<E795BE>撱?*
|
||
```dockerfile
|
||
# <20>嗆挾1嚗帋<E59A97>韏硋<E99F8F>鋆?
|
||
FROM node:alpine AS builder
|
||
...
|
||
|
||
# <20>嗆挾2嚗朞<E59A97>銵峕𧒄<E5B395>𨅯<EFBFBD>嚗<EFBFBD>凒撠𧶏<E692A0>
|
||
FROM node:alpine
|
||
COPY --from=builder ...
|
||
```
|
||
|
||
### 6.4 摰匧<E691B0>撱箄悅
|
||
|
||
1. **銝滩<E98A9D><E6BBA9>券<EFBFBD><E588B8>譍葉<E8AD8D><E89189>鉄<EFBFBD>𤩺<EFBFBD>靽⊥<E99DBD>**
|
||
- <20>?銝滩<E98A9D><E6BBA9>𢲩.env`<60><>辣憭滚<E686AD><E6BB9A>圈<EFBFBD><E59C88>?
|
||
- <20>?雿輻鍂SAE<41>臬<EFBFBD><E887AC>㗛<EFBFBD>瘜典<E7989C><E585B8>滨蔭
|
||
|
||
2. **雿輻鍂<E8BCBB>𡇙oot<6F>冽<EFBFBD>餈鞱<E9A488>**
|
||
```dockerfile
|
||
RUN addgroup -g 1001 -S nodejs && \
|
||
adduser -S nodejs -u 1001
|
||
USER nodejs
|
||
```
|
||
|
||
3. **摰𡁏<E691B0><F0A1818F>湔鰵<E6B994>箇<EFBFBD><E7AE87>𨅯<EFBFBD>**
|
||
```dockerfile
|
||
FROM node:alpine # 雿輻鍂<E8BCBB><E98D82><EFBFBD>啁<EFBFBD>Alpine<6E><65>𧋦
|
||
```
|
||
|
||
---
|
||
|
||
## <20><><EFBFBD>A嚗鋽ockerfile摰峕㟲<E5B395><E39FB2>捆
|
||
|
||
```dockerfile
|
||
# ==================== <20>嗆挾 1: 靘肽<E99D98>摰㕑<E691B0><E39591>嗆挾 ====================
|
||
FROM node:alpine AS builder
|
||
|
||
# <20>踵揢Alpine<6E>𨅯<EFBFBD>皞𣂷蛹<F0A382B7>輸<EFBFBD>鈭煾<E988AD><E785BE>𧶏<EFBFBD>閫<EFBFBD><E996AB>蝵𤑳<E89DB5><F0A491B3>桅<EFBFBD>嚗?
|
||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||
|
||
# 摰㕑<E691B0> Prisma 餈鞱<E9A488><E99EB1>嗡<EFBFBD>韏?
|
||
RUN apk add --no-cache openssl
|
||
|
||
WORKDIR /app
|
||
|
||
# 1. 憭滚<E686AD>靘肽<E99D98><E882BD><EFBFBD>辣
|
||
COPY package*.json ./
|
||
|
||
# 2. 憭滚<E686AD> Prisma Schema嚗<61>鍂鈭𡒊<E988AD><F0A1928A>辥risma Client嚗?
|
||
COPY prisma ./prisma/
|
||
|
||
# 3. <20>芸<EFBFBD>鋆<EFBFBD><E98B86>鈭找<E988AD>韏吔<E99F8F>憭批<E686AD><E689B9>誩<EFBFBD>蝵𤑳<E89DB5>隡㰘<E99AA1><E3B098><EFBFBD><EFBFBD>鋆<EFBFBD>𧒄<EFBFBD>湛<EFBFBD>
|
||
RUN npm config set registry https://registry.npmmirror.com && \
|
||
npm config set fetch-retry-mintimeout 20000 && \
|
||
npm config set fetch-retry-maxtimeout 120000 && \
|
||
npm config set fetch-retries 5 && \
|
||
npm ci --production --prefer-offline --no-audit
|
||
|
||
# 4. <20><><EFBFBD> Prisma Client嚗<74><E59A97>鈭抒㴓憓<E3B493><E68693>閬<EFBFBD><E996AC>
|
||
RUN npx prisma generate
|
||
|
||
# 5. 憭滚<E686AD><E6BB9A>砍𧑐撌脩<E6928C>霂穃末<E7A983>?dist <20><>辣憭對<E686AD>頝唾<E9A09D>TypeScript蝻𤥁<E89DBB>嚗?
|
||
COPY dist ./dist
|
||
|
||
# ==================== <20>嗆挾 2: 餈鞱<E9A488><E99EB1>嗆挾 ====================
|
||
FROM node:alpine
|
||
|
||
# <20>踵揢Alpine<6E>𨅯<EFBFBD>皞𣂷蛹<F0A382B7>輸<EFBFBD>鈭煾<E988AD><E785BE>𧶏<EFBFBD>閫<EFBFBD><E996AB>蝵𤑳<E89DB5><F0A491B3>桅<EFBFBD>嚗?
|
||
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||
|
||
# 摰㕑<E691B0>餈鞱<E9A488><E99EB1>嗡<EFBFBD>韏?+ <20>嗅躹<E59785>唳旿
|
||
RUN apk add --no-cache \
|
||
openssl \
|
||
curl \
|
||
ca-certificates \
|
||
tzdata
|
||
|
||
# <20>𩤃<EFBFBD> 蝏煺<E89D8F><E785BA>嗅躹嚗鋫sia/Shanghai
|
||
ENV TZ=Asia/Shanghai
|
||
|
||
# <20>𥕦遣<F0A595A6>?root <20>冽<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>冽<EFBFBD>雿喳<E99BBF>頝蛛<E9A09D>
|
||
RUN addgroup -g 1001 -S nodejs && \
|
||
adduser -S nodejs -u 1001
|
||
|
||
WORKDIR /app
|
||
|
||
# 隞擧<E99A9E>撱粹𧫴畾萄<E795BE><E89084>嗡漣<E597A1>?
|
||
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
|
||
|
||
# <20>𥕦遣銝𠹺<E98A9D><F0A0B9BA>桀<EFBFBD>嚗<EFBFBD>鍂鈭𦒘葩<F0A69298>嗆<EFBFBD>隞塚<E99A9E>
|
||
RUN mkdir -p /app/uploads && chown -R nodejs:nodejs /app/uploads
|
||
|
||
# <20><>揢<EFBFBD>圈<EFBFBD> root <20>冽<EFBFBD>
|
||
USER nodejs
|
||
|
||
# <20>亙熒璉<E78692><E79289>?
|
||
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); })"
|
||
|
||
# <20>湧蠧蝡臬藁
|
||
EXPOSE 3001
|
||
|
||
# <20>𤣳 <20>臬𢆡<E887AC>賭誘嚗<E8AA98><E59A97><EFBFBD>臬𢆡摨𠉛鍂嚗䔶<E59A97><E494B6>扯<EFBFBD><E689AF>唳旿摨栞<E691A8>蝘鳴<E89D98>
|
||
CMD ["node", "dist/index.js"]
|
||
```
|
||
|
||
---
|
||
|
||
## <20><><EFBFBD>B嚗?dockerignore摰峕㟲<E5B395><E39FB2>捆
|
||
|
||
```
|
||
# Node.js
|
||
node_modules
|
||
npm-debug.log
|
||
yarn-error.log
|
||
|
||
# 撘<><E69298>烐<EFBFBD>隞?
|
||
.env
|
||
.env.*
|
||
*.local
|
||
|
||
# <20><>遣鈭抒<E988AD>嚗<EFBFBD>㺿餈𥟇䲮獢㇂嚗帋蝙<E5B88B>冽𧋦<E586BD>啁<EFBFBD>霂穃末<E7A983><E69CAB>ist嚗?
|
||
# dist # <20><>𧒄瘜券<E7989C><E588B8>㚁<EFBFBD><E39A81><EFBFBD>捂憭滚<E686AD><E6BB9A>砍𧑐dist
|
||
|
||
# 瘚贝<E7989A><E8B49D><EFBFBD>辣
|
||
test
|
||
tests
|
||
*.test.ts
|
||
*.spec.ts
|
||
coverage
|
||
|
||
# <20><>﹝<EFBFBD>䔶葩<E494B6>嗆<EFBFBD>隞?
|
||
docs
|
||
*.md
|
||
.vscode
|
||
.idea
|
||
.DS_Store
|
||
Thumbs.db
|
||
|
||
# 銝𠹺<E98A9D><F0A0B9BA><EFBFBD>辣嚗<E8BEA3><E59A97>銵峕𧒄<E5B395><F0A79284><EFBFBD>嚗?
|
||
uploads/*
|
||
|
||
# Git
|
||
.git
|
||
.gitignore
|
||
|
||
# <20>亙<EFBFBD>
|
||
*.log
|
||
logs
|
||
|
||
# 銝湔𧒄<E6B994><F0A79284>辣
|
||
temp
|
||
tmp
|
||
*.swp
|
||
*.swo
|
||
*~
|
||
|
||
# <20>唳旿摨𤘪<E691A8>隞塚<E99A9E>SQLite嚗<65><E59A97><EFBFBD>𨀣<EFBFBD>嚗?
|
||
*.db
|
||
*.sqlite
|
||
|
||
# <20>𡁏𧋦<F0A1818F><F0A78BA6>辣嚗<E8BEA3><E59A97>撘<EFBFBD><E69298>睲蝙<E79DB2>剁<EFBFBD>
|
||
scripts/*.ts
|
||
*.bat
|
||
*.ps1
|
||
```
|
||
|
||
---
|
||
|
||
## <20><><EFBFBD>C嚗𡁶㮾<F0A181B6>單<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<51>唳旿摨㯄<E691A8>蝵脫<E89DB5>雿𨀣<E99BBF><F0A880A3>䀉(./08-PostgreSQL<51>唳旿摨㯄<E691A8>蝵脫<E89DB5>雿𨀣<E99BBF><F0A880A3>?md)
|
||
- [Python敺格<EFBFBD><EFBFBD>?SAE<41>函蔡<E587BD>滢<EFBFBD><E6BBA2>见<EFBFBD>](./09-Python敺格<E695BA><E6A0BC>?SAE<41>函蔡<E587BD>滢<EFBFBD><E6BBA2>见<EFBFBD>.md)
|
||
|
||
---
|
||
|
||
**<EFBFBD><EFBFBD>﹝蝏湔擪<EFBFBD>?*: AI Assistant
|
||
**<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>?*: 2024-12-24
|
||
**<EFBFBD><EFBFBD>𧋦**: v1.0
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|