Files
AIclinicalresearch/docs/05-部署文档/17-完整部署实战手册-2025版.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

1828 lines
40 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.
# AI銝游<E98A9D><E6B8B8>𠉛弦撟喳蝱 - 摰峕㟲<E5B395>函蔡摰墧<E691B0><E5A2A7><EFBFBD>嚗?025<32><35><EFBFBD>
> **<2A><><EFBFBD><EFB99D>𧋦**嚗鯝1.0嚗<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
> **<2A>𥕦遣<F0A595A6><EFBFBD>**嚗?025-12-25
> **<2A><EFBFBD>摰鮋<E691B0><E9AE8B>函蔡**嚗?025-12-24 ~ 2025-12-25 摰峕㟲<E5B395>函蔡蝏誩<E89D8F>
> **<2A>函蔡<E587BD>𣂼<EFBFBD><F0A382BC>園𡢿**嚗𡁶漲6撠𤩺𧒄嚗<F0A79284><E59A97><EFBFBD>恍䔮憸䀹<E686B8><E480B9><EFBFBD>
> **<2A>函蔡鈭箏<E988AD>**嚗𡁜<E59A97><F0A1819C>穃𣪧<E7A983>?
> **<2A>函蔡蝏𤘪<E89D8F>**嚗尠<E59A97><><E691B0><EFBFBD>𣂼<EFBFBD>嚗峕<E59A97><E5B395><EFBFBD><E58CA7>賣迤撣貉<E692A3>銵?
---
## <20><> <20><>﹝霂湔<E99C82>
### <20><EFBFBD><EFBFBD><E78DA2><EFBFBD><EFBFBD>
- <20>?**<2A><EFBFBD><E7AE94><EFBFBD><E7AC94>函蔡蝏誩<E89D8F>**嚗朞扇敶蓥<E695B6>2025撟?2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵脩<E89DB5>摰峕㟲餈<E39FB2><E9A488>
- <20>?**<2A><><EFBFBD><E98984><EFBFBD><EFBFBD><E58CA7>?*嚗𡁻<E59A97><F0A181BB><EFBFBD>4銝芸<E98A9D><E88AB8>桅䔮憸睃<E686B8><EFBFBD><E996AB><EFBFBD><EFBFBD>
- <20>?**蝏誯<E89D8F><E8AAAF><EFBFBD>**嚗𡁏<E59A97><F0A1818F>澆枂<E6BE86><E69E82><EFBFBD>雿喳<E99BBF>頝萄<E9A09D>瘜冽<E7989C>鈭钅★
- <20>?**<2A>舐凒<E88890><EFBFBD><E4BA99>?*嚗𡁏<E59A97><F0A1818F><EFBFBD>蝵桀<E89DB5><E6A180>賭誘<E8B3AD><EFBFBD><EFBFBD><E9A488>霂?
- <20>?**<2A><><EFBFBD>敹恍<E695B9><EFBFBD>蝵?*嚗朞<E59A97><E69C9E><EFBFBD><EFBFBD>𡁜停<F0A1819C><EFBFBD><E8B3A3>?
### 銝𤾸<E98A9D>隞𡝗<E99A9E><EFBFBD><E78DA2><EFBFBD>喟頂
| <20><><EFBFBD>滨妍 | <20><EFBFBD>?| 雿閙𧒄雿輻鍂 |
|---------|------|---------|
| **<EFBFBD><EFBFBD>獢?* | 摰墧<E691B0><E5A2A7>函蔡摰峕㟲瘚<E39FB2><E7989A> | 潃?<3F><EFBFBD>蝵脫<E89DB5><E884AB>齿鰵<E9BDBF>函蔡<E587BD>?|
| `01-敹恍<E695B9><EFBFBD>蝵淞OP-<2D>嗅抅蝖<E68A85><E89D96>?md` | <20>嗅抅蝖<E68A85>摰峕㟲<E5B395><E39FB2><EFBFBD> | 隞𡡞妟撘<E5A69F>憪见郎銋䭾𧒄 |
| `00-<2D>函蔡餈𥕦漲<F0A595A6><EFBFBD>.md` | 韏<><E99F8F><EFBFBD><EFBFBD>䰻蝝<E89D9D> | <20>亥砭韏<E7A0AD><E99F8F>靽⊥<E99DBD><E28AA5>?|
| `12-Node.js<6A>𡒊垢-SAE<41>函蔡<E587BD><EFBFBD><E6BBA2><EFBFBD>.md` | <20><EFBFBD><E99699><EFBFBD>蝵?| <20><EFBFBD>蝵脫<E89DB5>銝芣<E98A9D><E88AA3>⊥𧒄 |
---
## <20><20>函蔡<E587BD><EFBFBD><E59786><EFBFBD>
```
<EFBFBD><EFBFBD>瘚讛<EFBFBD><EFBFBD>?
<20>?HTTPS (<28><EFBFBD>)
CLB韐蠘蝸<EFBFBD><EFBFBD><EFBFBD>?(<28><EFBFBD>IP: 8.140.53.236)
<20>?HTTP (<28><><EFBFBD>)
<EFBFBD>滨垢Nginx (SAE: 172.17.173.72:80)
<20>?HTTP (<28><><EFBFBD>, /api/v1/)
Node.js<6A>𡒊垢 (SAE: 172.17.173.73:3001)
<20>?HTTP (<28><><EFBFBD>, /api/dc/)
Python<EFBFBD>滚𦛚 (SAE: 172.17.173.66:8000)
<20>?SQL (<28><><EFBFBD>)
RDS PostgreSQL (<28><><EFBFBD>: pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432)
```
**<EFBFBD>喲睸靘肽<EFBFBD>**嚗?
- <20><><EFBFBD><EFBFBD><E39787><E288AA><EFBFBD>銝杼PC<50><43><EFBFBD>嚗Ǒ172.17.0.0/16`嚗?
- 雿輻鍂NAT蝵穃<E89DB5>霈輸䔮憭𣇉<E686AD><EFBFBD><E59A97><EFBFBD><EFBFBD><E39A9A><EFBFBD><E8AD8C><EFBFBD><EFBFBD>汪LM API嚗?
- CLB蝏穃<E89D8F><E7A983>滨垢嚗峕<E59A97>靘𥕦<E99D98>蝵𤏸挪<F0A48FB8>?
---
## <20><> <20>函蔡憿箏<E686BF><EFBFBD><EFBFBD><EFBFBD>憿箏<E686BF><E7AE8F><EFBFBD>嚗?
| 甇仿炊 | <20>滚𦛚 | 憸<><EFBFBD>園𡢿 | 靘肽<E99D98>憿?|
|------|------|---------|--------|
| 1儭謿<E584AD> | VPC蝵𤑳<E89DB5> + NAT蝵穃<E89DB5> | 15<31><35><EFBFBD> | <20>?|
| 2儭謿<E584AD> | RDS PostgreSQL | 30<33><30><EFBFBD> | VPC |
| 3儭謿<E584AD> | OSS撖寡情摮睃<E691AE> | 10<31><30><EFBFBD> | <20>?|
| 4儭謿<E584AD> | ACR摰孵膥<E5ADB5>𨅯<EFBFBD>隞枏<E99A9E> | 10<31><30><EFBFBD> | <20>?|
| 5儭謿<E584AD> | Python敺格<E695BA><E6A0BC><EFBFBD><E28ABF>𤩺<EFBFBD>撱?| 20<32><30><EFBFBD> | ACR |
| 6儭謿<E584AD> | Python敺格<E695BA><E6A0BC><EFBFBD>蝵脣<E89DB5>SAE | 15<31><35><EFBFBD> | VPC, ACR |
| 7儭謿<E584AD> | Node.js<6A>𡒊垢<F0A1928A>𨅯<EFBFBD><F0A885AF><EFBFBD>遣 | 30<33><30><EFBFBD> | ACR, RDS |
| 8儭謿<E584AD> | Node.js<6A>𡒊垢<F0A1928A>函蔡<E587BD>訕AE | 20<32><30><EFBFBD> | VPC, ACR, RDS, Python |
| 9儭謿<E584AD> | <20>滨垢Nginx<6E>𨅯<EFBFBD><F0A885AF><EFBFBD>遣 | 15<31><35><EFBFBD> | ACR |
| <20><> | <20>滨垢Nginx<6E>函蔡<E587BD>訕AE | 15<31><35><EFBFBD> | VPC, ACR, Node.js |
| 1儭謿<E584AD>1儭謿<E584AD> | CLB韐蠘蝸<E8A098><E89DB8><EFBFBD>?| 10<31><30><EFBFBD> | <20>滨垢Nginx |
| 1儭謿<E584AD>2儭謿<E584AD> | <20>券曎頝舀<E9A09D>霂閖<E99C82>霂?| 30<33><30><EFBFBD> | <20><><EFBFBD><EFBFBD><E39787>?|
**<EFBFBD>餉恣**嚗𡁶漲3.5撠𤩺𧒄嚗<EFBFBD><EFBFBD><EFBFBD>恍䔮憸䀹<EFBFBD><EFBFBD><EFBFBD>
---
## <20><><><E98A9D><EFBFBD><EFBFBD>蝵桀<E89DB5><EFBFBD><E686AD>30<33><30><EFBFBD>嚗?
### 1.1 <20><EFBFBD>鈭𤏸揭<F0A48FB8><EFBFBD><EFBFBD><E99F8F>
**璉<><E79289><EFBFBD><E4BAA4>?*嚗?
- [ ] <20><EFBFBD>鈭𤏸揭<F0A48FB8>瑕歇摰𧼮<E691B0>霈方<E99C88>
- [ ] 韐行<E99F90>雿䠷<E99BBF> <20>?500<30><30><EFBFBD>撱箄悅1000<30><30><EFBFBD>
- [ ] <20><EFBFBD><E595A3>㗇𥋘嚗𡁜<E59A97><F0A1819C>?嚗<><E59A97>鈭穿<E988AD>
- [ ] 撌脣<E6928C>撱摧AM霈輸䔮撖<E494AE>𤨎嚗<F0A4A88E>鍂鈭𥟠ocker<65><EFBFBD>嚗?
### 1.2 <20>砍𧑐撘<F0A79190><E69298>𤑳㴓憓?
**敹<><E695B9>撌亙<E6928C>**嚗?
- [ ] Docker Desktop嚗Áindows/Mac嚗㗇<E59A97> Docker Engine嚗𡿨inux嚗?
- [ ] Git嚗<74>鍂鈭𦒘誨<F0A69298><E8AAA8><EFBFBD><E681A3><EFBFBD>
- [ ] Node.js 22+嚗<>鍂鈭擧𧋦<E693A7><EFBFBD>撱綽<E692B1>
- [ ] PowerShell <20>?Bash嚗<68><E59A97>銵諹<E98AB5><E8ABB9>穿<EFBFBD>
**撉諹<E69289><E8ABB9>賭誘**嚗?
```bash
docker --version # 摨娍遬蝷?Docker version 24.0+
git --version # 摨娍遬蝷?git version 2.x+
node --version # 摨娍遬蝷?v22.x.x
```
### 1.3 憿寧𤌍隞<F0A48C8D><E99A9E><EFBFBD><EFBFBD><EFBFBD>
```bash
# <20><EFBFBD>憿寧𤌍嚗<F0A48C8D><E59A97><EFBFBD>𡏭<EFBFBD>瘝⊥<E7989D>嚗?
git clone <your-repo-url> AIclinicalresearch
cd AIclinicalresearch
# 蝖株恕憿寧𤌍蝏𤘪<E89D8F>
ls -la
# 摨磰砲<E7A3B0><EFBFBD>嚗颹ackend/, frontend-v2/, extraction_service/, docs/
```
---
## <20><> 鈭䎚<E988AD><E48E9A>抅蝖<E68A85>霈暹鴌<E69AB9>函蔡嚗?撠𤩺𧒄嚗?
### 2.1 VPC蝵𤑳<E89DB5>嚗?5<><35><EFBFBD>嚗?
**<EFBFBD><EFBFBD>VPC<EFBFBD><EFBFBD><EFBFBD>?*嚗冴ttps://vpc.console.aliyun.com/
#### <20>𥕦遣VPC
1. <20>孵稬<E5ADB5>𣂼<EFBFBD>撱箔<E692B1><E7AE94><EFBFBD>蝏栶<E89D8F>?
2. <20>滨蔭<E6BBA8><E894AD>㺭嚗?
```yaml
VPC<50>滨妍: ai-clinical-vpc
<20><EFBFBD>: <20>𤾸<EFBFBD>2嚗<32><E59A97>鈭穿<E988AD>
IPv4蝵烐挾: 172.17.0.0/16
```
3. <20>孵稬<E5ADB5>摰𠾼<E691B0>?
#### <20>𥕦遣鈭斗揢<E69697><EFBFBD>2銝迎<E98A9D><E8BF8E><EFBFBD><E99EBE>舐鍂<E88890><EFBFBD>
**鈭斗揢<E69697>?**嚗?
```yaml
<EFBFBD>滨妍: ai-clinical-vsw-f
<EFBFBD>舐鍂<EFBFBD>? <20>𤾸<EFBFBD>2 <20>舐鍂<E88890>
IPv4蝵烐挾: 172.17.160.0/20
```
**鈭斗揢<E69697>?**嚗?
```yaml
<EFBFBD>滨妍: ai-clinical-vsw-a
<EFBFBD>舐鍂<EFBFBD>? <20>𤾸<EFBFBD>2 <20>舐鍂<E88890>
IPv4蝵烐挾: 172.17.192.0/20
```
#### <20>𥕦遣摰匧<E691B0>蝏?
1. 餈𥕦<E9A488><F0A595A6>𣂼<EFBFBD><F0A382BC><EFBFBD><E587BD>煾△<E785BE>?
2. <20>𥕦遣摰匧<E691B0><EFBFBD><E89D8F>
```yaml
<20>滨妍: ai-clinical-sg
蝵𤑳<E89DB5>: ai-clinical-vpc
```
3. <20>滨蔭<E6BBA8>交䲮<E4BAA4>𤏸<EFBFBD><F0A48FB8><EFBFBD>
```yaml
# <20><>捂VPC<50><43><EFBFBD>鈭㘾<E988AD>?
<20>讛悅: <20><EFBFBD>
蝡臬藁: -1/-1
<20><><EFBFBD>撖寡情: 172.17.0.0/16
# <20><>捂HTTPS (443)
<20>讛悅: TCP
蝡臬藁: 443/443
<20><><EFBFBD>撖寡情: 0.0.0.0/0
# <20><>捂HTTP (80)
<20>讛悅: TCP
蝡臬藁: 80/80
<20><><EFBFBD>撖寡情: 0.0.0.0/0
```
---
### 2.2 NAT蝵穃<E89DB5>嚗?5<><35><EFBFBD>嚗?
**<2A><EFBFBD>?*嚗朞悟VPC<50><43><EFBFBD>SAE摨𠉛鍂<F0A0899B>質挪<E8B3AA><EFBFBD>蝵𡢅<E89DB5><F0A1A285><EFBFBD><E58CA7>𨅯<EFBFBD><F0A885AF><EFBFBD><EFBFBD><EFBFBD>汪LM API嚗?
#### <20>𥕦遣NAT蝵穃<E89DB5>
**<2A><EFBFBD>NAT蝵穃<E89DB5><E7A983><EFBFBD><E689B9>?*嚗冴ttps://vpc.console.aliyun.com/nat/
1. <20>孵稬<E5ADB5>𣂼<EFBFBD>撱摸AT蝵穃<E89DB5><E7A983>?
2. <20>滨蔭<E6BBA8><E894AD>㺭嚗?
```yaml
<20>滨妍: NAT_airesearch
<20><EFBFBD>: <20>𤾸<EFBFBD>2嚗<32><E59A97>鈭穿<E988AD>
VPC: ai-clinical-vpc
鈭斗揢<E69697>? ai-clinical-vsw-f
蝵穃<E89DB5>蝐餃<E89D90>: 憓𧼮撩<F0A7BCAE>?
隞䁅晶璅<E79285>: <20><EFBFBD>隞䁅晶
```
3. <20>孵稬<E5ADB5><EFBFBD><E99E9F>唾揚銋啜<E98A8B>?
#### <20>𥕦遣撟嗥<E6929F>摰鍃IP
1. <20>沐AT蝵穃<E89DB5>霂行<E99C82>憿蛛<E686BF><E89B9B>孵稬<E5ADB5><EFBFBD>摰𡁜撕<F0A1819C><EFBFBD>蝵飡P<E9A3A1>?
2. <20>㗇𥋘<E39787>鞱揚銋唳鰵<E594B3><E9B0B5>IP<49>𡢅<EFBFBD>
```yaml
霈∟晶<E2889F><EFBFBD>: <20>劐蝙<E58A90><EFBFBD><E586BD>?
撣血捐撜啣<E6929C>? 5Mbps嚗<73><E59A97>霂閧㴓憓<E3B493><E68693><EFBFBD><EFBFBD>
```
3. 韐凋僭撟嗥<E6929F>摰?
#### <20>滨蔭SNAT<41>∠𤌍嚗<F0A48C8D><E59A97><EFBFBD><EFBFBD>嚗?
1. 餈𥕦<E9A488>NAT蝵穃<E89DB5>霂行<E99C82> <20>?<3F>𠩐NAT蝞∠<E89D9E><E288A0>?
2. 瘛餃<E7989B>SNAT<41>∠𤌍1嚗?
```yaml
鈭斗揢<E69697>? ai-clinical-vsw-f
<20><EFBFBD>IP: <20>㗇𥋘<E39787>𡁏<EFBFBD><F0A1818F><EFBFBD>IP
```
3. 瘛餃<E7989B>SNAT<41>∠𤌍2嚗?
```yaml
鈭斗揢<E69697>? ai-clinical-vsw-a
<20><EFBFBD>IP: <20>㗇𥋘<E39787>𡁏<EFBFBD><F0A1818F><EFBFBD>IP
```
**撉諹<E69289>**嚗?
- SNAT<41>∠𤌍<E288A0><EFBFBD><E59786>遬蝷箝<E89DB7>𣂼虾<F0A382BC><EFBFBD><EFBFBD>
---
### 2.3 RDS PostgreSQL嚗?0<><30><EFBFBD>嚗?
**<2A><EFBFBD>RDS<44><EFBFBD><E689B9>?*嚗冴ttps://rdsnext.console.aliyun.com/
#### <20>𥕦遣摰硺<E691B0>
1. <20>孵稬<E5ADB5>𣂼<EFBFBD>撱箏<E692B1>靘卝<E99D98>?
2. <20>滨蔭<E6BBA8><E894AD>㺭嚗?
```yaml
# <20><EFBFBD><E7AE87>滨蔭
<20><EFBFBD>: <20>𤾸<EFBFBD>2嚗<32><E59A97>鈭穿<E988AD>
<20>舐鍂<E88890>? <20>舐鍂<E88890>慚嚗<E6859A><E59A97>鈭斗揢<E69697>箏笆摨䈑<E691A8>
<20>唳旿摨枏<E691A8><E69E8F>? PostgreSQL
<20><>𧋦: 15
蝟餃<E89D9F>: 擃睃虾<E79D83><EFBFBD>
摮睃<E691AE>蝐餃<E89D90>: ESSD鈭𤑳<E988AD>
# 閫<>
<>聢蝐餃<E89D90>: <20>𡁶鍂<F0A181B6>?
<>聢: 2<>?GB (pg.n2.2c.1m)
摮睃<E691AE>蝛粹𡢿: 100GB
# 蝵𤑳<E89DB5>
蝵𤑳<E89DB5>蝐餃<E89D90>: 銝𤘪<E98A9D>蝵𤑳<E89DB5>
VPC: ai-clinical-vpc
鈭斗揢<E69697>? ai-clinical-vsw-f
# 隞䁅晶
隞䁅晶蝐餃<E89D90>: <20><EFBFBD>隞䁅晶嚗<E699B6><E59A97>霂𤏪<E99C82><F0A48FAA>?<3F><><EFBFBD><E58391><EFBFBD><EFBFBD><E59A97>鈭改<E988AD>
```
3. <20>孵稬<E5ADB5><EFBFBD><E99E9F>唾揚銋啜<E98A8B>?
#### <20>𥕦遣<F0A595A6>唳旿摨枏<E691A8>韐血噡
**蝑匧<E89D91>摰硺<E691B0><E7A1BA>𥕦遣摰峕<E691B0><EFBFBD>漲10<31><30><EFBFBD>嚗?*嚗𣬚<E59A97><F0A3AC9A>𠬍<EFBFBD>
1. 餈𥕦<E9A488>摰硺<E691B0>霂行<E99C82> <20>?<3F>鞱揭<E99EB1>瑞恣<E7919E><E681A3><EFBFBD>?
2. <20>𥕦遣擃䀹<E69383><E480B9>鞱揭<E99EB1><EFBFBD>
```yaml
韐血噡<E8A180>滨妍: airesearch
韐血噡撖<E599A1><E69296>: Xibahe@fengzhibo117 # <20>嫣蛹<E5ABA3><EFBFBD>撘箏<E69298><E7AE8F>?
韐血噡蝐餃<E89D90>: 擃䀹<E69383><E480B9>鞱揭<E99EB1>?
```
3. 餈𥕦<E9A488><F0A595A6>鞉㺭<E99E89><EFBFBD>蝞∠<E89D9E><E288A0>?
4. <20>𥕦遣<F0A595A6>唳旿摨橒<E691A8>
```yaml
<20>唳旿摨枏<E691A8>蝘? ai_clinical_research
摮㛖泵<E39B96>? UTF8
<20><EFBFBD><EFBFBD><E996AB>: en_US.utf8
<20><><EFBFBD>韐血噡: airesearch (霂餃<E99C82>)
```
#### <20>滨蔭<E6BBA8><EFBFBD><E8B3A2>?
1. 餈𥕦<E9A488><F0A595A6>鞉㺭<E99E89><EFBFBD><E6A180><EFBFBD><EFBFBD><EFBFBD> <20>鞟蒾<E99E9F><EFBFBD>霈曄蔭<E69B84>?
2. 靽格㺿暺䁅恕<E48185><E68195><EFBFBD>嚗?
```yaml
<20><EFBFBD><E8B3A2>? 172.17.0.0/16 # VPC蝵烐挾
```
#### <20>滨蔭<E6BBA8>嗅躹嚗<E8BAB9><E59A97><EFBFBD><E996AC>嚗?
1. 餈𥕦<E9A488><F0A595A6>𣂼<EFBFBD><F0A382BC>啗挽蝵柴<E89DB5>?
2. <20>𦦵揣 `timezone`
3. 靽格㺿銝綽<E98A9D>`Asia/Shanghai`
4. <20>孵稬<E5ADB5><EFBFBD>鈭文<E988AD><E69687><EFBFBD>?
#### 撖澆<E69296><E6BE86>唳旿
**<2A><EFBFBD>1嚗帋蝙<E5B88B>冽𧋦<E586BD>唳㺭<E594B3><EFBFBD>撖澆枂**嚗<><EFBFBD><EFBFBD>
```bash
# 隞擧𧋦<E693A7>蚤ocker撖澆枂
docker exec ai-clinical-postgres pg_dump \
-U postgres \
-d ai_clinical_research \
--format=plain \
--no-owner \
--no-acl \
--encoding=UTF8 \
> rds_init.sql
# 銝湔𧒄撘<F0A79284><E69298>爹DS憭𣇉<E686AD><F0A38789><EFBFBD><EFBFBD><E59A97><EFBFBD><EFBFBD>撖澆<E69296>嚗?
# <20>沖DS<44><EFBFBD><E689B9>?<3F>?<3F>唳旿摨栞<E691A8><E6A09E>?<3F>?<3F>唾窈憭𣇉<E686AD><F0A38789><EFBFBD>
# 撖澆<E69296><E6BE86>訌DS嚗<53><E59A97><EFBFBD><EFBFBD><EFBFBD><E585B8>纺sql摰<E691B0>蝡荔<E89DA1>
cat rds_init.sql | docker exec -i -e PGPASSWORD="Xibahe@fengzhibo117" \
ai-clinical-postgres psql \
-h pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com \
-p 5432 -U airesearch -d ai_clinical_research
# 撖澆<E69296>摰峕<E691B0><E5B395>𠬍<EFBFBD>蝡见朖<E8A781>喲𡡒憭𣇉<E686AD><F0A38789><EFBFBD><EFBFBD><E59A97><EFBFBD><EFBFBD>
```
**撉諹<E69289>**嚗?
```bash
# 餈墧𦻖<E5A2A7>訌DS璉<53><E79289>?
docker exec -e PGPASSWORD="Xibahe@fengzhibo117" \
ai-clinical-postgres psql \
-h pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com \
-p 5432 -U airesearch -d ai_clinical_research \
-c "SELECT nspname FROM pg_namespace WHERE nspname LIKE '%_schema' ORDER BY nspname;"
# 摨磰砲<E7A3B0><EFBFBD>嚗惨sl_schema, dc_schema, platform_schema 蝑?
```
---
### 2.4 OSS撖寡情摮睃<E691AE>嚗?0<><30><EFBFBD>嚗?
**<2A><EFBFBD>OSS<53><EFBFBD><E689B9>?*嚗冴ttps://oss.console.aliyun.com/
#### <20>𥕦遣Bucket
1. <20>孵稬<E5ADB5>𣂼<EFBFBD>撱慷ucket<65>?
2. <20>滨蔭<E6BBA8><E894AD>㺭嚗?
```yaml
Bucket<65>滨妍: ai-clinical-research
<20><EFBFBD>: <20>𤾸<EFBFBD>2嚗<32><E59A97>鈭穿<E988AD>
摮睃<E691AE>蝐餃<E89D90>: <20><><EFBFBD>摮睃<E691AE>
霂餃<E99C82><E9A483><EFBFBD><EFBFBD>: 蝘<><E89D98>
摮睃<E691AE><E79D83>𦯀<EFBFBD>蝐餃<E89D90>: <20><><EFBFBD><EFBFBD>𦯀<EFBFBD>摮睃<E691AE>
<20><>𧋦<EFBFBD><EFBFBD>: <20>喲𡡒
```
3. <20>孵稬<E5ADB5>摰𠾼<E691B0>?
#### <20>𥕦遣RAM霈輸䔮撖<E494AE>𤨎
1. 餈𥕦<E9A488><F0A595A6>鞱挪<E99EB1>格綉<E6A0BC>買AM<41>𡢅<EFBFBD>https://ram.console.aliyun.com/
2. <20>𥕦遣<F0A595A6><EFBFBD>嚗?
```yaml
<20><EFBFBD><E9A483>滨妍: oss-bucket-writer
<20>曄內<E69B84>滨妍: OSS Bucket<65><EFBFBD><E59D94><EFBFBD>
霈輸䔮<E8BCB8><EFBFBD>: <20>?OpenAPI靚<49>鍂霈輸䔮
```
3. 靽嘥<E99DBD>AccessKey嚗?
```yaml
AccessKeyId: LTAI5tB2Dt3NdvBL3G7nYGv7
AccessKeySecret: 1iSN9k39RkApP93QjUhC1DcPIeMG4V
```
**<2A>𩤃<EFBFBD> 蝡见朖憭滚<E686AD>靽嘥<E99DBD><EFBFBD><E59A97>蝏剜<E89D8F>瘜閙䰻<E99699><EFBFBD>**
4. 銝箇鍂<E7AE87><EFBFBD><E7919F><EFBFBD><EFBFBD>
- <20>㗇𥋘<E39787><EFBFBD> <20>?<3F>鞉溶<E99E89><EFBFBD><E4ADBE><EFBFBD>?
- <20>㗇𥋘<E39787><F0A58B98><EFBFBD>嚗䫤AliyunOSSFullAccess`<EFBFBD><EFBFBD><EFBFBD><EFBFBD>銋㗇<EFBFBD><EFBFBD><EFBFBD>
---
### 2.5 ACR摰孵膥<E5ADB5>𨅯<EFBFBD>隞枏<E99A9E>嚗?0<><30><EFBFBD>嚗?
**<EFBFBD><EFBFBD>摰孵膥<EFBFBD>𨅯<EFBFBD><EFBFBD>滚𦛚**嚗冴ttps://cr.console.aliyun.com/
#### <20>𥕦遣<F0A595A6><EFBFBD>蝛粹𡢿
1. 餈𥕦<E9A488><F0A595A6>𣂷葵鈭箏<E988AD>靘卝<E99D98><EFBFBD> <20>𣂼𦶢<F0A382BC>滨征<E6BBA8><EFBFBD>?
2. <20>孵稬<E5ADB5>𣂼<EFBFBD>撱箏𦶢<E7AE8F>滨征<E6BBA8><EFBFBD>𡢅<EFBFBD>
```yaml
<20><EFBFBD>蝛粹𡢿<E7B2B9>滨妍: ai-clinical
```
#### <20>𥕦遣<F0A595A6>𨅯<EFBFBD>隞枏<E99A9E>嚗?銝迎<E98A9D>
**隞枏<E99A9E>1嚗䥪ython敺格<E695BA><E6A0BC>?*
```yaml
<EFBFBD><EFBFBD>蝛粹𡢿: ai-clinical
隞枏<EFBFBD><EFBFBD>滨妍: python-extraction
隞枏<EFBFBD>蝐餃<EFBFBD>: 蝘<><E89D98>
<EFBFBD><EFBFBD>: Python<6F><6E><EFBFBD>𣂼<EFBFBD><F0A382BC>滚𦛚
```
**隞枏<E99A9E>2嚗鐭ode.js<6A>𡒊垢**
```yaml
<EFBFBD><EFBFBD>蝛粹𡢿: ai-clinical
隞枏<EFBFBD><EFBFBD>滨妍: backend-service
隞枏<EFBFBD>蝐餃<EFBFBD>: 蝘<><E89D98>
<EFBFBD><EFBFBD>: Node.js<6A>𡒊垢API<50>滚𦛚
```
**隞枏<E99A9E>3嚗𡁜<E59A97>蝡烤ginx**
```yaml
<EFBFBD><EFBFBD>蝛粹𡢿: ai-clinical
隞枏<EFBFBD><EFBFBD>滨妍: ai-clinical_frontend-nginx
隞枏<EFBFBD>蝐餃<EFBFBD>: 蝘<><E89D98>
<EFBFBD><EFBFBD>: React<63>滨垢Nginx<6E>滚𦛚
```
#### 霈曄蔭霈輸䔮<E8BCB8><EFBFBD>
**<2A>冽𧋦<E586BD>蚤ocker<65><EFBFBD>ACR**嚗?
```bash
# 銝芯犖<E88AAF>㇁CR<43><EFBFBD><EFBFBD><E59A97>蝵穃𧑐<E7A983><F0A79190>嚗?
docker login \
--username=gofeng117@163.com \
--password=fengzhibo117 \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com
# <20><EFBFBD><E9A483>𣂼<EFBFBD><F0A382BC>鞟內
# Login Succeeded
```
**霈啣<E99C88><E595A3>𨅯<EFBFBD><F0A885AF><EFBFBD><E595A3><EFBFBD>**嚗?
```bash
# <20><EFBFBD><E7A589><EFBFBD><EFBFBD>𧋦<EFBFBD>唳綫<E594B3><E7B6AB>鍂嚗?
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/<隞枏<E99A9E><E69E8F>?:<<3C><>倌>
# VPC<50><EFBFBD>嚗𠄎AE<41><EFBFBD><E58CA7><EFBFBD>
crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/<隞枏<E99A9E><E69E8F>?:<<3C><>倌>
```
---
## <20><> 銝剹<E98A9D><E589B9>ython敺格<E695BA><E6A0BC><EFBFBD>蝵莎<E89DB5>35<33><35><EFBFBD>嚗?
### 3.1 <20><>遣Docker<65>𨅯<EFBFBD>嚗?0<><30><EFBFBD>嚗?
#### 餈𥕦<E9A488><F0A595A6><EFBFBD>
```bash
cd AIclinicalresearch/extraction_service
```
#### 璉<><E79289>主ockerfile
蝖株恕Dockerfile摮睃銁銝𥪜<EFBFBD>摰寞迤蝖殷<EFBFBD>
```dockerfile
# 摨磰砲<E7A3B0><E7A0B2>鉄嚗?
FROM python:3-slim
# ... 摰㕑<E691B0>靘肽<E99D98>
COPY requirements-prod.txt .
RUN pip install --no-cache-dir -r requirements-prod.txt
# ... 憭滚<E686AD><EFBFBD><E99A9E>
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
```
#### <20><><EFBFBD>𨅯<EFBFBD>
```bash
# <20><><EFBFBD>𨅯<EFBFBD>
docker build -t python-extraction:v1.0 .
# 蝑匧<E89D91><E58CA7><EFBFBD>遣摰峕<E691B0><EFBFBD>漲10-15<31><35><EFBFBD>嚗?
# Successfully built...
# Successfully tagged python-extraction:v1.0
```
#### <20>砍𧑐瘚贝<E7989A><EFBFBD><EFBFBD><EFBFBD><E58A90><EFBFBD>嚗?
```bash
# 餈鞱<E9A488>摰孵膥
docker run -d -p 8000:8000 --name python-test python-extraction:v1.0
# 瘚贝<E7989A><E8B49D>亙熒璉<E78692><E79289>?
curl http://localhost:8000/api/health
# 摨磰砲餈𥪜<E9A488>嚗?
# {
# "status": "healthy",
# "checks": {...}
# }
# <20>𨀣迫摰孵膥
docker stop python-test
docker rm python-test
```
#### <20><EFBFBD><E588B8><EFBFBD>ACR
```bash
# <20>𤘪<EFBFBD>蝑?
docker tag python-extraction:v1.0 \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0
# <20><EFBFBD><E588B8><EFBFBD><EFBFBD>?
docker push \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0
# 蝑匧<E89D91><E58CA7><EFBFBD><E588B8><EFBFBD><EFBFBD><EFBFBD>蝥?-10<31><30><EFBFBD>嚗屸<E59A97><E5B1B8>讐漲1.1GB嚗?
# The push refers to repository [...]
# v1.0: digest: sha256:... size: ...
```
---
### 3.2 <20>函蔡<E587BD>訕AE嚗?5<><35><EFBFBD>嚗?
**<2A><EFBFBD>SAE<41><EFBFBD><E689B9>?*嚗冴ttps://sae.console.aliyun.com/
#### <20>𥕦遣<F0A595A6><EFBFBD>蝛粹𡢿嚗<F0A1A2BF><E59A97>甈∴<E79488>
1. 餈𥕦<E9A488><F0A595A6>𣂼𦶢<F0A382BC>滨征<E6BBA8><EFBFBD>?
2. <20>孵稬<E5ADB5>𣂼<EFBFBD>撱箏𦶢<E7AE8F>滨征<E6BBA8><EFBFBD>𡢅<EFBFBD>
```yaml
<20><EFBFBD>蝛粹𡢿ID: cn-beijing:test-airesearch
<20><EFBFBD>蝛粹𡢿<E7B2B9>滨妍: 瘚贝<E7989A><E8B49D><EFBFBD>
```
#### <20>𥕦遣摨𠉛鍂
1. <20>孵稬<E5ADB5>𣂼<EFBFBD>撱箏<E692B1><E7AE8F><EFBFBD>?
2. 摨𠉛鍂<F0A0899B>箸𧋦靽⊥<E99DBD>嚗?
```yaml
摨𠉛鍂<F0A0899B>滨妍: python-extraction-test
<20><EFBFBD>蝛粹𡢿: cn-beijing:test-airesearch
# 摰硺<E691B0><EFBFBD>
CPU: 1<>?
<20><><EFBFBD>: 2GB
摰硺<E691B0><E7A1BA>? 1
# 摨𠉛鍂<F0A0899B>函蔡<E587BD><EFBFBD>
<20>函蔡<E587BD><EFBFBD>: <20>𨅯<EFBFBD>
<20>𨅯<EFBFBD>蝐餃<E89D90>: 摰孵膥<E5ADB5>𨅯<EFBFBD><F0A885AF>滚𦛚隡<F0A69B9A><E99AA1><EFBFBD>?銝芯犖<E88AAF>?
```
3. <20>㗇𥋘<E39787>𨅯<EFBFBD>嚗?
```yaml
<20><EFBFBD>: <20>𤾸<EFBFBD>2嚗<32><E59A97>鈭穿<E988AD>
<20><EFBFBD>蝛粹𡢿: ai-clinical
隞枏<E99A9E>: python-extraction
<20>𨅯<EFBFBD><F0A885AF><EFBFBD>𧋦: v1.0
# <20>𩤃<EFBFBD> 雿輻鍂VPC<50><EFBFBD>嚗𠄎AE<41><45><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E59A97><EFBFBD><E7989A>韐對<E99F90>
<20>𨅯<EFBFBD><F0A885AF><EFBFBD>隡朞䌊<E69C9E>刻蓮銝敲PC<50><EFBFBD>嚗?
crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0
```
4. <20>滨蔭<E6BBA8>𨅯<EFBFBD>霈輸䔮<E8BCB8><EFBFBD>嚗?
```yaml
<20><EFBFBD><E586BD>? gofeng117@163.com
<><E69296>: fengzhibo117
```
5. 摨𠉛鍂<F0A0899B>滨蔭嚗?
```yaml
# <20>臬𢆡<E887AC>賭誘<E8B3AD>滨蔭
<20>臬𢆡<E887AC>賭誘: <20>嗵征嚗<E5BE81><EFBFBD>求ockerfile<6C><65>MD嚗?
# 蝡臬藁<E887AC>滨蔭
摰孵膥蝡臬藁: 8000
<20>讛悅: TCP
```
6. <20><EFBFBD><E887AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
```bash
LOG_LEVEL=INFO
TEMP_DIR=/tmp/extraction_service
```
7. 蝵𤑳<E89DB5><F0A491B3>滨蔭嚗?
```yaml
VPC: ai-clinical-vpc
鈭斗揢<E69697>? ai-clinical-vsw-f
摰匧<E691B0>蝏? ai-clinical-sg
```
8. <20>亙熒璉<E78692><E79289><EFBFBD>
```yaml
# 摮䀹暑璉<E69A91><E79289><EFBFBD>Liveness嚗?
<><E79289>交䲮撘? HTTP
<><E79289>亥楝敺? /api/health
蝡臬藁: 8000
<20><EFBFBD>撱嗉<E692B1>: 30蝘?
<><E79289>仿𡢿<E4BBBF>? 10蝘?
<><E79289><EFBFBD><E4BAA5>? 5蝘?
銝滚<E98A9D>摨琿<E691A8><E790BF>? 3甈?
# 撠梁貌璉<E8B28C><E79289><EFBFBD>Readiness嚗?
<><E79289>交䲮撘? HTTP
<><E79289>亥楝敺? /api/health
蝡臬藁: 8000
<20><EFBFBD>撱嗉<E692B1>: 10蝘?
```
9. <20>孵稬<E5ADB5>霈文<E99C88>撱箝<E692B1>?
#### 蝑匧<E89D91><E58CA7>函蔡摰峕<E691B0>
- <20><EFBFBD><E4BAA6>𣂼<EFBFBD>靘钅<E99D98>蝵脯<E89DB5>煾△<E785BE>?
- <20><EFBFBD><E59786><EFBFBD>銝箝<E98A9D>𪊟unning<6E>𡢅<EFBFBD>蝥?-10<31><30><EFBFBD>嚗?
- 霈啣<E99C88><E595A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗䫤http://172.17.173.66:8000`
#### 撉諹<E69289><E8ABB9>函蔡
```bash
# <20><EFBFBD>1嚗𡁜銁SAE摨𠉛鍂<F0A0899B><E98D82><EFBFBD>𧢲𠯫敹?
# 摨磰砲<E7A3B0><EFBFBD>嚗?
# INFO: Uvicorn running on http://0.0.0.0:8000
# INFO: Application startup complete
# <20><EFBFBD>2嚗帋<E59A97>Node.js摨𠉛鍂瘚贝<E7989A><EFBFBD><E59A97>蝵脣<E89DB5>嚗?
curl http://172.17.173.66:8000/api/health
```
---
## <20><20><EFBFBD><E49C98>ode.js<6A>𡒊垢<F0A1928A>函蔡嚗?0<><30><EFBFBD>嚗?
### 4.1 <20><><EFBFBD>撌乩<E6928C>嚗?0<><30><EFBFBD>嚗?
#### <20><><EFBFBD>撘撇WT撖<54>𤨎
```bash
# <20>沌owerShell<6C>𩂓ash銝剔<E98A9D><E58994>?
openssl rand -hex 32
# <20>?
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# 蝷箔<E89DB7>颲枏枂嚗<E69E82><EFBFBD><EFBFBD><E586BD>芸楛<E88AB8><E6A59B><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
# 8a3f9e7c2d1b5a4e6f8c9d0a3b5e7f1c2a4b6c8d0e2f4a6b8c0d2e4f6a8b0c2d4
```
#### <20><><EFBFBD><EFBFBD><EFBFBD><E887AC><EFBFBD><EFBFBD><E79A9C>
<EFBFBD>𥕦遣<EFBFBD><EFBFBD>`backend/.env.production`<EFBFBD><EFBFBD><EFBFBD>𣂷漱<EFBFBD>蚣it嚗㚁<EFBFBD>
```bash
# ==================== <20><EFBFBD><E7AE87>滨蔭 ====================
NODE_ENV=production
PORT=3001
LOG_LEVEL=info
# ==================== <20>唳旿摨栞<E691A8><E6A09E>?====================
DATABASE_URL=postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research?connection_limit=18&pool_timeout=10
# ==================== Python敺格<E695BA><E6A0BC>?<3F>𩤃<EFBFBD> <20>喲睸嚗?===================
EXTRACTION_SERVICE_URL=http://172.17.173.66:8000
# ==================== OSS撖寡情摮睃<E691AE> ====================
OSS_ACCESS_KEY_ID=LTAI5tB2Dt3NdvBL3G7nYGv7
OSS_ACCESS_KEY_SECRET=1iSN9k39RkApP93QjUhC1DcPIeMG4V
OSS_BUCKET=ai-clinical-research
OSS_ENDPOINT=oss-cn-beijing-internal.aliyuncs.com
OSS_REGION=cn-beijing
# ==================== JWT霈方<E99C88> ====================
JWT_SECRET=8a3f9e7c2d1b5a4e6f8c9d0a3b5e7f1c2a4b6c8d0e2f4a6b8c0d2e4f6a8b0c2d4
JWT_EXPIRES_IN=7d
# ==================== LLM API撖<49>𤨎 ====================
DEEPSEEK_API_KEY=sk-7f8cc37a79fa4799860b38fc7ba2e150
DASHSCOPE_API_KEY=sk-75b4ff29a14a49e79667a331034f3298
# ==================== CloseAI<41>滨蔭 ====================
CLOSEAI_API_KEY=sk-cu0iepbXYGGx2jc7BqP6ogtSWmP6fk918qV3RUdtGC3Ed1po
CLOSEAI_OPENAI_BASE_URL=https://api.openai-proxy.org/v1
CLOSEAI_CLAUDE_BASE_URL=https://api.openai-proxy.org/anthropic
# ==================== Dify<66>滨蔭 ====================
DIFY_API_URL=http://localhost/v1
DIFY_API_KEY=dataset-mfvdiKvQ213NvxWm7RoYMN3c
# ==================== Postgres-Only<6C><EFBFBD> ====================
QUEUE_TYPE=pgboss
CACHE_TYPE=postgres
```
---
### 4.2 <20><>遣Docker<65>𨅯<EFBFBD>嚗?0<><30><EFBFBD>嚗?
#### <20><EFBFBD><E5AF9E>㗇𥋘
<EFBFBD>睲賑雿輻鍂**<2A><EFBFBD>B嚗𡁏𧋦<F0A1818F><EFBFBD>霂?+ Docker<65><EFBFBD>**嚗<><E59A97>蝔喳<E89D94>嚗?
#### 甇仿炊1嚗𡁏𧋦<F0A1818F><EFBFBD>霂騻ypeScript
```bash
cd AIclinicalresearch/backend
# 摰㕑<E691B0>靘肽<E99D98>
npm install
# 蝻𤥁<E89DBB>TypeScript
npm run build
# 撉諹<E69289>蝻𤥁<E89DBB>蝏𤘪<E89D8F>
ls dist/
# 摨磰砲<E7A3B0><EFBFBD>嚗餜ndex.js, common/, modules/ 蝑?
```
#### 甇仿炊2嚗𡁏<E59A97><F0A1818F>主ockerfile
蝖株恕Dockerfile<EFBFBD><EFBFBD>捆甇<EFBFBD>嚗?
```dockerfile
FROM node:22-alpine
WORKDIR /app
# 憭滚<E686AD>package.json<6F>俰ackage-lock.json
COPY package*.json ./
# <20><EFBFBD><EFBFBD><E98B86>鈭找<E988AD>韏?
RUN npm ci --only=production --ignore-scripts
# 憭滚<E686AD>蝻𤥁<E89DBB><F0A4A581>𡒊<EFBFBD><EFBFBD><E99A9E>
COPY dist ./dist
# 憭滚<E686AD>Prisma摰<E691B0>蝡?
COPY node_modules/.prisma ./node_modules/.prisma
# 憭滚<E686AD>Prisma schema嚗<61>鍂鈭籄untime嚗?
COPY prisma ./prisma
# <20>𩤃<EFBFBD> 憭滚<E686AD>config<69><EFBFBD><EFBFBD><E59A97><EFBFBD><E996AC>嚗?
COPY config ./config
# <20>湧蠧蝡臬藁
EXPOSE 3001
# <20>臬𢆡<E887AC>賭誘
CMD ["node", "dist/index.js"]
```
**<EFBFBD>𩤃<EFBFBD> <20>喲睸靽桀<E99DBD>1**嚗𡁜<E59A97>憿餃<E686BF><E9A483>?`COPY config ./config`<EFBFBD><EFBFBD><EFBFBD><EFBFBD>仿<EFBFBD> `ENOENT: no such file or directory, open '/app/config/agents.yaml'`
#### 甇仿炊3嚗𡁏<E59A97>撱粹<E692B1><E7B2B9>?
```bash
# <20><><EFBFBD>𨅯<EFBFBD>
docker build -t backend-service:v1.3 .
# 蝑匧<E89D91><E58CA7><EFBFBD>遣摰峕<E691B0><EFBFBD>漲5<E6BCB2><35><EFBFBD>嚗?
```
#### 甇仿炊4嚗𡁏𧋦<F0A1818F><EFBFBD>霂𤏪<E99C82><F0A48FAA><EFBFBD>嚗?
```bash
# 餈鞱<E9A488>摰孵膥嚗<E886A5><E59A97><EFBFBD>交𧋦<E4BAA4>唳㺭<E594B3><EFBFBD>瘚贝<E7989A>嚗?
docker run -d -p 3001:3001 \
-e NODE_ENV=production \
-e DATABASE_URL="postgresql://postgres:postgres@host.docker.internal:5432/ai_clinical_research" \
-e EXTRACTION_SERVICE_URL=http://host.docker.internal:8000 \
--name backend-test \
backend-service:v1.3
# <20><EFBFBD><E4BAA6><EFBFBD>
docker logs -f backend-test
# 摨磰砲<E7A3B0><EFBFBD>嚗?
# <20>?Loaded 12 agent configurations
# <20>?<3F>唳旿摨栞<E691A8><E6A09E><EFBFBD><E4BAA4>?
# <20><> AI銝游<E98A9D><E6B8B8>𠉛弦撟喳蝱 - <20>𡒊垢<F0A1928A>滚𦛚<E6BB9A>典鍳<E585B8><EFBFBD><E586BD><EFBFBD><EFBFBD>
# <20><> <20>滚𦛚<E6BB9A><EFBFBD>: http://localhost:3001
# 瘚贝<E7989A><E8B49D>亙熒璉<E78692><E79289>?
curl http://localhost:3001/health
# <20>𨀣迫瘚贝<E7989A>摰孵膥
docker stop backend-test
docker rm backend-test
```
#### 甇仿炊5嚗𡁏綫<F0A1818F><E7B6AB><EFBFBD>ACR
```bash
# <20>𤘪<EFBFBD>蝑?
docker tag backend-service:v1.3 \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.3
# <20><EFBFBD><E588B8><EFBFBD><EFBFBD>?
docker push \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.3
# 蝑匧<E89D91><E58CA7><EFBFBD><E588B8><EFBFBD><EFBFBD><EFBFBD>蝥?0<><30><EFBFBD>嚗屸<E59A97><E5B1B8>讐漲838MB嚗?
```
---
### 4.3 <20>函蔡<E587BD>訕AE嚗?0<><30><EFBFBD>嚗?
**<EFBFBD><EFBFBD>SAE<EFBFBD><EFBFBD><EFBFBD>?*嚗冴ttps://sae.console.aliyun.com/
#### <20>𥕦遣摨𠉛鍂
1. <20>孵稬<E5ADB5>𣂼<EFBFBD>撱箏<E692B1><E7AE8F><EFBFBD>?
2. 摨𠉛鍂<F0A0899B>箸𧋦靽⊥<E99DBD>嚗?
```yaml
摨𠉛鍂<F0A0899B>滨妍: nodejs-backend-test
<20><EFBFBD>蝛粹𡢿: cn-beijing:test-airesearch
# 摰硺<E691B0><EFBFBD>
CPU: 1<>?
<20><><EFBFBD>: 2GB
摰硺<E691B0><E7A1BA>? 1
```
3. <20>㗇𥋘<E39787>𨅯<EFBFBD>嚗?
```yaml
<20>𨅯<EFBFBD>蝐餃<E89D90>: 摰孵膥<E5ADB5>𨅯<EFBFBD><F0A885AF>滚𦛚隡<F0A69B9A><E99AA1><EFBFBD>?銝芯犖<E88AAF>?
<20><EFBFBD>: <20>𤾸<EFBFBD>2嚗<32><E59A97>鈭穿<E988AD>
<20><EFBFBD>蝛粹𡢿: ai-clinical
隞枏<E99A9E>: backend-service
<20>𨅯<EFBFBD><F0A885AF><EFBFBD>𧋦: v1.3
# <20>𨅯<EFBFBD>霈輸䔮<E8BCB8><EFBFBD>
<20><EFBFBD><E586BD>? gofeng117@163.com
<><E69296>: fengzhibo117
```
4. 摨𠉛鍂<F0A0899B>滨蔭嚗?
```yaml
# <20>臬𢆡<E887AC>賭誘
<20>臬𢆡<E887AC>賭誘: <20>嗵征嚗<E5BE81><EFBFBD>求ockerfile<6C><65>MD嚗?
# <20>𩤃<EFBFBD> <20>喲睸嚗帋<E59A97><EFBFBD><E996AC>蝵?/bin/bash嚗淾lpine Linux瘝⊥<E7989D>bash嚗?
# 蝡臬藁<E887AC>滨蔭
摰孵膥蝡臬藁: 3001
<20>讛悅: TCP
```
5. <20><EFBFBD><E887AC><EFBFBD><EFBFBD><E59A97>儭?<3F>𧼮虜<F0A7BCAE><EFBFBD><EFBFBD><E59A97>嚗?
**憭滚<E686AD>銝𢠃𢒰<F0A2A083><F0A292B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>渡㴓憓<E3B493><E68693><EFBFBD>𤩺<EFBFBD><F0A4A9BA>?*嚗𣬚鸌<F0A3AC9A>急釣<E680A5>𧶏<EFBFBD>
```bash
# <20>𩤃<EFBFBD> <20><>摰寞<E691B0><E5AF9E><EFBFBD><E7B2B9><EFBFBD>㴓憓<E3B493><E68693><EFBFBD>?
EXTRACTION_SERVICE_URL=http://172.17.173.66:8000
# 銝齿糓 PYTHON_SERVICE_URL嚗<4C><E59A97>摮堒<E691AE>憿餅迤蝖殷<E89D96>
DATABASE_URL=postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research?connection_limit=18&pool_timeout=10
# 瘜冽<E7989C>嚗鋣 閬<><E996AC><EFBFBD>?%40
```
6. 蝵𤑳<E89DB5><F0A491B3>滨蔭嚗?
```yaml
VPC: ai-clinical-vpc
鈭斗揢<E69697>? ai-clinical-vsw-f
摰匧<E691B0>蝏? ai-clinical-sg
```
7. <20>亙熒璉<E78692><E79289><EFBFBD>
```yaml
# 摮䀹暑璉<E69A91><E79289><EFBFBD>Liveness嚗?
<><E79289>交䲮撘? HTTP
<><E79289>亥楝敺? /health
蝡臬藁: 3001
<20><EFBFBD>撱嗉<E692B1>: 60蝘? # Node.js<6A>臬𢆡颲<F0A286A1><E9A2B2>
<><E79289>仿𡢿<E4BBBF>? 10蝘?
# 撠梁貌璉<E8B28C><E79289><EFBFBD>Readiness嚗?
<><E79289>交䲮撘? HTTP
<><E79289>亥楝敺? /health
蝡臬藁: 3001
<20><EFBFBD>撱嗉<E692B1>: 30蝘?
```
8. <20>孵稬<E5ADB5>霈文<E99C88>撱箝<E692B1>?
#### 蝑匧<E89D91><E58CA7>函蔡摰峕<E691B0>
- <20><EFBFBD><E4BAA6>𣂼<EFBFBD>靘钅<E99D98>蝵脯<E89DB5>煾△<E785BE>?
- <20><EFBFBD><E59786><EFBFBD>銝箝<E98A9D>𪊟unning<6E>𡢅<EFBFBD>蝥?0<><30><EFBFBD>嚗?
- 霈啣<E99C88><E595A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗䫤http://172.17.173.73:3001`
#### 撉諹<E69289><E8ABB9>函蔡
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗𣬚霈支誑銝衤縑<EFBFBD><EFBFBD>
```bash
# <20>?摨磰砲<E7A3B0><EFBFBD><E8A781><EFBFBD>𠯫敹梹<E695B9>
<EFBFBD>?Loaded 12 agent configurations
[PgBossQueue] Using PgBossQueue (Postgres-Only<6C><EFBFBD>)
[PostgresCacheAdapter] Cleanup task started
<EFBFBD>?<3F>唳旿摨栞<E691A8><E6A09E><EFBFBD><E4BAA4><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD> <20>唳旿摨梶<E691A8><E6A2B6>? PostgreSQL 15.14
PythonExecutorService initialized: http://172.17.173.66:8000 # <20>𩤃<EFBFBD> 蝖株恕餈嗘葵嚗?
<EFBFBD><EFBFBD> AI銝游<E98A9D><E6B8B8>𠉛弦撟喳蝱 - <20>𡒊垢<F0A1928A>滚𦛚<E6BB9A>典鍳<E585B8><EFBFBD><E586BD><EFBFBD><EFBFBD>
<EFBFBD><EFBFBD> <20>滚𦛚<E6BB9A><EFBFBD>: http://localhost:3001
Server listening at http://172.17.173.73:3001
# <20>?憒<><E68692><EFBFBD><EFBFBD><E8A781>躰秤嚗?
ENOENT: no such file or directory, open '/app/config/agents.yaml'
<EFBFBD>?Dockerfile蝻箏<E89DBB> COPY config ./config
Error: unable to determine transport target for "pino-pretty"
<EFBFBD>?src/index.ts <20><EFBFBD><E4BA99>滨蔭<E6BBA8><EFBFBD>嚗屸<E59A97><EFBFBD>辺隞嗅ế<E59785>剔㴓憓?
ReferenceError: require is not defined
<EFBFBD>?healthCheck.ts 雿輻鍂鈭<E98D82>equire嚗屸<E59A97><E5B1B8>嫣蛹import
```
---
### 4.4 撣貉<E692A3><E8B289><EFBFBD>靽桀<E99DBD>
#### <20><EFBFBD>1嚗䬙onfig<69><EFBFBD>蝻箏仃
**<EFBFBD>躰秤**嚗?
```
ENOENT: no such file or directory, open '/app/config/agents.yaml'
```
**閫<><E996AB>**嚗?
```dockerfile
# <20>求ockerfile銝剜溶<E5899C>?
COPY config ./config
```
#### <20><EFBFBD>2嚗䮝ino-pretty<74>煺漣<E785BA><EFBFBD><E887AC>仿<EFBFBD>
**<EFBFBD>躰秤**嚗?
```
Error: unable to determine transport target for "pino-pretty"
```
**閫<><E996AB>**嚗帋耨<E5B88B>?`src/index.ts`
```typescript
const fastify = Fastify({
logger: config.nodeEnv === 'production'
? { level: config.logLevel } // <20>煺漣<E785BA><EFBFBD>嚗𡁶<E59A97><F0A181B6>埄SON<4F><EFBFBD>
: { // 撘<><E69298>𤑳㴓憓<E3B493><E68693>pino-pretty
level: config.logLevel,
transport: {
target: 'pino-pretty',
options: {
colorize: true,
translateTime: 'HH:MM:ss Z',
ignore: 'pid,hostname',
},
},
},
});
```
#### <20><EFBFBD>3嚗冴ealthCheck require<72>仿<EFBFBD>
**<EFBFBD>躰秤**嚗?
```
ReferenceError: require is not defined in ES module
```
**閫<><E996AB>**嚗帋耨<E5B88B>?`src/common/health/healthCheck.ts`
```typescript
import os from 'os'; // 瘛餃<E7989B>撖澆<E69296>
// 靽格㺿雿輻鍂<E8BCBB><EFBFBD>
checks.cpu = {
usage: process.cpuUsage(),
loadAverage: process.platform !== 'win32' ? os.loadavg() : 'N/A' // 雿輻鍂import<72><74>s
}
```
#### <20><EFBFBD>4嚗颹ash頝臬<E9A09D><E887AC>躰秤
**<EFBFBD>躰秤**嚗?
```
executable '/bin/bash' not found in $PATH
```
**閫<><E996AB>**嚗?
- SAE<41>臬𢆡<E887AC>賭誘<E8B3AD>嗵征嚗䔶蝙<E494B6>求ockerfile<6C><65>MD
- <20>碶蝙<E7A2B6>?`/bin/sh`<>𤜯 `/bin/bash`
---
## <20>綫 鈭𢛵<E988AD><F0A29BB5><EFBFBD>蝡烤ginx<6E>函蔡嚗?0<><30><EFBFBD>嚗?
### 5.1 <20><>遣Docker<65>𨅯<EFBFBD>嚗?5<><35><EFBFBD>嚗?
#### 餈𥕦<E9A488><F0A595A6><EFBFBD>
```bash
cd AIclinicalresearch/frontend-v2
```
#### 璉<><E79289><EFBFBD><E4BA99><EFBFBD>隞?
**1. Dockerfile**嚗<><E59A97><EFBFBD>嗆挾<E59786><E68CBE>遣嚗㚁<E59A97>
```dockerfile
# 蝚砌<E89D9A><E7A08C>嗆挾嚗𡁏<E59A97>撱摧eact摨𠉛鍂
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build
# 蝚砌<E89D9A><E7A08C>嗆挾嚗鐭ginx<6E>条恣
FROM nginx:alpine
COPY --from=builder /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/templates/nginx.conf.template
COPY docker-entrypoint.sh /docker-entrypoint.sh
RUN chmod +x /docker-entrypoint.sh
EXPOSE 80
ENTRYPOINT ["/docker-entrypoint.sh"]
```
**2. docker-entrypoint.sh**嚗<>𢆡<EFBFBD><F0A286A1><EFBFBD>蝵殷<E89DB5>嚗?
```bash
#!/bin/bash
set -e
# <20>𩤃<EFBFBD><><E79289><EFBFBD><E4BA99><EFBFBD><EFBFBD><EFBFBD>㴓憓<E3B493><E68693><EFBFBD>?
if [ -z "$BACKEND_SERVICE_HOST" ]; then
echo "<22>?ERROR: BACKEND_SERVICE_HOST environment variable is required!"
exit 1
fi
if [ -z "$BACKEND_SERVICE_PORT" ]; then
export BACKEND_SERVICE_PORT=3001 # 暺䁅恕<E48185>?
fi
# 雿輻鍂envsubst<73><EFBFBD><E586BD>𤜯<EFBFBD><EFBFBD>蝵?
envsubst '${BACKEND_SERVICE_HOST} ${BACKEND_SERVICE_PORT}' \
< /etc/nginx/templates/nginx.conf.template \
> /etc/nginx/nginx.conf
# <20>臬𢆡Nginx
exec nginx -g 'daemon off;'
```
**3. nginx.conf**嚗<><EFBFBD><EFBFBD><E585B8><EFBFBD>雿滨泵嚗㚁<E59A97>
```nginx
upstream backend {
server ${BACKEND_SERVICE_HOST}:${BACKEND_SERVICE_PORT} fail_timeout=30s max_fails=3;
keepalive 32;
}
server {
listen 80;
root /usr/share/nginx/html;
# API<50><EFBFBD><EFBFBD><E99A9E>
location /api/ {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# ...
}
# SPA頝舐眏<E88890><EFBFBD>
location / {
try_files $uri $uri/ /index.html;
}
}
```
#### <20><><EFBFBD>𨅯<EFBFBD>
```bash
# <20><><EFBFBD>𨅯<EFBFBD>
docker build -t ai-clinical_frontend-nginx:v1.0 .
# 蝑匧<E89D91><E58CA7><EFBFBD>遣摰峕<E691B0><EFBFBD>漲10<31><30><EFBFBD>嚗?
# 蝚砌<E89D9A><E7A08C>嗆挾隡𡁏<E99AA1>撱摧eact摨𠉛鍂嚗𣬚洵鈭屸𧫴畾菜<E795BE><E88F9C><EFBFBD><EFBFBD>Nginx
```
#### <20>砍𧑐瘚贝<E7989A>
```bash
# 餈鞱<E9A488>摰孵膥
docker run -d -p 3000:80 \
-e BACKEND_SERVICE_HOST=host.docker.internal \
-e BACKEND_SERVICE_PORT=3001 \
--name frontend-test \
ai-clinical_frontend-nginx:v1.0
# 霈輸䔮<E8BCB8>滨垢
open http://localhost:3000
# <20>?
curl http://localhost:3000
# <20>𨀣迫摰孵膥
docker stop frontend-test
docker rm frontend-test
```
#### <20><EFBFBD><E588B8><EFBFBD>ACR
```bash
# <20>𤘪<EFBFBD>蝑?
docker tag ai-clinical_frontend-nginx:v1.0 \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0
# <20><EFBFBD><E588B8><EFBFBD><EFBFBD>?
docker push \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0
# 蝑匧<E89D91><E58CA7><EFBFBD><E588B8><EFBFBD><EFBFBD><EFBFBD>蝥?<3F><><EFBFBD>嚗屸<E59A97><E5B1B8>讐漲50MB嚗?
```
---
### 5.2 <20>函蔡<E587BD>訕AE嚗?5<><35><EFBFBD>嚗?
**<EFBFBD><EFBFBD>SAE<EFBFBD><EFBFBD><EFBFBD>?*嚗冴ttps://sae.console.aliyun.com/
#### <20>𥕦遣摨𠉛鍂
1. <20>孵稬<E5ADB5>𣂼<EFBFBD>撱箏<E692B1><E7AE8F><EFBFBD>?
2. 摨𠉛鍂<F0A0899B>箸𧋦靽⊥<E99DBD>嚗?
```yaml
摨𠉛鍂<F0A0899B>滨妍: frontend-nginx-service
<20><EFBFBD>蝛粹𡢿: cn-beijing:test-airesearch
# 摰硺<E691B0><EFBFBD>
CPU: 0.5<EFBFBD>?
<20><><EFBFBD>: 1GB
摰硺<E691B0><E7A1BA>? 1
```
3. <20>㗇𥋘<E39787>𨅯<EFBFBD>嚗?
```yaml
<20>𨅯<EFBFBD>蝐餃<E89D90>: 摰孵膥<E5ADB5>𨅯<EFBFBD><F0A885AF>滚𦛚隡<F0A69B9A><E99AA1><EFBFBD>?銝芯犖<E88AAF>?
<20><EFBFBD>: <20>𤾸<EFBFBD>2嚗<32><E59A97>鈭穿<E988AD>
<20><EFBFBD>蝛粹𡢿: ai-clinical
隞枏<E99A9E>: ai-clinical_frontend-nginx
<20>𨅯<EFBFBD><F0A885AF><EFBFBD>𧋦: v1.0
# <20>𨅯<EFBFBD>霈輸䔮<E8BCB8><EFBFBD>
<20><EFBFBD><E586BD>? gofeng117@163.com
<><E69296>: fengzhibo117
```
4. 摨𠉛鍂<F0A0899B>滨蔭嚗?
```yaml
# <20>臬𢆡<E887AC>賭誘
<20>臬𢆡<E887AC>賭誘: <20>嗵征嚗<E5BE81><EFBFBD>汞NTRYPOINT嚗?
# 蝡臬藁<E887AC>滨蔭
摰孵膥蝡臬藁: 80
<20>讛悅: TCP
```
5. <20><EFBFBD><E887AC><EFBFBD><EFBFBD><E59A97>儭?<3F>喲睸<E596B2>滨蔭嚗㚁<E59A97>
```bash
BACKEND_SERVICE_HOST=172.17.173.73 # Node.js<6A>𡒊垢<F0A1928A><E59EA2><EFBFBD>IP
BACKEND_SERVICE_PORT=3001
```
6. 蝵𤑳<E89DB5><F0A491B3>滨蔭嚗?
```yaml
VPC: ai-clinical-vpc
鈭斗揢<E69697>? ai-clinical-vsw-f
摰匧<E691B0>蝏? ai-clinical-sg
```
7. <20>亙熒璉<E78692><E79289><EFBFBD>
```yaml
# 摮䀹暑璉<E69A91><E79289>?
<><E79289>交䲮撘? HTTP
<><E79289>亥楝敺? /health
蝡臬藁: 80
<20><EFBFBD>撱嗉<E692B1>: 10蝘?
<><E79289>仿𡢿<E4BBBF>? 10蝘?
# 撠梁貌璉<E8B28C><E79289>?
<><E79289>交䲮撘? HTTP
<><E79289>亥楝敺? /health
蝡臬藁: 80
<20><EFBFBD>撱嗉<E692B1>: 5蝘?
```
8. <20>孵稬<E5ADB5>霈文<E99C88>撱箝<E692B1>?
#### 蝑匧<E89D91><E58CA7>函蔡摰峕<E691B0>
- <20><EFBFBD><E4BAA6>𣂼<EFBFBD>靘钅<E99D98>蝵脯<E89DB5>煾△<E785BE>?
- <20><EFBFBD><E59786><EFBFBD>銝箝<E98A9D>𪊟unning<6E>𡢅<EFBFBD>蝥?<3F><><EFBFBD>嚗?
- 霈啣<E99C88><E595A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗䫤http://172.17.173.72:80`
#### 撉諹<E69289><E8ABB9>函蔡
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗?
```bash
# <20>?摨磰砲<E7A3B0><EFBFBD>嚗?
============================================
Starting Frontend Nginx Service
Backend Service: 172.17.173.73:3001
============================================
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```
---
## <20><> <20><EFBFBD><E58786>LB韐蠘蝸<E8A098><E89DB8><EFBFBD>滨蔭嚗?0<><30><EFBFBD>嚗?
### 6.1 <20>滨蔭<E6BBA8><EFBFBD>霈輸䔮
**<EFBFBD><EFBFBD>1嚗锭AE<EFBFBD>芸𢆡<EFBFBD>𥕦遣CLB嚗<EFBFBD><EFBFBD><EFBFBD>**
1. 餈𥕦<E9A488>SAE摨𠉛鍂嚗䫤frontend-nginx-service`
2. <20>孵稬<E5ADB5>𣂼<EFBFBD>蝵𤏸挪<F0A48FB8><EFBFBD><EFBFBD><E78390>鞱挪<E99EB1><EFBFBD>蝵柴<E89DB5>騻ab
3. <20>孵稬<E5ADB5>鞉溶<E99E89><EFBFBD>蝵𤏸挪<F0A48FB8><EFBFBD>?
4. <20>滨蔭<E6BBA8><E894AD>㺭嚗?
```yaml
韐蠘蝸<E8A098><E89DB8>﹛蝐餃<E89D90>: <20><EFBFBD>
韐蠘蝸<E8A098><E89DB8>﹛鈭批<E988AD>: CLB (隡删<E99AA1><E588A0><EFBFBD>頧賢<E9A0A7>銵?
隞䁅晶璅<E79285>: <20><EFBFBD>隞䁅晶
# <20>穃𨯬<E7A983>滨蔭
<20>讛悅: HTTP
蝡臬藁: 80
<20>𡒊垢蝡臬藁: 80
# <20>亙熒璉<E78692><E79289>?
<20>亙熒璉<E78692><E79289>? <20>舐鍂
<><E79289>亥楝敺? /health
```
5. <20>孵稬<E5ADB5>摰𠾼<E691B0>?
6. 蝑匧<E89D91>2-3<><33><EFBFBD>嚗諹䌊<E8ABB9><EFBFBD><E585B8><EFBFBD>蝵飡P
**<2A><EFBFBD>2嚗𡁏<E59A97><F0A1818F><EFBFBD>撱慢LB**
1. <20><EFBFBD>CLB<4C><EFBFBD><E689B9><EFBFBD>https://slb.console.aliyun.com/
2. <20>𥕦遣韐蠘蝸<E8A098><E89DB8>﹛摰硺<E691B0>
3. <20>滨蔭<E6BBA8>穃𨯬<E7A983><EFBFBD>HTTP:80嚗?
4. 瘛餃<E7989B><E9A483>𡒊垢<F0A1928A>滚𦛚<E6BB9A><EFBFBD><E58981>滨垢Nginx<6E><78><EFBFBD>蝵飡P嚗?
5. <20>滨蔭<E6BBA8>亙熒璉<E78692><E79289>?
### 6.2 <20><EFBFBD><E79195><EFBFBD><E7A589><EFBFBD>
- <20>沒AE摨𠉛鍂霂行<E99C82>憿菜䰻<E88F9C><EFBFBD>𣂼<EFBFBD>蝵𤏸挪<F0A48FB8>桀𧑐<E6A180><F0A79190><EFBFBD>?
- 蝷箔<E89DB7>嚗䫤http://8.140.53.236/`
- 憭滚<E686AD>甇文𧑐<E69687><F0A79190><EFBFBD><EFBFBD>瘚贝<E7989A>
---
## <20>?銝<><E98A9D><EFBFBD><EFBFBD><EFBFBD>湧曎頝舀<E9A09D>霂𤏪<E99C82>30<33><30><EFBFBD>嚗?
### 7.1 <20><EFBFBD><E7AE87><EFBFBD>瘚贝<E7989A>
#### 瘚贝<E7989A>1嚗𡁜<E59A97>蝡舫△<E888AB><EFBCBA>?
```bash
# 瘚讛<E7989A><E8AE9B>刻挪<E588BB>?
http://8.140.53.236/
# 摨磰砲<E7A3B0><EFBFBD>嚗?
<EFBFBD>?React摨𠉛鍂甇<E98D82><EFBFBD>㰘蝸
<EFBFBD>?憿菟𢒰<E88F9F><EFBFBD><EFBFBD>
<EFBFBD>?瘝⊥<E7989D>CORS<52>躰秤
```
#### 瘚贝<E7989A>2嚗𡁜<E59A97>摨瑟<E691A8><E7919F>?
```bash
# <20>𡒊垢<F0A1928A>亙熒璉<E78692><E79289><EFBFBD><E4BC90><EFBFBD><E69C9E>滨垢隞<E59EA2><E99A9E>嚗?
curl http://8.140.53.236/api/v1/health
# <20>?
curl http://172.17.173.73:3001/health
# 摨磰砲餈𥪜<E9A488>嚗?
{
"status": "ok",
"timestamp": "...",
"services": {
"database": "connected",
"cache": "available",
"queue": "running"
}
}
```
#### 瘚贝<E7989A>3嚗䥪ython<6F>滚𦛚餈墧𦻖
```bash
# <20>湔𦻖瘚贝<E7989A>Python<6F>滚𦛚
curl http://172.17.173.66:8000/api/health
# 摨磰砲餈𥪜<E9A488>嚗?
{
"status": "healthy",
"checks": {
"pymupdf": {"available": true, "version": "1.26.7"},
...
}
}
```
---
### 7.2 銝𡁜𦛚<F0A1819C><EFBFBD>瘚贝<E7989A>
#### 瘚贝<E7989A>1嚗𡁶鍂<F0A181B6>瑞蒈敶?
1. 霈輸䔮 http://8.140.53.236/
2. 颲枏<E9A2B2><E69E8F><EFBFBD><E586BD><EFBFBD><E6BB9A>?
3. <20>孵稬<E5ADB5><EFBFBD>
4. <20><EFBFBD>瘚讛<E7989A><E8AE9B>沐etwork<72>踎嚗?
```
Request URL: http://8.140.53.236/api/v1/auth/login
Status: 200 OK <20>?
Response: { "token": "...", "user": {...} }
```
#### 瘚贝<E7989A>2嚗𡁏㺭<F0A1818F><EFBFBD>瘣埈芋<E59F88><EFBFBD>撌亙<E6928C>C嚗?
1. 餈𥕦<E9A488><F0A595A6>鞉㺭<E99E89><EFBFBD>瘣𨰜<E798A3><EFBFBD> <20>𣂼極<F0A382BC><EFBFBD>?
2. 銝𠹺<E98A9D>Excel<65><6C>
3. 撉諹<E69289>銝𠹺<E98A9D><F0A0B9BA>𣂼<EFBFBD>
4. 瘚贝<E7989A>7憭批<E686AD><E689B9><EFBFBD><EFBFBD><EFBFBD><E59A97>嚗𡁏㺭<F0A1818F><EFBFBD><EFBFBD><E692A0>嚗?
- <20>㗇𥋘<E39787>?
- <20>滨蔭<E6BBA8><EFBFBD><EFBFBD><E996AB>
- <20>孵稬<E5ADB5><EFBFBD>銵峕<E98AB5><EFBFBD><E692A0>?
- <20><EFBFBD>蝏𤘪<E89D8F>
**<2A>喲睸撉諹<E69289>**嚗?
```
瘚讛<EFBFBD><EFBFBD>沐etwork<EFBFBD>踎嚗?
POST http://8.140.53.236/api/v1/dc/tool-c/quick-action
Status: 200 OK <20>?
<EFBFBD>𡒊垢<EFBFBD><EFBFBD>嚗?
[QuickActionService] 靚<><EFBFBD><EFBFBD><E6BBA8><EFBFBD>PI: <20><EFBFBD>
PythonExecutorService initialized: http://172.17.173.66:8000 <20>?
[QuickActionService] <20><EFBFBD><E6BBA8><EFBFBD><EFBFBD><EFBFBD>?<3F>?
```
#### 瘚贝<E7989A>3嚗𡁏<E59A97><F0A1818F><EFBFBD><E6A183>交芋<E4BAA4><EFBFBD>ASL嚗?
1. 餈𥕦<E9A488><F0A595A6><EFBFBD><E99E89><EFBFBD><E6A183><EFBFBD>烐芋<E78390>?
2. <20>𥕦遣憿寧𤌍
3. 銝𠹺<E98A9D><F0A0B9BA><EFBFBD>
4. <20><EFBFBD><E689AF><EFBFBD>蝑𥟇䰻
5. 撉諹<E69289>蝏𤘪<E89D8F>
---
### 7.3 <20><EFBFBD>瘚贝<E7989A>
#### <20><EFBFBD><E6BB9A>園𡢿璉<F0A1A2BF><E79289>?
```bash
# 雿輻鍂curl瘚贝<E7989A><E8B49D><EFBFBD><E6BB9A>園𡢿
curl -w "@-" -o /dev/null -s http://8.140.53.236/ <<'EOF'
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
----------\n
time_total: %{time_total}\n
EOF
# <20><><EFBFBD>蝏𤘪<E89D8F>嚗?
# time_total < 1蝘𡜐<E89D98>擐𡝗活霈輸䔮嚗?
# time_total < 0.3蝘𡜐<EFBFBD><EFBFBD>𡒊賒霈輸䔮嚗?
```
---
## <20><> <20><EFBFBD><E68092><EFBFBD>蝵脫<E89DB5><E884AB>𨀣<EFBFBD><EFBFBD>
### 8.1 撌脤<E6928C>蝵脫<E89DB5><E884AB><EFBFBD><E28AA5>?
| <20>滚𦛚 | <20><EFBFBD>?| <20><><EFBFBD><EFBFBD><EFBFBD> | <20><EFBFBD>霈輸䔮 |
|------|------|---------|---------|
| RDS PostgreSQL | <20>?| pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432 | <20>?|
| Python敺格<E695BA><E6A0BC>?| <20>?| 172.17.173.66:8000 | <20>?|
| Node.js<6A>𡒊垢 | <20>?| 172.17.173.73:3001 | <20>?|
| <20>滨垢Nginx | <20>?| 172.17.173.72:80 | <20>?|
| CLB韐蠘蝸<E8A098><E89DB8>﹛ | <20>?| - | http://8.140.53.236/ |
### 8.2 <20>喲睸<E596B2>滨蔭<E6BBA8><E894AD>
#### Python敺格<E695BA><E6A0BC>∠㴓憓<E3B493><E68693><EFBFBD>?
```bash
LOG_LEVEL=INFO
TEMP_DIR=/tmp/extraction_service
```
#### Node.js<6A>𡒊垢<F0A1928A>喲睸<E596B2><EFBFBD><E887AC><EFBFBD>
```bash
NODE_ENV=production
PORT=3001
DATABASE_URL=postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research
EXTRACTION_SERVICE_URL=http://172.17.173.66:8000 # <20>𩤃<EFBFBD> <20>喲睸嚗<E79DB8><E59A97><EFBFBD>烈YTHON_SERVICE_URL
```
#### <20>滨垢Nginx<6E>喲睸<E596B2><EFBFBD><E887AC><EFBFBD>
```bash
BACKEND_SERVICE_HOST=172.17.173.73 # Node.js<6A>𡒊垢<F0A1928A><E59EA2><EFBFBD>IP
BACKEND_SERVICE_PORT=3001
```
---
## <20>𩤃<EFBFBD> 銋腈<E98A8B><E88588><EFBFBD><EFBFBD><EFBFBD>撉䔶<E69289>瘜冽<E7989C>鈭钅★
### 9.1 <20><EFBFBD><E887AC><EFBFBD><E3979B><EFBFBD>憿餌移蝖?
**<2A><EFBFBD>**嚗𡁜極<F0A1819C><EFBFBD>?憭批<E686AD><E689B9><EFBFBD><E8B3A2>冽𥁒<E586BD>?
```
connect ECONNREFUSED 127.0.0.1:8000
```
**<2A><EFBFBD>**嚗鐭ode.js隞<73><E99A9E>雿輻鍂 `EXTRACTION_SERVICE_URL`嚗䔶<E59A97>SAE<41>滨蔭鈭?`PYTHON_SERVICE_URL`
**閫<><E996AB>**嚗?
```bash
# <20>?<3F>躰秤
PYTHON_SERVICE_URL=http://172.17.173.66:8000
# <20>?甇<>
EXTRACTION_SERVICE_URL=http://172.17.173.66:8000
```
**<2A>躰悌**嚗𡁶㴓憓<E3B493><E68693><EFBFBD><EFBFBD><EFBFBD>◆銝𦒘誨<F0A69298><E8AAA8><EFBFBD><EFBFBD><EFBFBD><E585B6><EFBFBD><EFBFBD>銝芸<E98A9D>瘥漤<E798A5>銝滩<E98A9D><E6BBA9><EFBFBD>
---
### 9.2 "<22>滚鍳摨𠉛鍂" vs "<22>函蔡摨𠉛鍂"
**<2A><EFBFBD>**嚗𡁶<E59A97><F0A181B6>?<3F>函蔡摨𠉛鍂"撖潸稲IP<49><EFBFBD><E595A3>䀹凒
| <20><EFBFBD> | <20><EFBFBD>?| IP<49>臬炏<E887AC>?| 雿閙𧒄雿輻鍂 |
|------|------|---------|---------|
| **<2A>滚鍳摨𠉛鍂** | <20>滚鍳摰孵膥 | <20>?銝滢<E98A9D> | 靽格㺿<E6A0BC><EFBFBD><E887AC><EFBFBD><E3979B>?|
| **<2A>函蔡摨𠉛鍂** | <20>湔鰵<E6B994>𨅯<EFBFBD> | <20>?隡𡁜<E99AA1> | <20>湔鰵隞<E9B0B5><E99A9E>/<2F>𨅯<EFBFBD><F0A885AF>?|
**<2A>躰悌**嚗?
- <20>芯耨<E88AAF>寧㴓憓<E3B493><E68693><EFBFBD>?<3F>?<3F>?<3F>滚鍳摨𠉛鍂"
- <20>湔鰵隞<E9B0B5><E99A9E>/<2F>𨅯<EFBFBD> <20>?<3F>?<3F>函蔡摨𠉛鍂"
---
### 9.3 Dockerfile敹<65><EFBFBD><E29786>鉄config<69><EFBFBD>
**<2A><EFBFBD>**嚗?
```
ENOENT: no such file or directory, open '/app/config/agents.yaml'
```
**閫<><E996AB>**嚗?
```dockerfile
# <20>?敹<>◆瘛餃<E7989B>
COPY config ./config
```
---
### 9.4 pino-pretty隞<79>鍂鈭𤾸<E988AD><F0A4BEB8>𤑳㴓憓?
**<2A><EFBFBD>**嚗?
```
Error: unable to determine transport target for "pino-pretty"
```
**<2A><EFBFBD>**嚗䫤pino-pretty`<EFBFBD>留evDependencies嚗𣬚<EFBFBD>鈭抒㴓憓<EFBFBD><EFBFBD><EFBFBD>鋆?
**閫<><E996AB>**嚗𡁏辺隞嗅ế<E59785>剔㴓憓?
```typescript
logger: config.nodeEnv === 'production'
? { level: config.logLevel }
: { level: config.logLevel, transport: { target: 'pino-pretty', ... } }
```
---
### 9.5 ES Module<6C>澆捆<E6BE86>?
**<EFBFBD><EFBFBD>**嚗?
```
ReferenceError: require is not defined in ES module
```
**閫<><E996AB>**嚗?
```typescript
// <20>?<3F>躰秤
require('os').loadavg()
// <20>?甇<>
import os from 'os';
os.loadavg()
```
---
### 9.6 Alpine Linux瘝⊥<E7989D>bash
**<EFBFBD><EFBFBD>**嚗?
```
executable '/bin/bash' not found in $PATH
```
**閫<><E996AB>**嚗?
- SAE<41>臬𢆡<E887AC>賭誘<E8B3AD>嗵征
- <20>碶蝙<E7A2B6>?`/bin/sh`<>𤜯
---
### 9.7 <20>唳旿摨𡤃RL銝剔<E98A9D>@蝚血噡
**<EFBFBD><EFBFBD>**嚗?
```bash
# <20>?甇<>嚗㇎RL蝻𣇉<E89DBB>嚗?
DATABASE_URL=postgresql://airesearch:Xibahe%40fengzhibo117@pgm-xxx.pg.rds.aliyuncs.com:5432/ai_clinical_research
# <20>?<3F>躰秤嚗<E7A7A4>𧊋蝻𣇉<E89DBB>嚗?
DATABASE_URL=postgresql://airesearch:Xibahe@fengzhibo117@pgm-xxx.pg.rds.aliyuncs.com:5432/ai_clinical_research
```
**閫<><E996AB>**嚗𡁜<E59A97><F0A1819C><EFBFBD><EFBFBD>?`@`<>◆蝻𣇉<E89DBB>銝?`%40`
---
### 9.8 雿輻鍂VPC<50>𨅯<EFBFBD><F0A885AF><EFBFBD>嚗𠄎AE<41><EFBFBD>嚗?
**SAE<41>函蔡<E587BD><EFBFBD>㗇𥋘<E39787>𨅯<EFBFBD>**嚗?
```bash
# <20>?甇<>嚗ĀPC<50><EFBFBD><EFBFBD><E59A97><EFBFBD><E7989A>韐對<E99F90>
crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.3
# <20>?銝齿綫<E9BDBF><EFBFBD><E7909C><EFBFBD><E7A589><EFBFBD>嚗峕𤣰瘚<F0A4A3B0><E7989A>韐對<E99F90>
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.3
```
**閫<><E996AB>**嚗?
- <20>砍𧑐<E7A08D><EFBFBD><E588B8><EFBFBD><EFBFBD>?<3F>?雿輻鍂<E8BCBB><EFBFBD><E7A589><EFBFBD>
- SAE<41><EFBFBD><E58CA7>𨅯<EFBFBD> <20>?雿輻鍂VPC<50><EFBFBD>
---
### 9.9 <20>亙熒璉<E78692><E79289><EFBFBD>憪见辣餈?
**銝滚<E98A9D><E6BB9A>滚𦛚<E6BB9A><F0A69B9A><EFBFBD>冽𧒄<E586BD>?*嚗?
| <20>滚𦛚 | <20>臬𢆡<E887AC>園𡢿 | <20><EFBFBD>撱嗉<E692B1>撱箄悅 |
|------|---------|-------------|
| Python敺格<E695BA><E6A0BC>?| 10蝘?| 30蝘?|
| Node.js<6A>𡒊垢 | 30蝘?| 60蝘?|
| <20>滨垢Nginx | 5蝘?| 10蝘?|
**<EFBFBD>躰悌**嚗鐭ode.js<6A>臬𢆡颲<F0A286A1><E9A2B2>嚗屸<E59A97><EFBFBD><EFBFBD><EFBFBD><E8BCBB><EFBFBD>撱嗉<E692B1>
---
### 9.10 <20>滨垢<E6BBA8><EFBFBD><E586BD><EFBFBD>蝵桀<E89DB5>蝡臬𧑐<E887AC><F0A79190>
**<EFBFBD><EFBFBD>隡睃飵**嚗?
- <20>滨垢雿輻鍂<E8BCBB><EFBFBD><E887AC><EFBFBD> `BACKEND_SERVICE_HOST`
- <20><EFBFBD> `envsubst` <20>典捆<E585B8>典鍳<E585B8>冽𧒄<E586BD><EFBFBD><E586BD><EFBFBD>?
- <20>𡒊垢IP<49>䀹凒<E480B9><EFBFBD><E5A19A><EFBFBD><E88AB7>滚鍳<E6BB9A>滨垢摨𠉛鍂嚗峕<E59A97><E5B395><EFBFBD><EFBFBD>齿鰵<E9BDBF><E9B0B5><EFBFBD>𨅯<EFBFBD>
**<EFBFBD>喲睸<EFBFBD><EFBFBD>辣**嚗?
- `docker-entrypoint.sh`嚗𡁜𢆡<EFBFBD><EFBFBD>𤜯<EFBFBD><EFBFBD>蝵?
- `nginx.conf`嚗帋蝙<EFBFBD>?`${BACKEND_SERVICE_HOST}` <20><EFBFBD>蝚?
---
## <20><> <20><><EFBFBD><EFBFBD>𧊋<EFBFBD><EFBFBD><E4B9A9>硋遣霈?
### 10.1 雿輻鍂<E8BCBB>滚𦛚<E6BB9A>𤑳緵隞<E7B7B5>𤜯IP<49><EFBFBD>
**敶枏<E695B6><E69E8F>滨蔭**嚗<><EFBFBD>沉P嚗㚁<E59A97>
```bash
BACKEND_SERVICE_HOST=172.17.173.73
EXTRACTION_SERVICE_URL=http://172.17.173.66:8000
```
**隡睃<E99AA1><E79D83><EFBFBD>**嚗<><EFBFBD><EFBFBD><E586BD><EFBFBD>嚗㚁<E59A97>
```bash
BACKEND_SERVICE_HOST=nodejs-backend-test.cn-beijing:test-airesearch.svc.cluster.local
EXTRACTION_SERVICE_URL=http://python-extraction-test.cn-beijing:test-airesearch.svc.cluster.local:8000
```
**隡条<E99AA1>**嚗?
- <20>?IP<49>䀹凒銝滚蔣<E6BB9A><EFBFBD>帋縑
- <20>?<3F>芸𢆡韐蠘蝸<E8A098><E89DB8>
- <20>?<3F>渡迅摰𡁜虾<F0A1819C>?
---
### 10.2 <20>滨蔭HTTPS
**甇仿炊**嚗?
1. <20>唾窈<E594BE><EFBFBD>
2. <20>唾窈SSL霂<4C>髡嚗<E9ABA1><EFBFBD><EFBFBD><E494B6>滩晶霂<E699B6><EFBFBD>譩et's Encrypt嚗?
3. <20>每LB<4C>滨蔭HTTPS<50>穃𨯬嚗<F0A8AFAC><EFBFBD>?43嚗?
4. 銝𠹺<E98A9D>SSL霂<4C>
5. <20>滨蔭HTTP<54>芸𢆡頝唾蓮HTTPS
---
### 10.3 <20>滨蔭<E6BBA8>芸𢆡<E88AB8>拍憬摰?
**SAE撘寞<E69298>找撓蝻?*嚗?
```yaml
# <20>寞旿CPU雿輻鍂<E8BCBB><E98D82><EFBFBD><EFBFBD>蝻拙捆
<EFBFBD><EFBFBD>撠誩<EFBFBD>靘𧢲㺭: 1
<EFBFBD><EFBFBD>憭批<EFBFBD>靘𧢲㺭: 3
<EFBFBD><EFBFBD>CPU雿輻鍂<EFBFBD>? 70%
```
**<EFBFBD><EFBFBD><EFBFBD>箸艶**嚗?
-<><E7989A>𢆡憭?
- 擃睃陸<E79D83><EFBFBD><EFBFBD>凒憭𡁜<E686AD>靘?
- 雿𤾸陸<F0A4BEB8><EFBFBD>蝥行<E89DA5><E8A18C>?
---
### 10.4 <20>滨蔭<E6BBA8><EFBFBD><E4BA99><EFBFBD><EFBFBD>
**<EFBFBD><EFBFBD>鈭騌LS嚗<EFBFBD>𠯫敹埈<EFBFBD><EFBFBD><EFBFBD>**嚗?
- <20>芸𢆡<E88AB8><EFBFBD>SAE<41><EFBFBD>
- 摰墧𧒄<E5A2A7>亥砭<E4BAA5><E7A0AD><EFBFBD><EFBFBD>?
- <20>滨蔭<E6BBA8>𡃏郎閫<E9838E><E996AB>
---
### 10.5 <20>滨蔭<E6BBA8>烐綉<E78390>𡃏郎
**鈭𤑳<E988AD><F0A491B3><EFBFBD>蝵?*嚗?
```yaml
CPU雿輻鍂<EFBFBD>?> 80% <20>?<3F>𡃏郎
<EFBFBD><EFBFBD><EFBFBD>雿輻鍂<EFBFBD>?> 80% <20>?<3F>𡃏郎
<EFBFBD>亙熒璉<EFBFBD><EFBFBD>亙仃韐? <20>?<3F>𡃏郎
<EFBFBD>躰秤<EFBFBD><EFBFBD>憓𧼮<EFBFBD> <20>?<3F>𡃏郎
```
---
## <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>笔𦶢隞文<E99A9E><E69687>?
### 11.1 Docker<65>𨅯<EFBFBD>蝞∠<E89D9E>
```bash
# <20><EFBFBD>ACR
docker login --username=gofeng117@163.com \
--password=fengzhibo117 \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com
# <20><>遣撟嗆綫<E59786><E7B6AB>ython<6F>𨅯<EFBFBD>
cd AIclinicalresearch/extraction_service
docker build -t python-extraction:v1.0 .
docker tag python-extraction:v1.0 \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0
# <20><>遣撟嗆綫<E59786><E7B6AB>ode.js<6A>𨅯<EFBFBD>
cd ../backend
npm run build
docker build -t backend-service:v1.3 .
docker tag backend-service:v1.3 \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.3
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/backend-service:v1.3
# <20><>遣撟嗆綫<E59786><E7B6AB><EFBFBD>蝡舫<E89DA1><E888AB>?
cd ../frontend-v2
docker build -t ai-clinical_frontend-nginx:v1.0 .
docker tag ai-clinical_frontend-nginx:v1.0 \
crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0
docker push crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.0
```
---
### 11.2 <20>唳旿摨栞<E691A8><E6A09E>?
```bash
# 餈墧𦻖<E5A2A7>訌DS嚗<53><EFBFBD><EFBFBD><E59785><EFBFBD>蝵𡢅<E89DB5>
docker exec -e PGPASSWORD="Xibahe@fengzhibo117" \
ai-clinical-postgres psql \
-h pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com \
-p 5432 -U airesearch -d ai_clinical_research
# <20><EFBFBD>Schema<6D>𡑒”
docker exec -e PGPASSWORD="Xibahe@fengzhibo117" \
ai-clinical-postgres psql \
-h pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com \
-p 5432 -U airesearch -d ai_clinical_research \
-c "SELECT nspname FROM pg_namespace WHERE nspname LIKE '%_schema';"
```
---
### 11.3 <20>亙熒璉<E78692><E79289>?
```bash
# Python<6F>滚𦛚
curl http://172.17.173.66:8000/api/health
# Node.js<6A>𡒊垢
curl http://172.17.173.73:3001/health
# <20>滨垢Nginx
curl http://172.17.173.72:80/health
# <20><EFBFBD>霈輸䔮
curl http://8.140.53.236/
```
---
## <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵脣<E89DB5><E884A3><EFBFBD><E99E89><EFBFBD><E4BAA4>?
### <20><><EFBFBD><E89D8F>霂?
- [ ] <20>?Python敺格<E695BA><E6A0BC><EFBFBD>摨瑟<E691A8><E7919F>仿<EFBFBD><EFBFBD>
- [ ] <20>?Node.js<6A>𡒊垢<F0A1928A>亙熒璉<E78692><E79289>仿<EFBFBD><EFBFBD>
- [ ] <20>?<3F>滨垢Nginx<6E>亙熒璉<E78692><E79289>仿<EFBFBD><EFBFBD>
- [ ] <20>?<3F><EFBFBD><E7A589><EFBFBD><E595A3>臭誑霈輸䔮
- [ ] <20>?<3F><EFBFBD><E586BD>臭誑甇<E8AA91><EFBFBD><EFBFBD>
- [ ] <20>?<3F><>讃蝑𥟇䰻<F0A59F87><EFBFBD><EFBFBD>
- [ ] <20>?<3F>唳旿皜<E697BF><E79A9C>撌亙<E6928C>C<EFBFBD>?憭批<E686AD><E689B9>賣迤撣?
- [ ] <20>?<3F><>辣銝𠹺<E98A9D><F0A0B9BA><EFBFBD><EFBFBD>
- [ ] <20>?AI撖寡<E69296><E5AFA1><EFBFBD><EFBFBD>
- [ ] <20>?瘝⊥<E7989D>CORS<52>躰秤
- [ ] <20>?瘝⊥<E7989D>502/504<30>躰秤
- [ ] <20>?<3F><EFBFBD><E6BB9A>園𡢿 < 1蝘?
### <20><><EFBFBD>湔鰵
- [ ] <20>湔鰵 `00-<2D>函蔡餈𥕦漲<F0A595A6><EFBFBD>.md` 銝剔<E98A9D><E58994><EFBFBD><EFBFBD>IP<49><EFBFBD>
- [ ] 霈啣<E99C88><E595A3><EFBFBD>霈輸䔮<E8BCB8><EFBFBD>
- [ ] 霈啣<E99C88><E595A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䔮憸睃<E686B8><EFBFBD><E996AB><EFBFBD><EFBFBD>
- [ ] <20>湔鰵<E6B994><EFBFBD><E887AC><EFBFBD><EFBFBD><E79A9C>
---
## <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>舀𣈲<E88880>?
### 撣貉<E692A3><E8B289><EFBFBD><E6A185>埝䰻
**<EFBFBD><EFBFBD>1嚗𡁜極<EFBFBD><EFBFBD><EFBFBD><EFBFBD>仿<EFBFBD> "connect ECONNREFUSED 127.0.0.1:8000"**
-<><E79289>代ode.js<6A><EFBFBD><E887AC><EFBFBD> `EXTRACTION_SERVICE_URL`
- 蝖桐<E89D96><E6A190>潔蛹 `http://172.17.173.66:8000`
- <20>滚鍳Node.js摨𠉛鍂
**<EFBFBD><EFBFBD>2嚗𡁜<EFBFBD>蝡航挪<EFBFBD><EFBFBD>蝡舀𥁒502<EFBFBD>躰秤**
-<><E79289><EFBFBD>蝡舐㴓憓<E3B493><E68693><EFBFBD>?`BACKEND_SERVICE_HOST`
- 蝖桐<E89D96><E6A190>潔蛹Node.js<6A>𡒊垢<F0A1928A><E59EA2><EFBFBD>蝵飡P
- <20>滚鍳<E6BB9A>滨垢摨𠉛鍂
**<EFBFBD><EFBFBD>3嚗锭AE摨𠉛鍂<EFBFBD>臬𢆡憭梯揖**
- <20><EFBFBD>摰硺<E691B0><E7A1BA><EFBFBD>嚗峕𪄳<E5B395><EFBFBD>雿㯄<E99BBF>霂臭縑<E887AD>?
- <20><><EFBFBD><EFBFBD>𧋦<EFBFBD><F0A78BA6>﹝蝚?<3F>?<3F>喲睸蝏誯<E89D8F>銝擧釣<E693A7><EFBFBD>憿?
- 撖寧<E69296><EFBFBD><E79289>主ockerfile<6C>𣬚㴓憓<E3B493><E68693><EFBFBD>?
---
## <20><20><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撌脩<EFBFBD>摰峕<EFBFBD><EFBFBD>I銝游<EFBFBD><EFBFBD>𠉛弦撟喳蝱<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵莎<EFBFBD>
**<EFBFBD>函蔡<EFBFBD><EFBFBD>**嚗?
- <20>?4銝芣<E98A9D><E88AA3><EFBFBD><E288AA><EFBFBD><E586BD><EFBFBD>蝵莎<E89DB5>Python<6F><6E>ode.js<6A><73><EFBFBD>蝡胯<E89DA1><E883AF><EFBFBD><EFBFBD>嚗?
- <20>?<3F><><EFBFBD><EFBFBD><E58CA7>賣迤撣貉<E692A3>銵?
- <20>?<3F><EFBFBD><E7A589>臭誑霈輸䔮
- <20>?<3F>煺漣<E785BA><EFBFBD>撠梁貌
**<EFBFBD>函蔡<EFBFBD>園𡢿**嚗?
-<><EFBFBD>園𡢿嚗?.5撠𤩺𧒄
- 摰鮋<E691B0><E9AE8B>園𡢿嚗𡁶漲6撠𤩺𧒄嚗<F0A79284><E59A97><EFBFBD>恍䔮憸䀹<E686B8><E480B9><EFBFBD>
**<EFBFBD>喲睸蝏誯<EFBFBD>**嚗?
- <20><EFBFBD><E887AC><EFBFBD><E3979B><EFBFBD>憿餌移蝖桀龪<E6A180>?
- <20><EFBFBD>"<22>滚鍳摨𠉛鍂"<22>?<3F>函蔡摨𠉛鍂"
- Dockerfile敹<65><EFBFBD><E29786><EFBFBD><E98984><EFBFBD><EFBFBD><E58CA7><EFBFBD><EFBFBD><EFBFBD>
- 雿輻鍂VPC<50><EFBFBD><E595A3><EFBFBD><E58CA7>𨅯<EFBFBD>
- <20>亙熒璉<E78692><E79289><EFBFBD>憪见辣餈蠘<E9A488>頞喳<E9A09E>
**銝衤<E98A9D>甇?*嚗?
- <20>滨蔭HTTPS
- 蝏穃<E89D8F><E7A983><EFBFBD>
- <20>滨蔭<E6BBA8>烐綉<E78390>𡃏郎
- 隡睃<E99AA1><E79D83><EFBFBD>
- <20>滨蔭<E6BBA8>芸𢆡憭<F0A286A1>
---
> **<2A><>﹝蝏湔擪**嚗𡁏𧋦<F0A1818F><F0A78BA6><EFBFBD><EFBFBD>2025-12-25摰鮋<E691B0><E9AE8B>函蔡蝏誩<E89D8F>蝻硋<E89DBB>嚗諹窈<E8ABB9>寞旿摰鮋<E691B0><E9AE8B><EFBFBD><EFBFBD><EFBFBD>湔鰵
> **<2A><><EFBFBD>擧凒<E693A7>?*嚗?025-12-25
> **<2A>函蔡<E587BD><EFBFBD>?*嚗尠<E59A97><><E691B0><EFBFBD>𣂼<EFBFBD>