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%)
40 KiB
AI銝游<EFBFBD><EFBFBD>𠉛弦撟喳蝱 - 摰峕㟲<E5B395>函蔡摰墧<E691B0><E5A2A7>见<EFBFBD>嚗?025<32><35><EFBFBD>
<EFBFBD><EFBFBD>﹝<EFBFBD><EFBFBD>𧋦嚗鯝1.0嚗<EFBFBD><EFBFBD><EFBFBD>条<EFBFBD>嚗? **<2A>𥕦遣<F0A595A6>交<EFBFBD>**嚗?025-12-25
<EFBFBD>箔<EFBFBD>摰鮋<EFBFBD><EFBFBD>函蔡嚗?025-12-24 ~ 2025-12-25 摰峕㟲<E5B395>函蔡蝏誩<E89D8F>
<EFBFBD>函蔡<EFBFBD>𣂼<EFBFBD><EFBFBD>園𡢿嚗𡁶漲6撠𤩺𧒄嚗<EFBFBD><EFBFBD><EFBFBD>恍䔮憸䀹<EFBFBD><EFBFBD>伐<EFBFBD>
**<2A>函蔡鈭箏<E988AD>**嚗𡁜<E59A97><F0A1819C>穃𣪧<E7A983>? **<2A>函蔡蝏𤘪<E89D8F>**嚗尠<E59A97> 摰<><E691B0><EFBFBD>𣂼<EFBFBD>嚗峕<E59A97><E5B395>匧<EFBFBD><E58CA7>賣迤撣貉<E692A3>銵?
<EFBFBD><EFBFBD> <20><>﹝霂湔<E99C82>
<EFBFBD>祆<EFBFBD>獢<EFBFBD><EFBFBD><EFBFBD>寧<EFBFBD>
- <EFBFBD>?**<2A>箔<EFBFBD><E7AE94>笔<EFBFBD><E7AC94>函蔡蝏誩<E89D8F>**嚗朞扇敶蓥<E695B6>2025撟?2<><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵脩<E89DB5>摰峕㟲餈<E39FB2><E9A488>
- <EFBFBD>?**<2A><>鉄<EFBFBD><E98984><EFBFBD>匧<EFBFBD><E58CA7>?*嚗𡁻<E59A97><F0A181BB>啁<EFBFBD>4銝芸<E98A9D><E88AB8>桅䔮憸睃<E686B8>閫<EFBFBD><E996AB><EFBFBD>寞<EFBFBD>
- <EFBFBD>?**蝏誯<E89D8F><E8AAAF>餌<EFBFBD>**嚗𡁏<E59A97><F0A1818F>澆枂<E6BE86><E69E82><EFBFBD>雿喳<E99BBF>頝萄<E9A09D>瘜冽<E7989C>鈭钅★
- <EFBFBD>?**<2A>舐凒<E88890>亙<EFBFBD><E4BA99>?*嚗𡁏<E59A97><F0A1818F>厰<EFBFBD>蝵桀<E89DB5><E6A180>賭誘<E8B3AD>賜<EFBFBD>餈<EFBFBD><E9A488>霂?
- <EFBFBD>?**<2A><><EFBFBD>敹恍<E695B9>罸<EFBFBD>蝵?*嚗朞<E59A97><E69C9E><EFBFBD><EFBFBD>𡁜停<F0A1819C>賣<EFBFBD><E8B3A3>?
銝𤾸<EFBFBD>隞𡝗<EFBFBD>獢<EFBFBD><EFBFBD><EFBFBD>喟頂
| <EFBFBD><EFBFBD>﹝<EFBFBD>滨妍 | <EFBFBD>券<EFBFBD>? | 雿閙𧒄雿輻鍂 |
|---|---|---|
| *<EFBFBD>祆<EFBFBD>獢? | 摰墧<EFBFBD><EFBFBD>函蔡摰峕㟲瘚<EFBFBD><EFBFBD> | 潃?<3F>圈<EFBFBD>蝵脫<E89DB5><E884AB>齿鰵<E9BDBF>函蔡<E587BD>? |
01-敹恍<E695B9>罸<EFBFBD>蝵淞OP-<2D>嗅抅蝖<E68A85><E89D96>?md |
<EFBFBD>嗅抅蝖<EFBFBD>摰峕㟲<EFBFBD><EFBFBD><EFBFBD> | 隞𡡞妟撘<EFBFBD>憪见郎銋䭾𧒄 |
00-<2D>函蔡餈𥕦漲<F0A595A6>餉<EFBFBD>.md |
韏<EFBFBD><EFBFBD><EFBFBD><EFBFBD>䰻蝝W<EFBFBD> | <EFBFBD>亥砭韏<EFBFBD><EFBFBD>靽⊥<EFBFBD><EFBFBD>? |
12-Node.js<6A>𡒊垢-SAE<41>函蔡<E587BD>滢<EFBFBD><E6BBA2>见<EFBFBD>.md |
<EFBFBD>閙<EFBFBD><EFBFBD>⊿<EFBFBD>蝵? | <EFBFBD>芷<EFBFBD>蝵脫<EFBFBD>銝芣<EFBFBD><EFBFBD>⊥𧒄 |
<EFBFBD>㴓 <20>函蔡<E587BD>嗆<EFBFBD><E59786>餉<EFBFBD>
<EFBFBD>冽<EFBFBD>瘚讛<EFBFBD><EFBFBD>?
<20>?HTTPS (<28>祉<EFBFBD>)
CLB韐蠘蝸<E8A098><E89DB8>﹛<EFBFBD>?(<28>祉<EFBFBD>IP: 8.140.53.236)
<20>?HTTP (<28><><EFBFBD>)
<0A>滨垢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<6F>滚𦛚 (SAE: 172.17.173.66:8000)
<20>?SQL (<28><><EFBFBD>)
RDS PostgreSQL (<28><><EFBFBD>: pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432)
**<2A>喲睸靘肽<E99D98>**嚗?
- <EFBFBD><EFBFBD><EFBFBD>㗇<EFBFBD><EFBFBD>∪銁<EFBFBD>䔶<EFBFBD>銝杼PC<EFBFBD><EFBFBD><EFBFBD>嚗Ǒ172.17.0.0/16`嚗?
- 雿輻鍂NAT蝵穃<EFBFBD>霈輸䔮憭𣇉<EFBFBD>嚗<EFBFBD><EFBFBD><EFBFBD>㚚<EFBFBD><EFBFBD>譌<EFBFBD><EFBFBD><EFBFBD><EFBFBD>汪LM API嚗?
- CLB蝏穃<EFBFBD><EFBFBD>滨垢嚗峕<EFBFBD>靘𥕦<EFBFBD>蝵𤏸挪<EFBFBD>?
<EFBFBD><EFBFBD> <20>函蔡憿箏<E686BF>嚗<EFBFBD>艇<EFBFBD>潭<EFBFBD>憿箏<E686BF><E7AE8F>扯<EFBFBD>嚗?
| 甇仿炊 | <EFBFBD>滚𦛚 | 憸<EFBFBD>恣<EFBFBD>園𡢿 | 靘肽<EFBFBD>憿? |
|---|---|---|---|
| 1儭謿<EFBFBD> | VPC蝵𤑳<EFBFBD> + NAT蝵穃<E89DB5> | 15<EFBFBD><EFBFBD><EFBFBD> | <EFBFBD>? |
| 2儭謿<EFBFBD> | RDS PostgreSQL | 30<EFBFBD><EFBFBD><EFBFBD> | VPC |
| 3儭謿<EFBFBD> | OSS撖寡情摮睃<EFBFBD> | 10<EFBFBD><EFBFBD><EFBFBD> | <EFBFBD>? |
| 4儭謿<EFBFBD> | ACR摰孵膥<EFBFBD>𨅯<EFBFBD>隞枏<EFBFBD> | 10<EFBFBD><EFBFBD><EFBFBD> | <EFBFBD>? |
| 5儭謿<EFBFBD> | Python敺格<EFBFBD><EFBFBD>⊿<EFBFBD><EFBFBD>𤩺<EFBFBD>撱? | 20<EFBFBD><EFBFBD><EFBFBD> | ACR |
| 6儭謿<EFBFBD> | Python敺格<EFBFBD><EFBFBD>⊿<EFBFBD>蝵脣<EFBFBD>SAE | 15<EFBFBD><EFBFBD><EFBFBD> | VPC, ACR |
| 7儭謿<EFBFBD> | Node.js<6A>𡒊垢<F0A1928A>𨅯<EFBFBD><F0A885AF><EFBFBD>遣 | 30<EFBFBD><EFBFBD><EFBFBD> | ACR, RDS |
| 8儭謿<EFBFBD> | Node.js<6A>𡒊垢<F0A1928A>函蔡<E587BD>訕AE | 20<EFBFBD><EFBFBD><EFBFBD> | VPC, ACR, RDS, Python |
| 9儭謿<EFBFBD> | <EFBFBD>滨垢Nginx<EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD>遣 | 15<EFBFBD><EFBFBD><EFBFBD> | ACR |
| <EFBFBD><EFBFBD> | <EFBFBD>滨垢Nginx<EFBFBD>函蔡<EFBFBD>訕AE | 15<EFBFBD><EFBFBD><EFBFBD> | VPC, ACR, Node.js |
| 1儭謿<EFBFBD>1儭謿<EFBFBD> | CLB韐蠘蝸<EFBFBD><EFBFBD>﹛<EFBFBD>? | 10<EFBFBD><EFBFBD><EFBFBD> | <EFBFBD>滨垢Nginx |
| 1儭謿<EFBFBD>2儭謿<EFBFBD> | <EFBFBD>券曎頝舀<EFBFBD>霂閖<EFBFBD>霂? | 30<EFBFBD><EFBFBD><EFBFBD> | <EFBFBD><EFBFBD><EFBFBD>㗇<EFBFBD><EFBFBD>? |
<EFBFBD>餉恣嚗𡁶漲3.5撠𤩺𧒄嚗<EFBFBD><EFBFBD><EFBFBD>恍䔮憸䀹<EFBFBD><EFBFBD>伐<EFBFBD>
<EFBFBD><EFBFBD> 銝<><E98A9D><EFBFBD><EFBFBD>蝵桀<E89DB5>憭<EFBFBD><E686AD>30<33><30><EFBFBD>嚗?
1.1 <20>輸<EFBFBD>鈭𤏸揭<F0A48FB8>瑚<EFBFBD>韏<EFBFBD><E99F8F>
**璉<><E79289>交<EFBFBD><E4BAA4>?*嚗?
- <EFBFBD>輸<EFBFBD>鈭𤏸揭<EFBFBD>瑕歇摰𧼮<EFBFBD>霈方<EFBFBD>
- 韐行<EFBFBD>雿䠷<EFBFBD> <20>?500<30><30><EFBFBD>撱箄悅1000<30><30><EFBFBD>
- <EFBFBD>啣<EFBFBD><EFBFBD>㗇𥋘嚗𡁜<EFBFBD><EFBFBD>?嚗<><E59A97>鈭穿<E988AD>
- 撌脣<EFBFBD>撱摧AM霈輸䔮撖<EFBFBD>𤨎嚗<EFBFBD>鍂鈭𥟠ocker<EFBFBD>餃<EFBFBD>嚗?
1.2 <20>砍𧑐撘<F0A79190><E69298>𤑳㴓憓?
**敹<><E695B9>撌亙<E6928C>**嚗?
- Docker Desktop嚗Áindows/Mac嚗㗇<E59A97> Docker Engine嚗𡿨inux嚗?
- Git嚗<EFBFBD>鍂鈭𦒘誨<EFBFBD><EFBFBD>恣<EFBFBD><EFBFBD><EFBFBD>
- Node.js 22+嚗<>鍂鈭擧𧋦<E693A7>唳<EFBFBD>撱綽<E692B1>
- PowerShell <20>?Bash嚗<68><E59A97>銵諹<E98AB5><E8ABB9>穿<EFBFBD>
撉諹<EFBFBD><EFBFBD>賭誘嚗?
docker --version # 摨娍遬蝷?Docker version 24.0+
git --version # 摨娍遬蝷?git version 2.x+
node --version # 摨娍遬蝷?v22.x.x
1.3 憿寧𤌍隞<F0A48C8D><E99A9E><EFBFBD><EFBFBD><EFBFBD>
# <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/
<EFBFBD><EFBFBD> 鈭䎚<E988AD><E48E9A>抅蝖<E68A85>霈暹鴌<E69AB9>函蔡嚗?撠𤩺𧒄嚗?
2.1 VPC蝵𤑳<E89DB5>嚗?5<><35><EFBFBD>嚗?
**<2A>餃<EFBFBD>VPC<50>批<EFBFBD><E689B9>?*嚗冴ttps://vpc.console.aliyun.com/
<EFBFBD>𥕦遣VPC
- <EFBFBD>孵稬<EFBFBD>𣂼<EFBFBD>撱箔<EFBFBD><EFBFBD>厩<EFBFBD>蝏栶<EFBFBD>?
- <EFBFBD>滨蔭<EFBFBD><EFBFBD>㺭嚗?
VPC<EFBFBD>滨妍: ai-clinical-vpc <EFBFBD>啣<EFBFBD>: <EFBFBD>𤾸<EFBFBD>2嚗<EFBFBD><EFBFBD>鈭穿<EFBFBD> IPv4蝵烐挾: 172.17.0.0/16 - <EFBFBD>孵稬<EFBFBD>鞟&摰𠾼<EFBFBD>?
<EFBFBD>𥕦遣鈭斗揢<EFBFBD>綽<EFBFBD>2銝迎<EFBFBD><EFBFBD>鞾<EFBFBD><EFBFBD>舐鍂<EFBFBD>改<EFBFBD>
**鈭斗揢<E69697>?**嚗?
<EFBFBD>滨妍: ai-clinical-vsw-f
<EFBFBD>舐鍂<EFBFBD>? <20>𤾸<EFBFBD>2 <20>舐鍂<E88890>慚
IPv4蝵烐挾: 172.17.160.0/20
**鈭斗揢<E69697>?**嚗?
<EFBFBD>滨妍: ai-clinical-vsw-a
<EFBFBD>舐鍂<EFBFBD>? <20>𤾸<EFBFBD>2 <20>舐鍂<E88890>態
IPv4蝵烐挾: 172.17.192.0/20
<EFBFBD>𥕦遣摰匧<EFBFBD>蝏?
- 餈𥕦<EFBFBD><EFBFBD>𣂼<EFBFBD><EFBFBD>函<EFBFBD><EFBFBD>煾△<EFBFBD>?
- <EFBFBD>𥕦遣摰匧<EFBFBD>蝏<EFBFBD><EFBFBD>
<EFBFBD>滨妍: ai-clinical-sg 蝵𤑳<EFBFBD>: ai-clinical-vpc - <EFBFBD>滨蔭<EFBFBD>交䲮<EFBFBD>𤏸<EFBFBD><EFBFBD>辷<EFBFBD>
# <20><>捂VPC<50><43><EFBFBD>鈭㘾<E988AD>? <EFBFBD>讛悅: <EFBFBD>券<EFBFBD> 蝡臬藁: -1/-1 <EFBFBD><EFBFBD><EFBFBD>撖寡情: 172.17.0.0/16 # <20><>捂HTTPS (443) <EFBFBD>讛悅: TCP 蝡臬藁: 443/443 <EFBFBD><EFBFBD><EFBFBD>撖寡情: 0.0.0.0/0 # <20><>捂HTTP (80) <EFBFBD>讛悅: TCP 蝡臬藁: 80/80 <EFBFBD><EFBFBD><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嚗?
<EFBFBD>𥕦遣NAT蝵穃<EFBFBD>
**<2A>餃<EFBFBD>NAT蝵穃<E89DB5><E7A983>批<EFBFBD><E689B9>?*嚗冴ttps://vpc.console.aliyun.com/nat/
- <EFBFBD>孵稬<EFBFBD>𣂼<EFBFBD>撱摸AT蝵穃<EFBFBD><EFBFBD>?
- <EFBFBD>滨蔭<EFBFBD><EFBFBD>㺭嚗?
<EFBFBD>滨妍: NAT_airesearch <EFBFBD>啣<EFBFBD>: <EFBFBD>𤾸<EFBFBD>2嚗<EFBFBD><EFBFBD>鈭穿<EFBFBD> VPC: ai-clinical-vpc 鈭斗揢<EFBFBD>? ai-clinical-vsw-f 蝵穃<EFBFBD>蝐餃<EFBFBD>: 憓𧼮撩<EFBFBD>? 隞䁅晶璅∪<EFBFBD>: <EFBFBD>厰<EFBFBD>隞䁅晶 - <EFBFBD>孵稬<EFBFBD>鞟<EFBFBD><EFBFBD>唾揚銋啜<EFBFBD>?
<EFBFBD>𥕦遣撟嗥<EFBFBD>摰鍃IP
- <EFBFBD>沐AT蝵穃<EFBFBD>霂行<EFBFBD>憿蛛<EFBFBD><EFBFBD>孵稬<EFBFBD>鞟<EFBFBD>摰𡁜撕<EFBFBD>批<EFBFBD>蝵飡P<EFBFBD>?
- <EFBFBD>㗇𥋘<EFBFBD>鞱揚銋唳鰵<EFBFBD><EFBFBD>IP<EFBFBD>𡢅<EFBFBD>
霈∟晶<EFBFBD>孵<EFBFBD>: <EFBFBD>劐蝙<EFBFBD>冽<EFBFBD><EFBFBD>? 撣血捐撜啣<EFBFBD>? 5Mbps嚗<73><E59A97>霂閧㴓憓<E3B493><E68693><EFBFBD>剁<EFBFBD> - 韐凋僭撟嗥<EFBFBD>摰?
<EFBFBD>滨蔭SNAT<EFBFBD>∠𤌍嚗<EFBFBD><EFBFBD><EFBFBD>殷<EFBFBD>嚗?
- 餈𥕦<EFBFBD>NAT蝵穃<EFBFBD>霂行<EFBFBD> <20>?<3F>𠩐NAT蝞∠<E89D9E><E288A0>?
- 瘛餃<EFBFBD>SNAT<EFBFBD>∠𤌍1嚗?
鈭斗揢<EFBFBD>? ai-clinical-vsw-f <EFBFBD>祉<EFBFBD>IP: <EFBFBD>㗇𥋘<EFBFBD>𡁏<EFBFBD><EFBFBD><EFBFBD>IP - 瘛餃<EFBFBD>SNAT<EFBFBD>∠𤌍2嚗?
鈭斗揢<EFBFBD>? ai-clinical-vsw-a <EFBFBD>祉<EFBFBD>IP: <EFBFBD>㗇𥋘<EFBFBD>𡁏<EFBFBD><EFBFBD><EFBFBD>IP
**撉諹<E69289>**嚗?
- SNAT<EFBFBD>∠𤌍<EFBFBD>嗆<EFBFBD><EFBFBD>遬蝷箝<EFBFBD>𣂼虾<EFBFBD>具<EFBFBD>爗<EFBFBD>
2.3 RDS PostgreSQL嚗?0<><30><EFBFBD>嚗?
**<2A>餃<EFBFBD>RDS<44>批<EFBFBD><E689B9>?*嚗冴ttps://rdsnext.console.aliyun.com/
<EFBFBD>𥕦遣摰硺<EFBFBD>
- <EFBFBD>孵稬<EFBFBD>𣂼<EFBFBD>撱箏<EFBFBD>靘卝<EFBFBD>?
- <EFBFBD>滨蔭<EFBFBD><EFBFBD>㺭嚗?
# <20>箇<EFBFBD><E7AE87>滨蔭 <EFBFBD>啣<EFBFBD>: <EFBFBD>𤾸<EFBFBD>2嚗<EFBFBD><EFBFBD>鈭穿<EFBFBD> <EFBFBD>舐鍂<EFBFBD>? <20>舐鍂<E88890>慚嚗<E6859A><E59A97>鈭斗揢<E69697>箏笆摨䈑<E691A8> <EFBFBD>唳旿摨枏<EFBFBD><EFBFBD>? PostgreSQL <EFBFBD><EFBFBD>𧋦: 15 蝟餃<EFBFBD>: 擃睃虾<EFBFBD>函<EFBFBD> 摮睃<EFBFBD>蝐餃<EFBFBD>: ESSD鈭𤑳<EFBFBD> # 閫<>聢 閫<EFBFBD>聢蝐餃<EFBFBD>: <EFBFBD>𡁶鍂<EFBFBD>? 閫<EFBFBD>聢: 2<EFBFBD>?GB (pg.n2.2c.1m) 摮睃<EFBFBD>蝛粹𡢿: 100GB # 蝵𤑳<E89DB5> 蝵𤑳<EFBFBD>蝐餃<EFBFBD>: 銝𤘪<EFBFBD>蝵𤑳<EFBFBD> VPC: ai-clinical-vpc 鈭斗揢<EFBFBD>? ai-clinical-vsw-f # 隞䁅晶 隞䁅晶蝐餃<EFBFBD>: <EFBFBD>厰<EFBFBD>隞䁅晶嚗<EFBFBD><EFBFBD>霂𤏪<EFBFBD><EFBFBD>?<3F><>僑<EFBFBD><E58391><EFBFBD>嚗<EFBFBD><E59A97>鈭改<E988AD> - <EFBFBD>孵稬<EFBFBD>鞟<EFBFBD><EFBFBD>唾揚銋啜<EFBFBD>?
<EFBFBD>𥕦遣<EFBFBD>唳旿摨枏<EFBFBD>韐血噡
**蝑匧<E89D91>摰硺<E691B0><E7A1BA>𥕦遣摰峕<E691B0>嚗<EFBFBD>漲10<31><30><EFBFBD>嚗?*嚗𣬚<E59A97><F0A3AC9A>𠬍<EFBFBD>
-
餈𥕦<EFBFBD>摰硺<EFBFBD>霂行<EFBFBD> <20>?<3F>鞱揭<E99EB1>瑞恣<E7919E><E681A3><EFBFBD>?
-
<EFBFBD>𥕦遣擃䀹<EFBFBD><EFBFBD>鞱揭<EFBFBD>瘀<EFBFBD>
韐血噡<EFBFBD>滨妍: airesearch 韐血噡撖<EFBFBD><EFBFBD>: Xibahe@fengzhibo117 # <20>嫣蛹<E5ABA3>函<EFBFBD>撘箏<E69298><E7AE8F>? 韐血噡蝐餃<EFBFBD>: 擃䀹<EFBFBD><EFBFBD>鞱揭<EFBFBD>? -
餈𥕦<EFBFBD><EFBFBD>鞉㺭<EFBFBD>桀<EFBFBD>蝞∠<EFBFBD><EFBFBD>?
-
<EFBFBD>𥕦遣<EFBFBD>唳旿摨橒<EFBFBD>
<EFBFBD>唳旿摨枏<EFBFBD>蝘? ai_clinical_research 摮㛖泵<EFBFBD>? UTF8 <EFBFBD>鍦<EFBFBD>閫<EFBFBD><EFBFBD>: en_US.utf8 <EFBFBD><EFBFBD><EFBFBD>韐血噡: airesearch (霂餃<E99C82>)
<EFBFBD>滨蔭<EFBFBD>賢<EFBFBD><EFBFBD>?
- 餈𥕦<EFBFBD><EFBFBD>鞉㺭<EFBFBD>桀<EFBFBD><EFBFBD>冽<EFBFBD>扼<EFBFBD>爗<EFBFBD> <20>鞟蒾<E99E9F>滚<EFBFBD>霈曄蔭<E69B84>?
- 靽格㺿暺䁅恕<EFBFBD><EFBFBD><EFBFBD>嚗?
<EFBFBD>賢<EFBFBD><EFBFBD>? 172.17.0.0/16 # VPC蝵烐挾
<EFBFBD>滨蔭<EFBFBD>嗅躹嚗<EFBFBD><EFBFBD>閬<EFBFBD><EFBFBD>嚗?
- 餈𥕦<EFBFBD><EFBFBD>𣂼<EFBFBD><EFBFBD>啗挽蝵柴<EFBFBD>?
- <EFBFBD>𦦵揣
timezone - 靽格㺿銝綽<EFBFBD>
Asia/Shanghai - <EFBFBD>孵稬<EFBFBD>鞉<EFBFBD>鈭文<EFBFBD><EFBFBD>啜<EFBFBD>?
撖澆<EFBFBD><EFBFBD>唳旿
<EFBFBD>寞<EFBFBD>1嚗帋蝙<EFBFBD>冽𧋦<EFBFBD>唳㺭<EFBFBD>桀<EFBFBD>撖澆枂嚗<EFBFBD>綫<EFBFBD>琜<EFBFBD>
# 隞擧𧋦<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摰X<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>**嚗?
# 餈墧𦻖<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/
<EFBFBD>𥕦遣Bucket
- <EFBFBD>孵稬<EFBFBD>𣂼<EFBFBD>撱慷ucket<EFBFBD>?
- <EFBFBD>滨蔭<EFBFBD><EFBFBD>㺭嚗?
Bucket<EFBFBD>滨妍: ai-clinical-research <EFBFBD>啣<EFBFBD>: <EFBFBD>𤾸<EFBFBD>2嚗<EFBFBD><EFBFBD>鈭穿<EFBFBD> 摮睃<EFBFBD>蝐餃<EFBFBD>: <EFBFBD><EFBFBD><EFBFBD>摮睃<EFBFBD> 霂餃<EFBFBD><EFBFBD><EFBFBD><EFBFBD>: 蝘<EFBFBD><EFBFBD> 摮睃<EFBFBD><EFBFBD>𦯀<EFBFBD>蝐餃<EFBFBD>: <EFBFBD><EFBFBD><EFBFBD><EFBFBD>𦯀<EFBFBD>摮睃<EFBFBD> <EFBFBD><EFBFBD>𧋦<EFBFBD>批<EFBFBD>: <EFBFBD>喲𡡒 - <EFBFBD>孵稬<EFBFBD>鞟&摰𠾼<EFBFBD>?
<EFBFBD>𥕦遣RAM霈輸䔮撖<EFBFBD>𤨎
-
餈𥕦<EFBFBD><EFBFBD>鞱挪<EFBFBD>格綉<EFBFBD>買AM<EFBFBD>𡢅<EFBFBD>https://ram.console.aliyun.com/
-
<EFBFBD>𥕦遣<EFBFBD>冽<EFBFBD>嚗?
<EFBFBD>餃<EFBFBD><EFBFBD>滨妍: oss-bucket-writer <EFBFBD>曄內<EFBFBD>滨妍: OSS Bucket<65>坔<EFBFBD><E59D94>冽<EFBFBD> 霈輸䔮<EFBFBD>孵<EFBFBD>: <EFBFBD>?OpenAPI靚<49>鍂霈輸䔮 -
靽嘥<EFBFBD>AccessKey嚗?
AccessKeyId: LTAI5tB2Dt3NdvBL3G7nYGv7 AccessKeySecret: 1iSN9k39RkApP93QjUhC1DcPIeMG4V<EFBFBD>𩤃<EFBFBD> 蝡见朖憭滚<E686AD>靽嘥<E99DBD>嚗<EFBFBD><E59A97>蝏剜<E89D8F>瘜閙䰻<E99699>页<EFBFBD>
-
銝箇鍂<EFBFBD>瑟<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
- <EFBFBD>㗇𥋘<EFBFBD>冽<EFBFBD> <20>?<3F>鞉溶<E99E89>䭾<EFBFBD><E4ADBE>僐<EFBFBD>?
- <EFBFBD>㗇𥋘<EFBFBD><EFBFBD><EFBFBD>嚗䫤AliyunOSSFullAccess`嚗<><E59A97><EFBFBD>芸<EFBFBD>銋㗇<E98A8B><E39787>琜<EFBFBD>
2.5 ACR摰孵膥<E5ADB5>𨅯<EFBFBD>隞枏<E99A9E>嚗?0<><30><EFBFBD>嚗?
<EFBFBD>餃<EFBFBD>摰孵膥<EFBFBD>𨅯<EFBFBD><EFBFBD>滚𦛚嚗冴ttps://cr.console.aliyun.com/
<EFBFBD>𥕦遣<EFBFBD>賢<EFBFBD>蝛粹𡢿
- 餈𥕦<EFBFBD><EFBFBD>𣂷葵鈭箏<EFBFBD>靘卝<EFBFBD>爗<EFBFBD> <20>𣂼𦶢<F0A382BC>滨征<E6BBA8>氬<EFBFBD>?
- <EFBFBD>孵稬<EFBFBD>𣂼<EFBFBD>撱箏𦶢<EFBFBD>滨征<EFBFBD>氬<EFBFBD>𡢅<EFBFBD>
<EFBFBD>賢<EFBFBD>蝛粹𡢿<EFBFBD>滨妍: ai-clinical
<EFBFBD>𥕦遣<EFBFBD>𨅯<EFBFBD>隞枏<EFBFBD>嚗?銝迎<E98A9D>
*隞枏<EFBFBD>1嚗䥪ython敺格<EFBFBD><EFBFBD>?
<EFBFBD>賢<EFBFBD>蝛粹𡢿: ai-clinical
隞枏<EFBFBD><EFBFBD>滨妍: python-extraction
隞枏<EFBFBD>蝐餃<EFBFBD>: 蝘<EFBFBD><EFBFBD>
<EFBFBD>䁅<EFBFBD>: Python<EFBFBD><EFBFBD>﹝<EFBFBD>𣂼<EFBFBD><EFBFBD>滚𦛚
隞枏<EFBFBD>2嚗鐭ode.js<6A>𡒊垢
<EFBFBD>賢<EFBFBD>蝛粹𡢿: ai-clinical
隞枏<EFBFBD><EFBFBD>滨妍: backend-service
隞枏<EFBFBD>蝐餃<EFBFBD>: 蝘<EFBFBD><EFBFBD>
<EFBFBD>䁅<EFBFBD>: Node.js<6A>𡒊垢API<50>滚𦛚
隞枏<EFBFBD>3嚗𡁜<EFBFBD>蝡烤ginx
<EFBFBD>賢<EFBFBD>蝛粹𡢿: ai-clinical
隞枏<EFBFBD><EFBFBD>滨妍: ai-clinical_frontend-nginx
隞枏<EFBFBD>蝐餃<EFBFBD>: 蝘<EFBFBD><EFBFBD>
<EFBFBD>䁅<EFBFBD>: React<EFBFBD>滨垢Nginx<EFBFBD>滚𦛚
霈曄蔭霈輸䔮<EFBFBD>剛<EFBFBD>
<EFBFBD>冽𧋦<EFBFBD>蚤ocker<EFBFBD>餃<EFBFBD>ACR嚗?
# 銝芯犖<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>**嚗?
# <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><>倌>
<EFBFBD><EFBFBD> 銝剹<E98A9D><E589B9>ython敺格<E695BA><E6A0BC>⊿<EFBFBD>蝵莎<E89DB5>35<33><35><EFBFBD>嚗?
3.1 <20><>遣Docker<65>𨅯<EFBFBD>嚗?0<><30><EFBFBD>嚗?
餈𥕦<EFBFBD><EFBFBD>桀<EFBFBD>
cd AIclinicalresearch/extraction_service
璉<EFBFBD><EFBFBD>主ockerfile
蝖株恕Dockerfile摮睃銁銝𥪜<EFBFBD>摰寞迤蝖殷<EFBFBD>
# 摨磰砲<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"]
<EFBFBD><EFBFBD>遣<EFBFBD>𨅯<EFBFBD>
# <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
<EFBFBD>砍𧑐瘚贝<EFBFBD>嚗<EFBFBD>虾<EFBFBD>劐<EFBFBD><EFBFBD>刻<EFBFBD>嚗?
# 餈鞱<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
<EFBFBD>券<EFBFBD><EFBFBD><EFBFBD>ACR
# <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/
<EFBFBD>𥕦遣<EFBFBD>賢<EFBFBD>蝛粹𡢿嚗<EFBFBD><EFBFBD>甈∴<EFBFBD>
- 餈𥕦<EFBFBD><EFBFBD>𣂼𦶢<EFBFBD>滨征<EFBFBD>氬<EFBFBD>?
- <EFBFBD>孵稬<EFBFBD>𣂼<EFBFBD>撱箏𦶢<EFBFBD>滨征<EFBFBD>氬<EFBFBD>𡢅<EFBFBD>
<EFBFBD>賢<EFBFBD>蝛粹𡢿ID: cn-beijing:test-airesearch <EFBFBD>賢<EFBFBD>蝛粹𡢿<EFBFBD>滨妍: 瘚贝<EFBFBD><EFBFBD>臬<EFBFBD>
<EFBFBD>𥕦遣摨𠉛鍂
-
<EFBFBD>孵稬<EFBFBD>𣂼<EFBFBD>撱箏<EFBFBD><EFBFBD>具<EFBFBD>?
-
摨𠉛鍂<EFBFBD>箸𧋦靽⊥<EFBFBD>嚗?
摨𠉛鍂<EFBFBD>滨妍: python-extraction-test <EFBFBD>賢<EFBFBD>蝛粹𡢿: cn-beijing:test-airesearch # 摰硺<E691B0>閫<EFBFBD>聢 CPU: 1<EFBFBD>? <EFBFBD><EFBFBD><EFBFBD>: 2GB 摰硺<EFBFBD><EFBFBD>? 1 # 摨𠉛鍂<F0A0899B>函蔡<E587BD>孵<EFBFBD> <EFBFBD>函蔡<EFBFBD>孵<EFBFBD>: <EFBFBD>𨅯<EFBFBD> <EFBFBD>𨅯<EFBFBD>蝐餃<EFBFBD>: 摰孵膥<EFBFBD>𨅯<EFBFBD><EFBFBD>滚𦛚隡<EFBFBD><EFBFBD><EFBFBD>?銝芯犖<E88AAF>? -
<EFBFBD>㗇𥋘<EFBFBD>𨅯<EFBFBD>嚗?
<EFBFBD>啣<EFBFBD>: <EFBFBD>𤾸<EFBFBD>2嚗<EFBFBD><EFBFBD>鈭穿<EFBFBD> <EFBFBD>賢<EFBFBD>蝛粹𡢿: ai-clinical 隞枏<EFBFBD>: python-extraction <EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD>𧋦: v1.0 # <20>𩤃<EFBFBD> 雿輻鍂VPC<50>啣<EFBFBD>嚗𠄎AE<41><45><EFBFBD><EFBFBD>匧<EFBFBD>嚗<EFBFBD><E59A97>瘚<EFBFBD><E7989A>韐對<E99F90> <EFBFBD>𨅯<EFBFBD><EFBFBD>啣<EFBFBD>隡朞䌊<EFBFBD>刻蓮銝敲PC<EFBFBD>啣<EFBFBD>嚗? crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0 -
<EFBFBD>滨蔭<EFBFBD>𨅯<EFBFBD>霈輸䔮<EFBFBD>剛<EFBFBD>嚗?
<EFBFBD>冽<EFBFBD><EFBFBD>? gofeng117@163.com 撖<EFBFBD><EFBFBD>: fengzhibo117 -
摨𠉛鍂<EFBFBD>滨蔭嚗?
# <20>臬𢆡<E887AC>賭誘<E8B3AD>滨蔭 <EFBFBD>臬𢆡<EFBFBD>賭誘: <EFBFBD>嗵征嚗<EFBFBD>蝙<EFBFBD>求ockerfile<EFBFBD><EFBFBD>MD嚗? # 蝡臬藁<E887AC>滨蔭 摰孵膥蝡臬藁: 8000 <EFBFBD>讛悅: TCP -
<EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD>嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>嚗?
LOG_LEVEL=INFO TEMP_DIR=/tmp/extraction_service -
蝵𤑳<EFBFBD><EFBFBD>滨蔭嚗?
VPC: ai-clinical-vpc 鈭斗揢<EFBFBD>? ai-clinical-vsw-f 摰匧<EFBFBD>蝏? ai-clinical-sg -
<EFBFBD>亙熒璉<EFBFBD><EFBFBD>伐<EFBFBD>
# 摮䀹暑璉<E69A91><E79289>伐<EFBFBD>Liveness嚗? 璉<EFBFBD><EFBFBD>交䲮撘? HTTP 璉<EFBFBD><EFBFBD>亥楝敺? /api/health 蝡臬藁: 8000 <EFBFBD>嘥<EFBFBD>撱嗉<EFBFBD>: 30蝘? 璉<EFBFBD><EFBFBD>仿𡢿<EFBFBD>? 10蝘? 璉<EFBFBD><EFBFBD>亥<EFBFBD><EFBFBD>? 5蝘? 銝滚<EFBFBD>摨琿<EFBFBD><EFBFBD>? 3甈? # 撠梁貌璉<E8B28C><E79289>伐<EFBFBD>Readiness嚗? 璉<EFBFBD><EFBFBD>交䲮撘? HTTP 璉<EFBFBD><EFBFBD>亥楝敺? /api/health 蝡臬藁: 8000 <EFBFBD>嘥<EFBFBD>撱嗉<EFBFBD>: 10蝘? -
<EFBFBD>孵稬<EFBFBD>鞟&霈文<EFBFBD>撱箝<EFBFBD>?
蝑匧<EFBFBD><EFBFBD>函蔡摰峕<EFBFBD>
- <EFBFBD>亦<EFBFBD><EFBFBD>𣂼<EFBFBD>靘钅<EFBFBD>蝵脯<EFBFBD>煾△<EFBFBD>?
- <EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>銝箝<EFBFBD>𪊟unning<EFBFBD>𡢅<EFBFBD>蝥?-10<31><30><EFBFBD>嚗?
- 霈啣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>啣<EFBFBD>嚗䫤http://172.17.173.66:8000`
撉諹<EFBFBD><EFBFBD>函蔡
# <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
<EFBFBD>叚 <20>䜘<EFBFBD><E49C98>ode.js<6A>𡒊垢<F0A1928A>函蔡嚗?0<><30><EFBFBD>嚗?
4.1 <20><><EFBFBD>撌乩<E6928C>嚗?0<><30><EFBFBD>嚗?
<EFBFBD><EFBFBD><EFBFBD>撘撇WT撖<EFBFBD>𤨎
# <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
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD>皜<EFBFBD><EFBFBD>
<EFBFBD>𥕦遣<EFBFBD><EFBFBD>辣 backend/.env.production嚗<EFBFBD><EFBFBD><EFBFBD>𣂷漱<EFBFBD>蚣it嚗㚁<EFBFBD>
# ==================== <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>嚗?
<EFBFBD>寞<EFBFBD><EFBFBD>㗇𥋘
<EFBFBD>睲賑雿輻鍂**<2A>寞<EFBFBD>B嚗𡁏𧋦<F0A1818F>啁<EFBFBD>霂?+ Docker<65>枏<EFBFBD>**嚗<><E59A97>蝔喳<E89D94>嚗?
甇仿炊1嚗𡁏𧋦<EFBFBD>啁<EFBFBD>霂騻ypeScript
cd AIclinicalresearch/backend
# 摰㕑<E691B0>靘肽<E99D98>
npm install
# 蝻𤥁<E89DBB>TypeScript
npm run build
# 撉諹<E69289>蝻𤥁<E89DBB>蝏𤘪<E89D8F>
ls dist/
# 摨磰砲<E7A3B0>见<EFBFBD>嚗餜ndex.js, common/, modules/ 蝑?
甇仿炊2嚗𡁏<EFBFBD><EFBFBD>主ockerfile
蝖株恕Dockerfile<EFBFBD><EFBFBD>捆甇<EFBFBD>&嚗?
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摰X<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嚗𡁜<EFBFBD>憿餃<EFBFBD><EFBFBD>?COPY config ./config嚗<EFBFBD>炏<EFBFBD>嗘<EFBFBD><EFBFBD>仿<EFBFBD> ENOENT: no such file or directory, open '/app/config/agents.yaml'
甇仿炊3嚗𡁏<EFBFBD>撱粹<EFBFBD><EFBFBD>?
# <20><>遣<EFBFBD>𨅯<EFBFBD>
docker build -t backend-service:v1.3 .
# 蝑匧<E89D91><E58CA7><EFBFBD>遣摰峕<E691B0>嚗<EFBFBD>漲5<E6BCB2><35><EFBFBD>嚗?
甇仿炊4嚗𡁏𧋦<EFBFBD>唳<EFBFBD>霂𤏪<EFBFBD><EFBFBD>刻<EFBFBD>嚗?
# 餈鞱<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嚗𡁏綫<EFBFBD><EFBFBD><EFBFBD>ACR
# <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>嚗?
**<2A>餃<EFBFBD>SAE<41>批<EFBFBD><E689B9>?*嚗冴ttps://sae.console.aliyun.com/
<EFBFBD>𥕦遣摨𠉛鍂
-
<EFBFBD>孵稬<EFBFBD>𣂼<EFBFBD>撱箏<EFBFBD><EFBFBD>具<EFBFBD>?
-
摨𠉛鍂<EFBFBD>箸𧋦靽⊥<EFBFBD>嚗?
摨𠉛鍂<EFBFBD>滨妍: nodejs-backend-test <EFBFBD>賢<EFBFBD>蝛粹𡢿: cn-beijing:test-airesearch # 摰硺<E691B0>閫<EFBFBD>聢 CPU: 1<EFBFBD>? <EFBFBD><EFBFBD><EFBFBD>: 2GB 摰硺<EFBFBD><EFBFBD>? 1 -
<EFBFBD>㗇𥋘<EFBFBD>𨅯<EFBFBD>嚗?
<EFBFBD>𨅯<EFBFBD>蝐餃<EFBFBD>: 摰孵膥<EFBFBD>𨅯<EFBFBD><EFBFBD>滚𦛚隡<EFBFBD><EFBFBD><EFBFBD>?銝芯犖<E88AAF>? <EFBFBD>啣<EFBFBD>: <EFBFBD>𤾸<EFBFBD>2嚗<EFBFBD><EFBFBD>鈭穿<EFBFBD> <EFBFBD>賢<EFBFBD>蝛粹𡢿: ai-clinical 隞枏<EFBFBD>: backend-service <EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD>𧋦: v1.3 # <20>𨅯<EFBFBD>霈輸䔮<E8BCB8>剛<EFBFBD> <EFBFBD>冽<EFBFBD><EFBFBD>? gofeng117@163.com 撖<EFBFBD><EFBFBD>: fengzhibo117 -
摨𠉛鍂<EFBFBD>滨蔭嚗?
# <20>臬𢆡<E887AC>賭誘 <EFBFBD>臬𢆡<EFBFBD>賭誘: <EFBFBD>嗵征嚗<EFBFBD>蝙<EFBFBD>求ockerfile<EFBFBD><EFBFBD>MD嚗? # <20>𩤃<EFBFBD> <20>喲睸嚗帋<E59A97>閬<EFBFBD><E996AC>蝵?/bin/bash嚗淾lpine Linux瘝⊥<E7989D>bash嚗? # 蝡臬藁<E887AC>滨蔭 摰孵膥蝡臬藁: 3001 <EFBFBD>讛悅: TCP -
<EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD>嚗<EFBFBD><EFBFBD>儭?<3F>𧼮虜<F0A7BCAE>滩<EFBFBD>嚗<EFBFBD><E59A97>嚗?
**憭滚<E686AD>銝𢠃𢒰<F0A2A083><F0A292B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>渡㴓憓<E3B493><E68693><EFBFBD>𤩺<EFBFBD><F0A4A9BA>?*嚗𣬚鸌<F0A3AC9A>急釣<E680A5>𧶏<EFBFBD>
# <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 -
蝵𤑳<EFBFBD><EFBFBD>滨蔭嚗?
VPC: ai-clinical-vpc 鈭斗揢<EFBFBD>? ai-clinical-vsw-f 摰匧<EFBFBD>蝏? ai-clinical-sg -
<EFBFBD>亙熒璉<EFBFBD><EFBFBD>伐<EFBFBD>
# 摮䀹暑璉<E69A91><E79289>伐<EFBFBD>Liveness嚗? 璉<EFBFBD><EFBFBD>交䲮撘? HTTP 璉<EFBFBD><EFBFBD>亥楝敺? /health 蝡臬藁: 3001 <EFBFBD>嘥<EFBFBD>撱嗉<EFBFBD>: 60蝘? # Node.js<6A>臬𢆡颲<F0A286A1><E9A2B2> 璉<EFBFBD><EFBFBD>仿𡢿<EFBFBD>? 10蝘? # 撠梁貌璉<E8B28C><E79289>伐<EFBFBD>Readiness嚗? 璉<EFBFBD><EFBFBD>交䲮撘? HTTP 璉<EFBFBD><EFBFBD>亥楝敺? /health 蝡臬藁: 3001 <EFBFBD>嘥<EFBFBD>撱嗉<EFBFBD>: 30蝘? -
<EFBFBD>孵稬<EFBFBD>鞟&霈文<EFBFBD>撱箝<EFBFBD>?
蝑匧<EFBFBD><EFBFBD>函蔡摰峕<EFBFBD>
- <EFBFBD>亦<EFBFBD><EFBFBD>𣂼<EFBFBD>靘钅<EFBFBD>蝵脯<EFBFBD>煾△<EFBFBD>?
- <EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>銝箝<EFBFBD>𪊟unning<EFBFBD>𡢅<EFBFBD>蝥?0<><30><EFBFBD>嚗?
- 霈啣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>啣<EFBFBD>嚗䫤http://172.17.173.73:3001`
撉諹<EFBFBD><EFBFBD>函蔡
<EFBFBD>亦<EFBFBD><EFBFBD>亙<EFBFBD>嚗𣬚&霈支誑銝衤縑<EFBFBD>荔<EFBFBD>
# <20>?摨磰砲<E7A3B0>见<EFBFBD><E8A781><EFBFBD>𠯫敹梹<E695B9>
<0A>?Loaded 12 agent configurations
[PgBossQueue] Using PgBossQueue (Postgres-Only<6C>嗆<EFBFBD>)
[PostgresCacheAdapter] Cleanup task started
<0A>?<3F>唳旿摨栞<E691A8><E6A09E>交<EFBFBD><E4BAA4><EFBFBD><EFBFBD>
<0A><> <20>唳旿摨梶<E691A8><E6A2B6>? PostgreSQL 15.14
PythonExecutorService initialized: http://172.17.173.66:8000 # <20>𩤃<EFBFBD> 蝖株恕餈嗘葵嚗?
<0A><> AI銝游<E98A9D><E6B8B8>𠉛弦撟喳蝱 - <20>𡒊垢<F0A1928A>滚𦛚<E6BB9A>典鍳<E585B8>冽<EFBFBD><E586BD><EFBFBD><EFBFBD>
<0A><> <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'
<0A>?Dockerfile蝻箏<E89DBB> COPY config ./config
Error: unable to determine transport target for "pino-pretty"
<0A>?src/index.ts <20>亙<EFBFBD><E4BA99>滨蔭<E6BBA8>桅<EFBFBD>嚗屸<E59A97>閬<EFBFBD>辺隞嗅ế<E59785>剔㴓憓?
ReferenceError: require is not defined
<0A>?healthCheck.ts 雿輻鍂鈭<E98D82>equire嚗屸<E59A97><E5B1B8>嫣蛹import
4.4 撣貉<E692A3><E8B289>桅<EFBFBD>靽桀<E99DBD>
<EFBFBD>桅<EFBFBD>1嚗䬙onfig<EFBFBD>桀<EFBFBD>蝻箏仃
<EFBFBD>躰秤嚗?
ENOENT: no such file or directory, open '/app/config/agents.yaml'
**閫<><E996AB>**嚗?
# <20>求ockerfile銝剜溶<E5899C>?
COPY config ./config
<EFBFBD>桅<EFBFBD>2嚗䮝ino-pretty<74>煺漣<E785BA>臬<EFBFBD><E887AC>仿<EFBFBD>
<EFBFBD>躰秤嚗?
Error: unable to determine transport target for "pino-pretty"
**閫<><E996AB>**嚗帋耨<E5B88B>?src/index.ts
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',
},
},
},
});
<EFBFBD>桅<EFBFBD>3嚗冴ealthCheck require<72>仿<EFBFBD>
<EFBFBD>躰秤嚗?
ReferenceError: require is not defined in ES module
**閫<><E996AB>**嚗帋耨<E5B88B>?src/common/health/healthCheck.ts
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
}
<EFBFBD>桅<EFBFBD>4嚗颹ash頝臬<EFBFBD><EFBFBD>躰秤
<EFBFBD>躰秤嚗?
executable '/bin/bash' not found in $PATH
**閫<><E996AB>**嚗?
- SAE<EFBFBD>臬𢆡<EFBFBD>賭誘<EFBFBD>嗵征嚗䔶蝙<EFBFBD>求ockerfile<EFBFBD><EFBFBD>MD
- <EFBFBD>碶蝙<EFBFBD>?
/bin/sh隞<>𤜯/bin/bash
<EFBFBD>綫 鈭𢛵<E988AD><F0A29BB5><EFBFBD>蝡烤ginx<6E>函蔡嚗?0<><30><EFBFBD>嚗?
5.1 <20><>遣Docker<65>𨅯<EFBFBD>嚗?5<><35><EFBFBD>嚗?
餈𥕦<EFBFBD><EFBFBD>桀<EFBFBD>
cd AIclinicalresearch/frontend-v2
璉<EFBFBD><EFBFBD>亙<EFBFBD><EFBFBD>格<EFBFBD>隞?
1. Dockerfile嚗<EFBFBD><EFBFBD><EFBFBD>嗆挾<EFBFBD><EFBFBD>遣嚗㚁<EFBFBD>
# 蝚砌<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>𢆡<EFBFBD><EFBFBD><EFBFBD>蝵殷<EFBFBD>嚗?
#!/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>a<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>典<EFBFBD><EFBFBD>誩<EFBFBD>雿滨泵嚗㚁<EFBFBD>
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;
}
}
<EFBFBD><EFBFBD>遣<EFBFBD>𨅯<EFBFBD>
# <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
<EFBFBD>砍𧑐瘚贝<EFBFBD>
# 餈鞱<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
<EFBFBD>券<EFBFBD><EFBFBD><EFBFBD>ACR
# <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>嚗?
**<2A>餃<EFBFBD>SAE<41>批<EFBFBD><E689B9>?*嚗冴ttps://sae.console.aliyun.com/
<EFBFBD>𥕦遣摨𠉛鍂
-
<EFBFBD>孵稬<EFBFBD>𣂼<EFBFBD>撱箏<EFBFBD><EFBFBD>具<EFBFBD>?
-
摨𠉛鍂<EFBFBD>箸𧋦靽⊥<EFBFBD>嚗?
摨𠉛鍂<EFBFBD>滨妍: frontend-nginx-service <EFBFBD>賢<EFBFBD>蝛粹𡢿: cn-beijing:test-airesearch # 摰硺<E691B0>閫<EFBFBD>聢 CPU: 0.5<EFBFBD>? <EFBFBD><EFBFBD><EFBFBD>: 1GB 摰硺<EFBFBD><EFBFBD>? 1 -
<EFBFBD>㗇𥋘<EFBFBD>𨅯<EFBFBD>嚗?
<EFBFBD>𨅯<EFBFBD>蝐餃<EFBFBD>: 摰孵膥<EFBFBD>𨅯<EFBFBD><EFBFBD>滚𦛚隡<EFBFBD><EFBFBD><EFBFBD>?銝芯犖<E88AAF>? <EFBFBD>啣<EFBFBD>: <EFBFBD>𤾸<EFBFBD>2嚗<EFBFBD><EFBFBD>鈭穿<EFBFBD> <EFBFBD>賢<EFBFBD>蝛粹𡢿: ai-clinical 隞枏<EFBFBD>: ai-clinical_frontend-nginx <EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD>𧋦: v1.0 # <20>𨅯<EFBFBD>霈輸䔮<E8BCB8>剛<EFBFBD> <EFBFBD>冽<EFBFBD><EFBFBD>? gofeng117@163.com 撖<EFBFBD><EFBFBD>: fengzhibo117 -
摨𠉛鍂<EFBFBD>滨蔭嚗?
# <20>臬𢆡<E887AC>賭誘 <EFBFBD>臬𢆡<EFBFBD>賭誘: <EFBFBD>嗵征嚗<EFBFBD>蝙<EFBFBD>汞NTRYPOINT嚗? # 蝡臬藁<E887AC>滨蔭 摰孵膥蝡臬藁: 80 <EFBFBD>讛悅: TCP -
<EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD>嚗<EFBFBD><EFBFBD>儭?<3F>喲睸<E596B2>滨蔭嚗㚁<E59A97>
BACKEND_SERVICE_HOST=172.17.173.73 # Node.js<6A>𡒊垢<F0A1928A><E59EA2><EFBFBD>IP BACKEND_SERVICE_PORT=3001 -
蝵𤑳<EFBFBD><EFBFBD>滨蔭嚗?
VPC: ai-clinical-vpc 鈭斗揢<EFBFBD>? ai-clinical-vsw-f 摰匧<EFBFBD>蝏? ai-clinical-sg -
<EFBFBD>亙熒璉<EFBFBD><EFBFBD>伐<EFBFBD>
# 摮䀹暑璉<E69A91><E79289>? 璉<EFBFBD><EFBFBD>交䲮撘? HTTP 璉<EFBFBD><EFBFBD>亥楝敺? /health 蝡臬藁: 80 <EFBFBD>嘥<EFBFBD>撱嗉<EFBFBD>: 10蝘? 璉<EFBFBD><EFBFBD>仿𡢿<EFBFBD>? 10蝘? # 撠梁貌璉<E8B28C><E79289>? 璉<EFBFBD><EFBFBD>交䲮撘? HTTP 璉<EFBFBD><EFBFBD>亥楝敺? /health 蝡臬藁: 80 <EFBFBD>嘥<EFBFBD>撱嗉<EFBFBD>: 5蝘? -
<EFBFBD>孵稬<EFBFBD>鞟&霈文<EFBFBD>撱箝<EFBFBD>?
蝑匧<EFBFBD><EFBFBD>函蔡摰峕<EFBFBD>
- <EFBFBD>亦<EFBFBD><EFBFBD>𣂼<EFBFBD>靘钅<EFBFBD>蝵脯<EFBFBD>煾△<EFBFBD>?
- <EFBFBD>嗆<EFBFBD><EFBFBD><EFBFBD>銝箝<EFBFBD>𪊟unning<EFBFBD>𡢅<EFBFBD>蝥?<3F><><EFBFBD>嚗?
- 霈啣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>啣<EFBFBD>嚗䫤http://172.17.173.72:80`
撉諹<EFBFBD><EFBFBD>函蔡
<EFBFBD>亦<EFBFBD><EFBFBD>亙<EFBFBD>嚗?
# <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
<EFBFBD><EFBFBD> <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>
- 餈𥕦<EFBFBD>SAE摨𠉛鍂嚗䫤frontend-nginx-service`
- <EFBFBD>孵稬<EFBFBD>𣂼<EFBFBD>蝵𤏸挪<EFBFBD>柴<EFBFBD>烐<EFBFBD><EFBFBD>鞱挪<EFBFBD>桅<EFBFBD>蝵柴<EFBFBD>騻ab
- <EFBFBD>孵稬<EFBFBD>鞉溶<EFBFBD>惩<EFBFBD>蝵𤏸挪<EFBFBD>柴<EFBFBD>?
- <EFBFBD>滨蔭<EFBFBD><EFBFBD>㺭嚗?
韐蠘蝸<EFBFBD><EFBFBD>﹛蝐餃<EFBFBD>: <EFBFBD>祉<EFBFBD> 韐蠘蝸<EFBFBD><EFBFBD>﹛鈭批<EFBFBD>: CLB (隡删<E99AA1><E588A0>贝<EFBFBD>頧賢<E9A0A7>銵? 隞䁅晶璅∪<EFBFBD>: <EFBFBD>厰<EFBFBD>隞䁅晶 # <20>穃𨯬<E7A983>滨蔭 <EFBFBD>讛悅: HTTP 蝡臬藁: 80 <EFBFBD>𡒊垢蝡臬藁: 80 # <20>亙熒璉<E78692><E79289>? <EFBFBD>亙熒璉<EFBFBD><EFBFBD>? <20>舐鍂 璉<EFBFBD><EFBFBD>亥楝敺? /health - <EFBFBD>孵稬<EFBFBD>鞟&摰𠾼<EFBFBD>?
- 蝑匧<EFBFBD>2-3<><33><EFBFBD>嚗諹䌊<E8ABB9>典<EFBFBD><E585B8>滚<EFBFBD>蝵飡P
<EFBFBD>孵<EFBFBD>2嚗𡁏<EFBFBD><EFBFBD>典<EFBFBD>撱慢LB
- <EFBFBD>餃<EFBFBD>CLB<EFBFBD>批<EFBFBD><EFBFBD>堆<EFBFBD>https://slb.console.aliyun.com/
- <EFBFBD>𥕦遣韐蠘蝸<EFBFBD><EFBFBD>﹛摰硺<EFBFBD>
- <EFBFBD>滨蔭<EFBFBD>穃𨯬<EFBFBD>剁<EFBFBD>HTTP:80嚗?
- 瘛餃<EFBFBD><EFBFBD>𡒊垢<EFBFBD>滚𦛚<EFBFBD>剁<EFBFBD><EFBFBD>滨垢Nginx<EFBFBD><EFBFBD><EFBFBD>蝵飡P嚗?
- <EFBFBD>滨蔭<EFBFBD>亙熒璉<EFBFBD><EFBFBD>?
6.2 <20>瑕<EFBFBD><E79195>祉<EFBFBD><E7A589>啣<EFBFBD>
- <EFBFBD>沒AE摨𠉛鍂霂行<EFBFBD>憿菜䰻<EFBFBD>卝<EFBFBD>𣂼<EFBFBD>蝵𤏸挪<EFBFBD>桀𧑐<EFBFBD><EFBFBD><EFBFBD>?
- 蝷箔<EFBFBD>嚗䫤http://8.140.53.236/`
- 憭滚<EFBFBD>甇文𧑐<EFBFBD><EFBFBD><EFBFBD>其<EFBFBD>瘚贝<EFBFBD>
<EFBFBD>?銝<><E98A9D><EFBFBD><EFBFBD><EFBFBD>湧曎頝舀<E9A09D>霂𤏪<E99C82>30<33><30><EFBFBD>嚗?
7.1 <20>箇<EFBFBD><E7AE87>蠘<EFBFBD>瘚贝<E7989A>
瘚贝<EFBFBD>1嚗𡁜<EFBFBD>蝡舫△<EFBFBD>Z挪<EFBFBD>?
# 瘚讛<E7989A><E8AE9B>刻挪<E588BB>?
http://8.140.53.236/
# 摨磰砲<E7A3B0>见<EFBFBD>嚗?
<0A>?React摨𠉛鍂甇<E98D82>虜<EFBFBD>㰘蝸
<0A>?憿菟𢒰<E88F9F>瑕<EFBFBD>甇<EFBFBD>虜
<0A>?瘝⊥<E7989D>CORS<52>躰秤
瘚贝<EFBFBD>2嚗𡁜<EFBFBD>摨瑟<EFBFBD><EFBFBD>?
# <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"
}
}
瘚贝<EFBFBD>3嚗䥪ython<EFBFBD>滚𦛚餈墧𦻖
# <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>
瘚贝<EFBFBD>1嚗𡁶鍂<EFBFBD>瑞蒈敶?
- 霈輸䔮 http://8.140.53.236/
- 颲枏<EFBFBD><EFBFBD>冽<EFBFBD><EFBFBD>滚<EFBFBD><EFBFBD>?
- <EFBFBD>孵稬<EFBFBD>餃<EFBFBD>
- <EFBFBD>亦<EFBFBD>瘚讛<EFBFBD><EFBFBD>沐etwork<EFBFBD>X踎嚗?
Request URL: http://8.140.53.236/api/v1/auth/login Status: 200 OK <20>? Response: { "token": "...", "user": {...} }
瘚贝<EFBFBD>2嚗𡁏㺭<EFBFBD>格<EFBFBD>瘣埈芋<EFBFBD>梹<EFBFBD>撌亙<EFBFBD>C嚗?
- 餈𥕦<EFBFBD><EFBFBD>鞉㺭<EFBFBD>格<EFBFBD>瘣𨰜<EFBFBD>爗<EFBFBD> <20>𣂼極<F0A382BC>嵩<EFBFBD>?
- 銝𠹺<EFBFBD>Excel<EFBFBD><EFBFBD>辣
- 撉諹<EFBFBD>銝𠹺<EFBFBD><EFBFBD>𣂼<EFBFBD>
- 瘚贝<EFBFBD>7憭批<EFBFBD><EFBFBD>賭<EFBFBD>銝<EFBFBD>嚗<EFBFBD><EFBFBD>嚗𡁏㺭<EFBFBD>潭<EFBFBD>撠<EFBFBD><EFBFBD>嚗?
- <EFBFBD>㗇𥋘<EFBFBD>?
- <EFBFBD>滨蔭<EFBFBD>惩<EFBFBD>閫<EFBFBD><EFBFBD>
- <EFBFBD>孵稬<EFBFBD>鞉<EFBFBD>銵峕<EFBFBD>撠<EFBFBD><EFBFBD>?
- <EFBFBD>亦<EFBFBD>蝏𤘪<EFBFBD>
**<2A>喲睸撉諹<E69289>**嚗?
瘚讛<EFBFBD><EFBFBD>沐etwork<EFBFBD>X踎嚗?
POST http://8.140.53.236/api/v1/dc/tool-c/quick-action
Status: 200 OK <20>?
<0A>𡒊垢<F0A1928A>亙<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>?
瘚贝<EFBFBD>3嚗𡁏<EFBFBD><EFBFBD>桃<EFBFBD><EFBFBD>交芋<EFBFBD>梹<EFBFBD>ASL嚗?
- 餈𥕦<EFBFBD><EFBFBD>鞉<EFBFBD><EFBFBD>桃<EFBFBD><EFBFBD>乓<EFBFBD>烐芋<EFBFBD>?
- <EFBFBD>𥕦遣憿寧𤌍
- 銝𠹺<EFBFBD><EFBFBD><EFBFBD>讃
- <EFBFBD>扯<EFBFBD><EFBFBD>箄<EFBFBD>蝑𥟇䰻
- 撉諹<EFBFBD>蝏𤘪<EFBFBD>
7.3 <20>扯<EFBFBD>瘚贝<E7989A>
<EFBFBD>滚<EFBFBD><EFBFBD>園𡢿璉<EFBFBD><EFBFBD>?
# 雿輻鍂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>𡒊賒霈輸䔮嚗?
<EFBFBD><EFBFBD> <20>怒<EFBFBD><E68092><EFBFBD>蝵脫<E89DB5><E884AB>𨀣<EFBFBD>餌<EFBFBD>
8.1 撌脤<E6928C>蝵脫<E89DB5><E884AB>⊥<EFBFBD><E28AA5>?
| <EFBFBD>滚𦛚 | <EFBFBD>嗆<EFBFBD>? | <EFBFBD><EFBFBD><EFBFBD><EFBFBD>啣<EFBFBD> | <EFBFBD>祉<EFBFBD>霈輸䔮 |
|---|---|---|---|
| RDS PostgreSQL | <EFBFBD>? | pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432 | <EFBFBD>? |
| Python敺格<EFBFBD><EFBFBD>? | <EFBFBD>? | 172.17.173.66:8000 | <EFBFBD>? |
| Node.js<6A>𡒊垢 | <EFBFBD>? | 172.17.173.73:3001 | <EFBFBD>? |
| <EFBFBD>滨垢Nginx | <EFBFBD>? | 172.17.173.72:80 | <EFBFBD>? |
| CLB韐蠘蝸<EFBFBD><EFBFBD>﹛ | <EFBFBD>? | - | http://8.140.53.236/ |
8.2 <20>喲睸<E596B2>滨蔭<E6BBA8><E894AD>䰻
Python敺格<EFBFBD><EFBFBD>∠㴓憓<EFBFBD><EFBFBD><EFBFBD>?
LOG_LEVEL=INFO
TEMP_DIR=/tmp/extraction_service
Node.js<6A>𡒊垢<F0A1928A>喲睸<E596B2>臬<EFBFBD><E887AC>㗛<EFBFBD>
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
<EFBFBD>滨垢Nginx<EFBFBD>喲睸<EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD>
BACKEND_SERVICE_HOST=172.17.173.73 # Node.js<6A>𡒊垢<F0A1928A><E59EA2><EFBFBD>IP
BACKEND_SERVICE_PORT=3001
<EFBFBD>𩤃<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嚗䔶<EFBFBD>SAE<EFBFBD>滨蔭鈭?PYTHON_SERVICE_URL
**閫<><E996AB>**嚗?
# <20>?<3F>躰秤
PYTHON_SERVICE_URL=http://172.17.173.66:8000
# <20>?甇<>&
EXTRACTION_SERVICE_URL=http://172.17.173.66:8000
<EFBFBD>躰悌嚗𡁶㴓憓<EFBFBD><EFBFBD><EFBFBD>誩<EFBFBD>敹<EFBFBD>◆銝𦒘誨<EFBFBD><EFBFBD><EFBFBD><EFBFBD>其<EFBFBD><EFBFBD>湛<EFBFBD>銝<EFBFBD>銝芸<EFBFBD>瘥漤<EFBFBD>銝滩<EFBFBD><EFBFBD>辷<EFBFBD>
9.2 "<22>滚鍳摨𠉛鍂" vs "<22>函蔡摨𠉛鍂"
**<2A>桅<EFBFBD>**嚗𡁶<E59A97><F0A181B6>?<3F>函蔡摨𠉛鍂"撖潸稲IP<49>啣<EFBFBD><E595A3>䀹凒
| <EFBFBD>滢<EFBFBD> | <EFBFBD>券<EFBFBD>? | IP<EFBFBD>臬炏<EFBFBD>? | 雿閙𧒄雿輻鍂 |
|---|---|---|---|
| <EFBFBD>滚鍳摨𠉛鍂 | <EFBFBD>滚鍳摰孵膥 | <EFBFBD>?銝滢<E98A9D> | 靽格㺿<EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD><EFBFBD>? |
| <EFBFBD>函蔡摨𠉛鍂 | <EFBFBD>湔鰵<EFBFBD>𨅯<EFBFBD> | <EFBFBD>?隡𡁜<E99AA1> | <EFBFBD>湔鰵隞<EFBFBD><EFBFBD>/<2F>𨅯<EFBFBD><F0A885AF>? |
<EFBFBD>躰悌嚗?
- <EFBFBD>芯耨<EFBFBD>寧㴓憓<EFBFBD><EFBFBD><EFBFBD>?<3F>?<3F>?<3F>滚鍳摨𠉛鍂"
- <EFBFBD>湔鰵隞<EFBFBD><EFBFBD>/<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>**嚗?
# <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`<60>留evDependencies嚗𣬚<E59A97>鈭抒㴓憓<E3B493>瓷<EFBFBD>匧<EFBFBD>鋆?
**閫<><E996AB>**嚗𡁏辺隞嗅ế<E59785>剔㴓憓?
logger: config.nodeEnv === 'production'
? { level: config.logLevel }
: { level: config.logLevel, transport: { target: 'pino-pretty', ... } }
9.5 ES Module<6C>澆捆<E6BE86>?
**<2A>桅<EFBFBD>**嚗?
ReferenceError: require is not defined in ES module
**閫<><E996AB>**嚗?
// <20>?<3F>躰秤
require('os').loadavg()
// <20>?甇<>&
import os from 'os';
os.loadavg()
9.6 Alpine Linux瘝⊥<E7989D>bash
**<2A>桅<EFBFBD>**嚗?
executable '/bin/bash' not found in $PATH
**閫<><E996AB>**嚗?
- SAE<EFBFBD>臬𢆡<EFBFBD>賭誘<EFBFBD>嗵征
- <EFBFBD>碶蝙<EFBFBD>?
/bin/sh隞<>𤜯
9.7 <20>唳旿摨𡤃RL銝剔<E98A9D>@蝚血噡
**<2A>澆<EFBFBD>**嚗?
# <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>**嚗?
# <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>**嚗?
- <EFBFBD>砍𧑐<EFBFBD>券<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?<3F>?雿輻鍂<E8BCBB>祉<EFBFBD><E7A589>啣<EFBFBD>
- SAE<EFBFBD>匧<EFBFBD><EFBFBD>𨅯<EFBFBD> <20>?雿輻鍂VPC<50>啣<EFBFBD>
9.9 <20>亙熒璉<E78692><E79289>亙<EFBFBD>憪见辣餈?
**銝滚<E98A9D><E6BB9A>滚𦛚<E6BB9A><F0A69B9A>鍳<EFBFBD>冽𧒄<E586BD>?*嚗?
| <EFBFBD>滚𦛚 | <EFBFBD>臬𢆡<EFBFBD>園𡢿 | <EFBFBD>嘥<EFBFBD>撱嗉<EFBFBD>撱箄悅 |
|---|---|---|
| Python敺格<EFBFBD><EFBFBD>? | 10蝘? | 30蝘? |
| Node.js<6A>𡒊垢 | 30蝘? | 60蝘? |
| <EFBFBD>滨垢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>隡睃飵嚗?
- <EFBFBD>滨垢雿輻鍂<EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD>
BACKEND_SERVICE_HOST - <EFBFBD>朞<EFBFBD>
envsubst<20>典捆<E585B8>典鍳<E585B8>冽𧒄<E586BD>冽<EFBFBD><E586BD>釣<EFBFBD>? - <EFBFBD>𡒊垢IP<EFBFBD>䀹凒<EFBFBD>塚<EFBFBD><EFBFBD>芷<EFBFBD><EFBFBD>滚鍳<EFBFBD>滨垢摨𠉛鍂嚗峕<EFBFBD><EFBFBD><EFBFBD><EFBFBD>齿鰵<EFBFBD><EFBFBD>遣<EFBFBD>𨅯<EFBFBD>
<EFBFBD>喲睸<EFBFBD><EFBFBD>辣嚗?
docker-entrypoint.sh嚗𡁜𢆡<EFBFBD><EFBFBD>𤜯<EFBFBD>a<EFBFBD>蝵?nginx.conf嚗帋蝙<EFBFBD>?${BACKEND_SERVICE_HOST}<20>牐<EFBFBD>蝚?
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>𧊋<EFBFBD>乩<EFBFBD><E4B9A9>硋遣霈?
10.1 雿輻鍂<E8BCBB>滚𦛚<E6BB9A>𤑳緵隞<E7B7B5>𤜯IP<49>啣<EFBFBD>
敶枏<EFBFBD><EFBFBD>滨蔭嚗<EFBFBD>蝙<EFBFBD>沉P嚗㚁<EFBFBD>
BACKEND_SERVICE_HOST=172.17.173.73
EXTRACTION_SERVICE_URL=http://172.17.173.66:8000
**隡睃<E99AA1><E79D83>寞<EFBFBD>**嚗<>蝙<EFBFBD>冽<EFBFBD><E586BD>∪<EFBFBD>嚗㚁<E59A97>
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>**嚗?
- <EFBFBD>?IP<49>䀹凒銝滚蔣<E6BB9A>漤<EFBFBD>帋縑
- <EFBFBD>?<3F>芸𢆡韐蠘蝸<E8A098><E89DB8>﹛
- <EFBFBD>?<3F>渡迅摰𡁜虾<F0A1819C>?
10.2 <20>滨蔭HTTPS
甇仿炊嚗?
- <EFBFBD>唾窈<EFBFBD>笔<EFBFBD>
- <EFBFBD>唾窈SSL霂<EFBFBD>髡嚗<EFBFBD>燵<EFBFBD>䔶<EFBFBD><EFBFBD>滩晶霂<EFBFBD>髡<EFBFBD>譩et's Encrypt嚗?
- <EFBFBD>每LB<EFBFBD>滨蔭HTTPS<EFBFBD>穃𨯬嚗<EFBFBD>垢<EFBFBD>?43嚗?
- 銝𠹺<EFBFBD>SSL霂<EFBFBD>髡
- <EFBFBD>滨蔭HTTP<EFBFBD>芸𢆡頝唾蓮HTTPS
10.3 <20>滨蔭<E6BBA8>芸𢆡<E88AB8>拍憬摰?
**SAE撘寞<E69298>找撓蝻?*嚗?
# <20>寞旿CPU雿輻鍂<E8BCBB><E98D82>䌊<EFBFBD>冽<EFBFBD>蝻拙捆
<EFBFBD><EFBFBD>撠誩<EFBFBD>靘𧢲㺭: 1
<EFBFBD><EFBFBD>憭批<EFBFBD>靘𧢲㺭: 3
<EFBFBD>格<EFBFBD>CPU雿輻鍂<EFBFBD>? 70%
<EFBFBD><EFBFBD>鍂<EFBFBD>箸艶嚗?
- 瘚<EFBFBD><EFBFBD>瘜W𢆡憭?
- 擃睃陸<EFBFBD>罸<EFBFBD>閬<EFBFBD>凒憭𡁜<EFBFBD>靘?
- 雿𤾸陸<EFBFBD>蠘<EFBFBD>蝥行<EFBFBD><EFBFBD>?
10.4 <20>滨蔭<E6BBA8>亙<EFBFBD><E4BA99><EFBFBD><EFBFBD>
**<2A>輸<EFBFBD>鈭騌LS嚗<53>𠯫敹埈<E695B9><E59F88>∴<EFBFBD>**嚗?
- <EFBFBD>芸𢆡<EFBFBD>園<EFBFBD>SAE<EFBFBD>亙<EFBFBD>
- 摰墧𧒄<EFBFBD>亥砭<EFBFBD><EFBFBD><EFBFBD><EFBFBD>?
- <EFBFBD>滨蔭<EFBFBD>𡃏郎閫<EFBFBD><EFBFBD>
10.5 <20>滨蔭<E6BBA8>烐綉<E78390>𡃏郎
**鈭𤑳<E988AD><F0A491B3>折<EFBFBD>蝵?*嚗?
CPU雿輻鍂<EFBFBD>?> 80% <20>?<3F>𡃏郎
<EFBFBD><EFBFBD><EFBFBD>雿輻鍂<EFBFBD>?> 80% <20>?<3F>𡃏郎
<EFBFBD>亙熒璉<EFBFBD><EFBFBD>亙仃韐? <20>?<3F>𡃏郎
<EFBFBD>躰秤<EFBFBD>亙<EFBFBD>憓𧼮<EFBFBD> <20>?<3F>𡃏郎
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>翰<EFBFBD>笔𦶢隞文<E99A9E><E69687>?
11.1 Docker<65>𨅯<EFBFBD>蝞∠<E89D9E>
# <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>?
# 餈墧𦻖<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>?
# 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/
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵脣<E89DB5><E884A3>鞉<EFBFBD><E99E89>交<EFBFBD><E4BAA4>?
<EFBFBD><EFBFBD>蝏<EFBFBD><EFBFBD>霂?
- <EFBFBD>?Python敺格<E695BA><E6A0BC>∪<EFBFBD>摨瑟<E691A8><E7919F>仿<EFBFBD>朞<EFBFBD>
- <EFBFBD>?Node.js<6A>𡒊垢<F0A1928A>亙熒璉<E78692><E79289>仿<EFBFBD>朞<EFBFBD>
- <EFBFBD>?<3F>滨垢Nginx<6E>亙熒璉<E78692><E79289>仿<EFBFBD>朞<EFBFBD>
- <EFBFBD>?<3F>祉<EFBFBD><E7A589>啣<EFBFBD><E595A3>臭誑霈輸䔮
- <EFBFBD>?<3F>冽<EFBFBD><E586BD>臭誑甇<E8AA91>虜<EFBFBD>餃<EFBFBD>
- <EFBFBD>?<3F><>讃蝑𥟇䰻<F0A59F87>蠘<EFBFBD>甇<EFBFBD>虜
- <EFBFBD>?<3F>唳旿皜<E697BF><E79A9C>撌亙<E6928C>C<EFBFBD>?憭批<E686AD><E689B9>賣迤撣?
- <EFBFBD>?<3F><>辣銝𠹺<E98A9D><F0A0B9BA>蠘<EFBFBD>甇<EFBFBD>虜
- <EFBFBD>?AI撖寡<E69296><E5AFA1>蠘<EFBFBD>甇<EFBFBD>虜
- <EFBFBD>?瘝⊥<E7989D>CORS<52>躰秤
- <EFBFBD>?瘝⊥<E7989D>502/504<30>躰秤
- <EFBFBD>?<3F>滚<EFBFBD><E6BB9A>園𡢿 < 1蝘?
<EFBFBD><EFBFBD>﹝<EFBFBD>湔鰵
- <EFBFBD>湔鰵
00-<2D>函蔡餈𥕦漲<F0A595A6>餉<EFBFBD>.md銝剔<E98A9D><E58994><EFBFBD><EFBFBD>IP<49>啣<EFBFBD> - 霈啣<EFBFBD><EFBFBD>祉<EFBFBD>霈輸䔮<EFBFBD>啣<EFBFBD>
- 霈啣<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>䔮憸睃<EFBFBD>閫<EFBFBD><EFBFBD><EFBFBD>寞<EFBFBD>
- <EFBFBD>湔鰵<EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD>皜<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>舀𣈲<E88880>?
撣貉<EFBFBD><EFBFBD>桅<EFBFBD><EFBFBD>埝䰻
<EFBFBD>桅<EFBFBD>1嚗𡁜極<EFBFBD>嵩<EFBFBD>蠘<EFBFBD><EFBFBD>仿<EFBFBD> "connect ECONNREFUSED 127.0.0.1:8000"
- 璉<EFBFBD><EFBFBD>代ode.js<6A>臬<EFBFBD><E887AC>㗛<EFBFBD>
EXTRACTION_SERVICE_URL - 蝖桐<EFBFBD><EFBFBD>潔蛹
http://172.17.173.66:8000 - <EFBFBD>滚鍳Node.js摨𠉛鍂
<EFBFBD>桅<EFBFBD>2嚗𡁜<EFBFBD>蝡航挪<EFBFBD>桀<EFBFBD>蝡舀𥁒502<EFBFBD>躰秤
- 璉<EFBFBD><EFBFBD>亙<EFBFBD>蝡舐㴓憓<EFBFBD><EFBFBD><EFBFBD>?
BACKEND_SERVICE_HOST - 蝖桐<EFBFBD><EFBFBD>潔蛹Node.js<6A>𡒊垢<F0A1928A><E59EA2><EFBFBD>蝵飡P
- <EFBFBD>滚鍳<EFBFBD>滨垢摨𠉛鍂
<EFBFBD>桅<EFBFBD>3嚗锭AE摨𠉛鍂<EFBFBD>臬𢆡憭梯揖
- <EFBFBD>亦<EFBFBD>摰硺<EFBFBD><EFBFBD>亙<EFBFBD>嚗峕𪄳<EFBFBD>啣<EFBFBD>雿㯄<EFBFBD>霂臭縑<EFBFBD>?
- <EFBFBD><EFBFBD><EFBFBD><EFBFBD>𧋦<EFBFBD><EFBFBD>﹝蝚?<3F>?<3F>喲睸蝏誯<E89D8F>銝擧釣<E693A7>譍<EFBFBD>憿?
- 撖寧<EFBFBD>璉<EFBFBD><EFBFBD>主ockerfile<EFBFBD>𣬚㴓憓<EFBFBD><EFBFBD><EFBFBD>?
<EFBFBD>㴓 <20>餌<EFBFBD>
<EFBFBD>剖<EFBFBD>嚗<EFBFBD><EFBFBD>撌脩<EFBFBD>摰峕<EFBFBD>鈭<EFBFBD>I銝游<EFBFBD><EFBFBD>𠉛弦撟喳蝱<EFBFBD><EFBFBD><EFBFBD><EFBFBD>湧<EFBFBD>蝵莎<EFBFBD>
**<2A>函蔡<E587BD>鞉<EFBFBD>**嚗?
- <EFBFBD>?4銝芣<E98A9D><E88AA3>∪<EFBFBD><E288AA>冽<EFBFBD><E586BD>罸<EFBFBD>蝵莎<E89DB5>Python<6F><6E>ode.js<6A><73><EFBFBD>蝡胯<E89DA1><E883AF>㺭<EFBFBD>桀<EFBFBD>嚗?
- <EFBFBD>?<3F><><EFBFBD>匧<EFBFBD><E58CA7>賣迤撣貉<E692A3>銵?
- <EFBFBD>?<3F>祉<EFBFBD><E7A589>臭誑霈輸䔮
- <EFBFBD>?<3F>煺漣<E785BA>臬<EFBFBD>撠梁貌
<EFBFBD>函蔡<EFBFBD>園𡢿嚗?
- 憸<EFBFBD>恣<EFBFBD>園𡢿嚗?.5撠𤩺𧒄
- 摰鮋<EFBFBD><EFBFBD>園𡢿嚗𡁶漲6撠𤩺𧒄嚗<EFBFBD><EFBFBD><EFBFBD>恍䔮憸䀹<EFBFBD><EFBFBD>伐<EFBFBD>
**<2A>喲睸蝏誯<E89D8F>**嚗?
- <EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD><EFBFBD>滚<EFBFBD>憿餌移蝖桀龪<EFBFBD>?
- <EFBFBD>箏<EFBFBD>"<22>滚鍳摨𠉛鍂"<22>?<3F>函蔡摨𠉛鍂"
- Dockerfile敹<EFBFBD>◆<EFBFBD><EFBFBD>鉄<EFBFBD><EFBFBD><EFBFBD>匧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>辣
- 雿輻鍂VPC<EFBFBD>啣<EFBFBD><EFBFBD>匧<EFBFBD><EFBFBD>𨅯<EFBFBD>
- <EFBFBD>亙熒璉<EFBFBD><EFBFBD>亙<EFBFBD>憪见辣餈蠘<EFBFBD>頞喳<EFBFBD>
**銝衤<E98A9D>甇?*嚗?
- <EFBFBD>滨蔭HTTPS
- 蝏穃<EFBFBD><EFBFBD>笔<EFBFBD>
- <EFBFBD>滨蔭<EFBFBD>烐綉<EFBFBD>𡃏郎
- 隡睃<EFBFBD><EFBFBD>扯<EFBFBD>
- <EFBFBD>滨蔭<EFBFBD>芸𢆡憭<EFBFBD>遢
<EFBFBD><EFBFBD>﹝蝏湔擪嚗𡁏𧋦<EFBFBD><EFBFBD>﹝<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>