feat(admin): Add user management and upgrade to module permission system
Features - User Management (Phase 4.1): - Database: Add user_modules table for fine-grained module permissions - Database: Add 4 user permissions (view/create/edit/delete) to role_permissions - Backend: UserService (780 lines) - CRUD with tenant isolation - Backend: UserController + UserRoutes (648 lines) - 13 API endpoints - Backend: Batch import users from Excel - Frontend: UserListPage (412 lines) - list/filter/search/pagination - Frontend: UserFormPage (341 lines) - create/edit with module config - Frontend: UserDetailPage (393 lines) - details/tenant/module management - Frontend: 3 modal components (592 lines) - import/assign/configure - API: GET/POST/PUT/DELETE /api/admin/users/* endpoints Architecture Upgrade - Module Permission System: - Backend: Add getUserModules() method in auth.service - Backend: Login API returns modules array in user object - Frontend: AuthContext adds hasModule() method - Frontend: Navigation filters modules based on user.modules - Frontend: RouteGuard checks requiredModule instead of requiredVersion - Frontend: Remove deprecated version-based permission system - UX: Only show accessible modules in navigation (clean UI) - UX: Smart redirect after login (avoid 403 for regular users) Fixes: - Fix UTF-8 encoding corruption in ~100 docs files - Fix pageSize type conversion in userService (String to Number) - Fix authUser undefined error in TopNavigation - Fix login redirect logic with role-based access check - Update Git commit guidelines v1.2 with UTF-8 safety rules Database Changes: - CREATE TABLE user_modules (user_id, tenant_id, module_code, is_enabled) - ADD UNIQUE CONSTRAINT (user_id, tenant_id, module_code) - INSERT 4 permissions + role assignments - UPDATE PUBLIC tenant with 8 module subscriptions Technical: - Backend: 5 new files (~2400 lines) - Frontend: 10 new files (~2500 lines) - Docs: 1 development record + 2 status updates + 1 guideline update - Total: ~4900 lines of code Status: User management 100% complete, module permission system operational
This commit is contained in:
@@ -1,41 +1,50 @@
|
||||
# <EFBFBD>函蔡璉<EFBFBD><EFBFBD>交<EFBFBD><EFBFBD>?- 隞?<3F>唬<EFBFBD>蝥輻<E89DA5>摰峕㟲Checklist
|
||||
# 部署检查清单 - 从0到上线的完整Checklist
|
||||
|
||||
> **<EFBFBD><EFBFBD>﹝<EFBFBD><EFBFBD>𧋦嚗?* v1.0
|
||||
> **<EFBFBD>𥕦遣<EFBFBD>交<EFBFBD>嚗?* 2025-12-14
|
||||
> **<EFBFBD><EFBFBD>鍂<EFBFBD>箸艶嚗?* 擐𡝗活<F0A19D97>函蔡<E587BD>圈燵<E59C88>䔶<EFBFBD><E494B6>煺漣<E785BA>臬<EFBFBD>
|
||||
> **憸<EFBFBD>恣<EFBFBD>園𡢿嚗?* 4-5撠𤩺𧒄嚗<F0A79284><E59A97><EFBFBD><EFBFBD><EFBFBD>雿𨀣𧒄<F0A880A3>湛<EFBFBD>
|
||||
> **文档版本:** v1.0
|
||||
> **创建日期:** 2025-12-14
|
||||
> **适用场景:** 首次部署到阿里云生产环境
|
||||
> **预计时间:** 4-5小时(实际操作时间)
|
||||
|
||||
---
|
||||
|
||||
## 📋 使用说明
|
||||
|
||||
本清单按照部署顺序列出所有必需步骤,每个步骤包含:
|
||||
- <EFBFBD>?憭漤<E686AD>㗇<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>𣂼<EFBFBD><F0A382BC>枏㗲嚗?- <20>梧<EFBFBD> 憸<>恣<EFBFBD>園𡢿
|
||||
- ☐ 复选框(完成后打勾)
|
||||
- ⏱️ 预计时间
|
||||
- ⚠️ 关键注意事项
|
||||
- <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>獢<EFBFBD>曎<EFBFBD>?
|
||||
**撱箄悅嚗𡁏<E59A97><F0A1818F>唳<EFBFBD>憭滚<E686AD><E6BB9A>啁<EFBFBD>霈啗蔓隞塚<E99A9E><E5A19A>鞾★摰峕<E691B0><E5B395>?*
|
||||
- 🔗 参考文档链接
|
||||
|
||||
**建议:打印或复制到笔记软件,逐项完成。**
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>嗆挾1嚗𡁜抅蝖<EFBFBD>霈暹鴌<EFBFBD><EFBFBD><EFBFBD>嚗㇄ay 1銝𠰴<E98A9D>嚗?
|
||||
### 1.1 <20>輸<EFBFBD>鈭𤏸揭<F0A48FB8>瑕<EFBFBD>憭?
|
||||
<EFBFBD>?**摰𧼮<E691B0>霈方<E99C88>**
|
||||
## 阶段1:基础设施准备(Day 1上午)
|
||||
|
||||
### 1.1 阿里云账号准备
|
||||
|
||||
☐ **实名认证**
|
||||
- ⏱️ 5分钟
|
||||
- 阿里云控制台 > 账号管理 > 实名认证
|
||||
- <EFBFBD>𩤃<EFBFBD> 隡<><E99AA1>霈方<E99C88><E696B9><EFBFBD>閬<EFBFBD>𨯫銝𡁏<E98A9D><F0A1818F>?
|
||||
<EFBFBD>?**韐血噡<E8A180><E599A1><EFBFBD>?*
|
||||
- <20>梧<EFBFBD> 2<><32><EFBFBD>
|
||||
- 撱箄悅<E7AE84><E68285><EFBFBD>潘<EFBFBD>瞼500嚗<30><E59A97><EFBFBD><EFBFBD><EFBFBD><EFBFBD>祉漲瞼1,200嚗?- 韐寧鍂銝剖<E98A9D> > <20><><EFBFBD>?
|
||||
<EFBFBD>?**撘<><E69298>𡁏<EFBFBD><F0A1818F>?*
|
||||
- <20>梧<EFBFBD> 5<><35><EFBFBD>
|
||||
- <20><>閬<EFBFBD><E996AC><EFBFBD>𡁶<EFBFBD><F0A181B6>滚𦛚嚗? - <20>?SAE嚗𠄎erverless摨𠉛鍂撘閙<E69298>嚗? - <20>?RDS嚗<53><E59A97><EFBFBD>唳旿摨橒<E691A8>
|
||||
- <20>?OSS嚗<53>笆鞊∪<E99E8A><E288AA>剁<EFBFBD>
|
||||
- <20>?VPC嚗<43><E59A97><EFBFBD>厩<EFBFBD>蝏頣<E89D8F>
|
||||
- <20>?NAT蝵穃<E89DB5>
|
||||
- <20>?ACR嚗<52>捆<EFBFBD>券<EFBFBD><E588B8>𤩺<EFBFBD><F0A4A9BA>∴<EFBFBD>
|
||||
- <20>?ECS嚗<53><E59A97><EFBFBD>滚𦛚<E6BB9A>剁<EFBFBD>Dify<66>剁<EFBFBD>
|
||||
- ⚠️ 企业认证需要营业执照
|
||||
|
||||
<EFBFBD>?**<2A>𥕦遣RAM摮鞱揭<E99EB1>瘀<EFBFBD><E79880>舫<EFBFBD>劐<EFBFBD><E58A90>刻<EFBFBD>嚗?*
|
||||
☐ **账号充值**
|
||||
- ⏱️ 2分钟
|
||||
- 建议充值:¥500(首月成本约¥1,200)
|
||||
- 费用中心 > 充值
|
||||
|
||||
☐ **开通服务**
|
||||
- ⏱️ 5分钟
|
||||
- 需要开通的服务:
|
||||
- ✅ SAE(Serverless应用引擎)
|
||||
- ✅ RDS(云数据库)
|
||||
- ✅ OSS(对象存储)
|
||||
- ✅ VPC(专有网络)
|
||||
- ✅ NAT网关
|
||||
- ✅ ACR(容器镜像服务)
|
||||
- ✅ ECS(云服务器,Dify用)
|
||||
|
||||
☐ **创建RAM子账号(可选但推荐)**
|
||||
- ⏱️ 10分钟
|
||||
- RAM访问控制 > 用户 > 创建用户
|
||||
- 权限:AliyunSAEFullAccess, AliyunRDSFullAccess, AliyunOSSFullAccess
|
||||
@@ -43,88 +52,108 @@
|
||||
|
||||
---
|
||||
|
||||
### 1.2 VPC蝵𤑳<EFBFBD><EFBFBD>滨蔭 潃鐥<E6BD83>潃鐥<E6BD83>潃?
|
||||
<EFBFBD>?**<2A>𥕦遣VPC**
|
||||
- <20>梧<EFBFBD> 5<><35><EFBFBD>
|
||||
- VPC<50>批<EFBFBD><E689B9>?> <20>𥕦遣VPC
|
||||
- <20>滨妍嚗惨iclinical-vpc-prod
|
||||
- 蝵烐挾嚗?72.16.0.0/12
|
||||
- <20>啣<EFBFBD>嚗䬙n-hangzhou嚗<75>㜺撌痹<E6928C><E797B9>硋停餈穃𧑐<E7A983>?
|
||||
<EFBFBD>?**<2A>𥕦遣鈭斗揢<E69697>?*
|
||||
- <20>梧<EFBFBD> 3<><33><EFBFBD>
|
||||
- VPC霂行<E99C82> > 鈭斗揢<E69697>?> <20>𥕦遣鈭斗揢<E69697>?- <20>滨妍嚗惨iclinical-vsw-prod
|
||||
- <20>舐鍂<E88890>綽<EFBFBD><E7B6BD>𤩺㦤<F0A4A9BA>舐鍂<E88890>態
|
||||
- 蝵烐挾嚗?72.16.0.0/20
|
||||
### 1.2 VPC网络配置 ⭐⭐⭐⭐⭐
|
||||
|
||||
<EFBFBD>?**潃?<3F>𥕦遣NAT蝵穃<E89DB5>嚗<EFBFBD><E59A97><EFBFBD><EFBFBD>嚗<EFBFBD><E59A97>**
|
||||
☐ **创建VPC**
|
||||
- ⏱️ 5分钟
|
||||
- VPC控制台 > 创建VPC
|
||||
- 名称:aiclinical-vpc-prod
|
||||
- 网段:172.16.0.0/12
|
||||
- 地域:cn-hangzhou(杭州)或就近地域
|
||||
|
||||
☐ **创建交换机**
|
||||
- ⏱️ 3分钟
|
||||
- VPC详情 > 交换机 > 创建交换机
|
||||
- 名称:aiclinical-vsw-prod
|
||||
- 可用区:随机可用区A
|
||||
- 网段:172.16.0.0/20
|
||||
|
||||
☐ **⭐ 创建NAT网关(必需!)**
|
||||
- ⏱️ 15分钟
|
||||
- VPC<EFBFBD>批<EFBFBD><EFBFBD>?> NAT蝵穃<E89DB5> > <20>𥕦遣NAT蝵穃<E89DB5>
|
||||
- VPC控制台 > NAT网关 > 创建NAT网关
|
||||
- VPC:aiclinical-vpc-prod
|
||||
- 交换机:aiclinical-vsw-prod
|
||||
- 閫<EFBFBD>聢嚗𡁜<EFBFBD><EFBFBD>?- 霈∟晶<E2889F>孵<EFBFBD>嚗𡁏<E59A97>雿輻鍂<E8BCBB>讛恣韐?- <20>𩤃<EFBFBD> **瘝⊥<E7989D>NAT蝵穃<E89DB5>嚗峕<E59A97><E5B395>𡅅I<F0A18585>蠘<EFBFBD><E8A098>賭<EFBFBD>頞<EFBFBD>𧒄嚗?*
|
||||
- <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>`07-<2D>喲睸<E596B2>滨蔭銵亙<E98AB5>霂湔<E99C82>.md` 蝚?<3F>?
|
||||
<EFBFBD>?**<2A>𥕦遣撟嗥<E6929F>摰鍃IP**
|
||||
- 规格:小型
|
||||
- 计费方式:按使用量计费
|
||||
- ⚠️ **没有NAT网关,所有AI功能都会超时!**
|
||||
- 🔗 参考:`07-关键配置补充说明.md` 第1节
|
||||
|
||||
☐ **创建并绑定EIP**
|
||||
- ⏱️ 5分钟
|
||||
- NAT网关详情 > 弹性公网IP > 绑定EIP
|
||||
- 创建新EIP
|
||||
- 带宽:按使用流量
|
||||
- 记录EIP地址:________________
|
||||
|
||||
<EFBFBD>?**<2A>滨蔭SNAT<41>∠𤌍**
|
||||
☐ **配置SNAT条目**
|
||||
- ⏱️ 3分钟
|
||||
- NAT网关详情 > SNAT管理 > 创建SNAT条目
|
||||
- 交换机:aiclinical-vsw-prod
|
||||
- 公网IP:刚才创建的EIP
|
||||
- ⚠️ 这一步让SAE可以访问公网
|
||||
|
||||
<EFBFBD>?**<2A>𥕦遣摰匧<E691B0>蝏?*
|
||||
☐ **创建安全组**
|
||||
- ⏱️ 5分钟
|
||||
- ECS<EFBFBD>批<EFBFBD><EFBFBD>?> 摰匧<E691B0>蝏?> <20>𥕦遣摰匧<E691B0>蝏?- <20>滨妍嚗惨iclinical-sg-prod
|
||||
- ECS控制台 > 安全组 > 创建安全组
|
||||
- 名称:aiclinical-sg-prod
|
||||
- VPC:aiclinical-vpc-prod
|
||||
- 入方向规则:
|
||||
- <EFBFBD><EFBFBD>捂 80/TCP <EFBFBD>交<EFBFBD>嚗?72.16.0.0/12嚗ĀPC<EFBFBD><EFBFBD><EFBFBD>嚗? - <20><>捂 22/TCP <20>交<EFBFBD>嚗𡁏<E59A97><F0A1818F><EFBFBD><EFBFBD><EFBFBD>砍恕IP嚗𠄎SH蝞∠<E89D9E>嚗? - <20>垍<EFBFBD> <20><><EFBFBD>?<3F>交<EFBFBD>嚗?.0.0.0/0
|
||||
- 允许 80/TCP 来源:172.16.0.0/12(VPC内网)
|
||||
- 允许 22/TCP 来源:您的办公室IP(SSH管理)
|
||||
- 拒绝 所有 来源:0.0.0.0/0
|
||||
|
||||
---
|
||||
|
||||
### 1.3 RDS PostgreSQL 15 部署
|
||||
|
||||
<EFBFBD>?**<2A>𥕦遣RDS摰硺<E691B0>**
|
||||
- <EFBFBD>梧<EFBFBD> 10<31><30><EFBFBD>嚗<EFBFBD><E59A97>敺<EFBFBD><E695BA>撱?5<><35><EFBFBD>嚗?- RDS<44>批<EFBFBD><E689B9>?> <20>𥕦遣摰硺<E691B0>
|
||||
☐ **创建RDS实例**
|
||||
- ⏱️ 10分钟(等待创建15分钟)
|
||||
- RDS控制台 > 创建实例
|
||||
- 数据库类型:PostgreSQL
|
||||
- <EFBFBD><EFBFBD>𧋦嚗?5
|
||||
- 閫<EFBFBD>聢嚗鬏ds.pg.s2.large嚗?<3F>?GB嚗?- 摮睃<E691AE>嚗?00GB SSD
|
||||
- 版本:15
|
||||
- 规格:rds.pg.s2.large(2核4GB)
|
||||
- 存储:100GB SSD
|
||||
- VPC:aiclinical-vpc-prod
|
||||
- 交换机:aiclinical-vsw-prod
|
||||
- 记录内网地址:rm-____________.pg.rds.aliyuncs.com
|
||||
|
||||
<EFBFBD>?**<2A>滨蔭<E6BBA8>賢<EFBFBD><E8B3A2>?*
|
||||
☐ **配置白名单**
|
||||
- ⏱️ 2分钟
|
||||
- RDS摰硺<EFBFBD>霂行<EFBFBD> > <20>唳旿摰匧<E691B0><E58CA7>?> <20>賢<EFBFBD><E8B3A2>閗挽蝵?- 瘛餃<E7989B><E9A483>賢<EFBFBD><E8B3A2>訫<EFBFBD>蝏<EFBFBD><E89D8F>sae-vpc
|
||||
- IP<EFBFBD>啣<EFBFBD>嚗?72.16.0.0/12嚗ĀPC蝵烐挾嚗?- <20>𩤃<EFBFBD> **敹<>◆<EFBFBD>汲PC蝵烐挾嚗䔶<E59A97><E494B6>賜鍂<E8B39C>閙㦤IP嚗?*
|
||||
- RDS实例详情 > 数据安全性 > 白名单设置
|
||||
- 添加白名单分组:sae-vpc
|
||||
- IP地址:172.16.0.0/12(VPC网段)
|
||||
- ⚠️ **必须用VPC网段,不能用单机IP!**
|
||||
- 🔗 参考:`PostgreSQL部署策略-摸底报告.md`
|
||||
|
||||
<EFBFBD>?**<2A>𥕦遣<F0A595A6>唳旿摨栞揭<E6A09E>?*
|
||||
☐ **创建数据库账号**
|
||||
- ⏱️ 3分钟
|
||||
- RDS实例详情 > 账号管理 > 创建账号
|
||||
- 账号名:aiclinical_rw
|
||||
- 密码:(16位强密码,记录到密码管理器)
|
||||
- 韐血噡蝐餃<EFBFBD>嚗𡁏芦<EFBFBD>朞揭<EFBFBD>?- <20><><EFBFBD><EFBFBD>唳旿摨橒<E691A8>蝔滚<E89D94><E6BB9A>𥕦遣
|
||||
- 账号类型:普通账号
|
||||
- 授权数据库:稍后创建
|
||||
|
||||
<EFBFBD>?**<2A>𥕦遣<F0A595A6>唳旿摨?*
|
||||
☐ **创建数据库**
|
||||
- ⏱️ 2分钟
|
||||
- RDS摰硺<EFBFBD>霂行<EFBFBD> > <20>唳旿摨梶恣<E6A2B6>?> <20>𥕦遣<F0A595A6>唳旿摨?- <20>唳旿摨枏<E691A8>嚗惨i_clinical_research
|
||||
- RDS实例详情 > 数据库管理 > 创建数据库
|
||||
- 数据库名:ai_clinical_research
|
||||
- 字符集:UTF8
|
||||
- 授权账号:aiclinical_rw(读写)
|
||||
|
||||
<EFBFBD>?**<2A>滨蔭<E6BBA8>芸𢆡憭<F0A286A1>遢**
|
||||
☐ **配置自动备份**
|
||||
- ⏱️ 3分钟
|
||||
- RDS实例详情 > 备份恢复 > 备份设置
|
||||
- <EFBFBD>唳旿憭<EFBFBD>遢靽萘<EFBFBD>嚗?憭?- <20>亙<EFBFBD>憭<EFBFBD>遢靽萘<E99DBD>嚗?憭抬<E686AD><E68AAC>𩤃<EFBFBD> 敹<>◆撘<E29786><E69298>荔<EFBFBD><E88D94>舀<EFBFBD>PITR嚗?- 憭<>遢<EFBFBD>冽<EFBFBD>嚗𡁏<E59A97>憭?- 憭<>遢<EFBFBD>園𡢿嚗?2:00-04:00嚗<30><E59A97><EFBFBD>剁<EFBFBD>
|
||||
- 数据备份保留:7天
|
||||
- 日志备份保留:7天(⚠️ 必须开启,支持PITR)
|
||||
- 备份周期:每天
|
||||
- 备份时间:02:00-04:00(凌晨)
|
||||
|
||||
<EFBFBD>?**撖澆<E69296><E6BE86>唳旿摨橒<E691A8>pg_dump嚗?*
|
||||
☐ **导入数据库(pg_dump)**
|
||||
- ⏱️ 5分钟
|
||||
- <EFBFBD>砍𧑐<EFBFBD>扯<EFBFBD>嚗? ```bash
|
||||
# 1. 撖澆枂<E6BE86>砍𧑐<E7A08D>唳旿摨? docker exec ai-clinical-postgres pg_dump -U postgres -d ai_clinical_research \
|
||||
- 本地执行:
|
||||
```bash
|
||||
# 1. 导出本地数据库
|
||||
docker exec ai-clinical-postgres pg_dump -U postgres -d ai_clinical_research \
|
||||
--format=plain --no-owner --no-acl --encoding=UTF8 \
|
||||
> backup_$(date +%Y%m%d_%H%M%S).sql
|
||||
|
||||
@@ -135,8 +164,9 @@
|
||||
-d ai_clinical_research \
|
||||
-f backup_20251214_100000.sql
|
||||
```
|
||||
- <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>`PostgreSQL<EFBFBD>函蔡蝑𣇉裦-<2D>詨<EFBFBD><E8A9A8>亙<EFBFBD>.md` 蝚?<3F>?
|
||||
<EFBFBD>?**撉諹<E69289><E8ABB9>唳旿摨枏紡<E69E8F>?*
|
||||
- 🔗 参考:`PostgreSQL部署策略-摸底报告.md` 第4节
|
||||
|
||||
☐ **验证数据库导入**
|
||||
- ⏱️ 3分钟
|
||||
- 连接RDS,执行:
|
||||
```sql
|
||||
@@ -144,7 +174,8 @@
|
||||
\dn
|
||||
-- 应该看到10个Schema
|
||||
|
||||
-- 撉諹<EFBFBD>銵冽㺭<EFBFBD>? SELECT schemaname, COUNT(*)
|
||||
-- 验证表数量
|
||||
SELECT schemaname, COUNT(*)
|
||||
FROM pg_tables
|
||||
WHERE schemaname NOT IN ('pg_catalog', 'information_schema')
|
||||
GROUP BY schemaname;
|
||||
@@ -152,68 +183,80 @@
|
||||
|
||||
-- 验证数据
|
||||
SELECT COUNT(*) FROM platform_schema.users;
|
||||
-- 摨磰砲<EFBFBD>?<3F>∴<EFBFBD><E288B4>碶<EFBFBD><E7A2B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD>㺭<EFBFBD>𧶏<EFBFBD>
|
||||
-- 应该有3条(或你的实际数量)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 1.4 OSS对象存储配置
|
||||
|
||||
<EFBFBD>?**<2A>𥕦遣OSS Bucket**
|
||||
☐ **创建OSS Bucket**
|
||||
- ⏱️ 5分钟
|
||||
- OSS<EFBFBD>批<EFBFBD><EFBFBD>?> Bucket<EFBFBD>𡑒” > <20>𥕦遣Bucket
|
||||
- OSS控制台 > Bucket列表 > 创建Bucket
|
||||
- Bucket名称:aiclinical-data-prod
|
||||
- 地域:cn-hangzhou(与VPC同地域)
|
||||
- 霂餃<EFBFBD><EFBFBD><EFBFBD><EFBFBD>嚗𡁶<EFBFBD><EFBFBD>㚁<EFBFBD>Private嚗争<EFBFBD>儭?敹<>◆蝘<E29786><E89D98>
|
||||
- <EFBFBD><EFBFBD>𧋦<EFBFBD>批<EFBFBD>嚗𡁜<EFBFBD><EFBFBD>?- <20>滚𦛚蝡臬<E89DA1>撖<EFBFBD><E69296><EFBFBD>喲𡡒嚗<F0A1A192>虾<EFBFBD>㚁<EFBFBD>
|
||||
- 读写权限:私有(Private)⚠️ 必须私有
|
||||
- 版本控制:关闭
|
||||
- 服务端加密:关闭(可选)
|
||||
|
||||
<EFBFBD>?**<2A>滨蔭<E6BBA8>笔𦶢<E7AC94>冽<EFBFBD>閫<EFBFBD><E996AB>嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>**
|
||||
☐ **配置生命周期规则(可选)**
|
||||
- ⏱️ 3分钟
|
||||
- Bucket详情 > 基础设置 > 生命周期
|
||||
- 规则名称:delete-temp-files
|
||||
- 应用范围:uploads/temp/
|
||||
- <EFBFBD>滢<EFBFBD>嚗𡁜<EFBFBD><EFBFBD>?- 憭拇㺭嚗?0憭抬<E686AD>銝湔𧒄<E6B994><F0A79284>辣30憭拙<E686AD><E68B99>芸𢆡<E88AB8>𣳇膄嚗?
|
||||
<EFBFBD>?**<2A>𥕦遣RAM閫坿𠧧嚗<F0A0A7A7>綫<EFBFBD>琜<EFBFBD>**
|
||||
- 操作:删除
|
||||
- 天数:30天(临时文件30天后自动删除)
|
||||
|
||||
☐ **创建RAM角色(推荐)**
|
||||
- ⏱️ 10分钟
|
||||
- RAM访问控制 > 角色 > 创建角色
|
||||
- 閫坿𠧧蝐餃<EFBFBD>嚗𡁏芦<EFBFBD>𡁏<EFBFBD><EFBFBD>∟<EFBFBD><EFBFBD>?- <20>𦯀縑<F0A6AF80>滚𦛚嚗锭AE
|
||||
- 角色类型:普通服务角色
|
||||
- 受信服务:SAE
|
||||
- 角色名称:AliyunSAEDefaultRole
|
||||
- 权限策略:AliyunOSSFullAccess
|
||||
- <EFBFBD>𩤃<EFBFBD> 雿輻鍂RAM閫坿𠧧瘥𨀞ccessKey<EFBFBD>游<EFBFBD><EFBFBD>?
|
||||
<EFBFBD>?**霈啣<E99C88>OSS<53>滨蔭靽⊥<E99DBD>**
|
||||
- ⚠️ 使用RAM角色比AccessKey更安全
|
||||
|
||||
☐ **记录OSS配置信息**
|
||||
- Bucket名称:aiclinical-data-prod
|
||||
- 地域:cn-hangzhou
|
||||
- 内网Endpoint:oss-cn-hangzhou-internal.aliyuncs.com
|
||||
- AccessKey ID嚗𡄯<EFBFBD>憒<EFBFBD><EFBFBD>銝滨鍂RAM閫坿𠧧嚗?- AccessKey Secret嚗𡄯<E59A97>憒<EFBFBD><E68692>銝滨鍂RAM閫坿𠧧嚗?
|
||||
- AccessKey ID:(如果不用RAM角色)
|
||||
- AccessKey Secret:(如果不用RAM角色)
|
||||
|
||||
---
|
||||
|
||||
### 1.5 ACR容器镜像仓库配置
|
||||
|
||||
<EFBFBD>?**<2A>𥕦遣<F0A595A6>賢<EFBFBD>蝛粹𡢿**
|
||||
☐ **创建命名空间**
|
||||
- ⏱️ 3分钟
|
||||
- 容器镜像服务 > 命名空间 > 创建命名空间
|
||||
- 命名空间:aiclinical
|
||||
- 蝐餃<EFBFBD>嚗𡁶<EFBFBD><EFBFBD>?
|
||||
<EFBFBD>?**<2A>滨蔭霈輸䔮<E8BCB8>剛<EFBFBD>**
|
||||
- 类型:私有
|
||||
|
||||
☐ **配置访问凭证**
|
||||
- ⏱️ 2分钟
|
||||
- 容器镜像服务 > 访问凭证 > 设置固定密码
|
||||
- <EFBFBD>冽<EFBFBD><EFBFBD>㵪<EFBFBD>嚗<EFBFBD>燵<EFBFBD>䔶<EFBFBD>韐血噡嚗?- 撖<><E69296>嚗𡄯<E59A97>霈曄蔭銝<E894AD>銝芸撩撖<E692A9><E69296>嚗?- 霈啣<E99C88><E595A3>餃<EFBFBD><E9A483>賭誘嚗? ```bash
|
||||
- 用户名:(阿里云账号)
|
||||
- 密码:(设置一个强密码)
|
||||
- 记录登录命令:
|
||||
```bash
|
||||
docker login --username=your-account registry.cn-hangzhou.aliyuncs.com
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>嗆挾2嚗𡁏瓲敹<EFBFBD><EFBFBD><EFBFBD>⊿<EFBFBD>蝵莎<EFBFBD>Day 1銝见<E98A9D>嚗?
|
||||
## 阶段2:核心服务部署(Day 1下午)
|
||||
|
||||
### 2.1 Node.js后端部署
|
||||
|
||||
<EFBFBD>?**<2A>砍𧑐隞<F0A79190><E99A9E><EFBFBD><EFBFBD><EFBFBD>**
|
||||
☐ **本地代码准备**
|
||||
- ⏱️ 10分钟
|
||||
- 确保代码最新:`git pull origin main`
|
||||
- 安装依赖:`cd backend && npm install`
|
||||
- 编译代码:`npm run build`
|
||||
- 验证编译:`ls dist/` 应该有编译后的JS文件
|
||||
|
||||
<EFBFBD>?**Prisma<EFBFBD>滚<EFBFBD><EFBFBD>峕郊嚗<EFBFBD><EFBFBD>閬<EFBFBD><EFBFBD>**
|
||||
☐ **Prisma反向同步(重要)**
|
||||
- ⏱️ 5分钟
|
||||
- 连接RDS,执行:
|
||||
```bash
|
||||
@@ -227,18 +270,21 @@
|
||||
# 生成Prisma Client
|
||||
npx prisma generate
|
||||
```
|
||||
- <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>`05-Node.js<EFBFBD>𡒊垢-SAE摰孵膥<EFBFBD>函蔡<EFBFBD><EFBFBD><EFBFBD>.md` 蝚?<3F>?
|
||||
<EFBFBD>?**靽格㺿HTTP Client頞<74>𧒄<EFBFBD>滨蔭**
|
||||
- 🔗 参考:`05-Node.js后端-SAE容器部署指南.md` 第4节
|
||||
|
||||
☐ **修改HTTP Client超时配置**
|
||||
- ⏱️ 5分钟
|
||||
- 编辑 `backend/src/common/http/httpClient.ts`
|
||||
- 霈曄蔭timeout: 120000嚗?20蝘𡜐<E89D98>
|
||||
- <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>`07-<2D>喲睸<E596B2>滨蔭銵亙<E98AB5>霂湔<E99C82>.md` 蝚?<3F>?
|
||||
<EFBFBD>?**靽格㺿Dify Client摰寥<E691B0>憭<EFBFBD><E686AD>**
|
||||
- 设置timeout: 120000(120秒)
|
||||
- 🔗 参考:`07-关键配置补充说明.md` 第3节
|
||||
|
||||
☐ **修改Dify Client容错处理**
|
||||
- ⏱️ 5分钟
|
||||
- 编辑 `backend/src/common/rag/DifyClient.ts`
|
||||
- 添加临时Key容错逻辑
|
||||
- <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>`07-<2D>喲睸<E596B2>滨蔭銵亙<E98AB5>霂湔<E99C82>.md` 蝚?<3F>?
|
||||
<EFBFBD>?**<2A><>遣Docker<65>𨅯<EFBFBD>**
|
||||
- 🔗 参考:`07-关键配置补充说明.md` 第2节
|
||||
|
||||
☐ **构建Docker镜像**
|
||||
- ⏱️ 5分钟
|
||||
- ```bash
|
||||
cd backend
|
||||
@@ -246,7 +292,7 @@
|
||||
```
|
||||
- 验证镜像:`docker images | grep backend`
|
||||
|
||||
<EFBFBD>?**<2A>砍𧑐瘚贝<E7989A><E8B49D>𨅯<EFBFBD>**
|
||||
☐ **本地测试镜像**
|
||||
- ⏱️ 5分钟
|
||||
- ```bash
|
||||
docker run -p 3001:3001 \
|
||||
@@ -256,29 +302,32 @@
|
||||
```
|
||||
- 测试健康检查:`curl http://localhost:3001/health`
|
||||
|
||||
<EFBFBD>?**<2A>券<EFBFBD><E588B8><EFBFBD>ACR**
|
||||
☐ **推送到ACR**
|
||||
- ⏱️ 3分钟
|
||||
- ```bash
|
||||
docker tag backend:v1.0.0 registry.cn-hangzhou.aliyuncs.com/aiclinical/backend:v1.0.0
|
||||
docker push registry.cn-hangzhou.aliyuncs.com/aiclinical/backend:v1.0.0
|
||||
```
|
||||
|
||||
<EFBFBD>?**<2A>𥕦遣SAE摨𠉛鍂**
|
||||
☐ **创建SAE应用**
|
||||
- ⏱️ 10分钟
|
||||
- SAE<EFBFBD>批<EFBFBD><EFBFBD>?> 摨𠉛鍂<F0A0899B>𡑒” > <20>𥕦遣摨𠉛鍂
|
||||
- SAE控制台 > 应用列表 > 创建应用
|
||||
- 应用名称:aiclinical-backend
|
||||
- <EFBFBD>函蔡<EFBFBD>孵<EFBFBD>嚗𡁜捆<EFBFBD>券<EFBFBD><EFBFBD>?- <20>𨅯<EFBFBD><F0A885AF>啣<EFBFBD>嚗鬏egistry.cn-hangzhou.aliyuncs.com/aiclinical/backend:v1.0.0
|
||||
- 部署方式:容器镜像
|
||||
- 镜像地址:registry.cn-hangzhou.aliyuncs.com/aiclinical/backend:v1.0.0
|
||||
- VPC:aiclinical-vpc-prod
|
||||
- 交换机:aiclinical-vsw-prod
|
||||
- 摰硺<EFBFBD>閫<EFBFBD>聢嚗?<3F>?GB
|
||||
- 摰硺<EFBFBD><EFBFBD>圈<EFBFBD>嚗𡁏<EFBFBD>撠?嚗峕<E59A97>憭?0
|
||||
- 实例规格:1核2GB
|
||||
- 实例数量:最小2,最大10
|
||||
- 健康检查:HTTP /health
|
||||
|
||||
<EFBFBD>?**<2A>滨蔭<E6BBA8>臬<EFBFBD><E887AC>㗛<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>殷<EFBFBD>**
|
||||
☐ **配置环境变量(关键)**
|
||||
- ⏱️ 10分钟
|
||||
- SAE应用详情 > 环境变量
|
||||
- 敹<EFBFBD><EFBFBD><EFBFBD>㗛<EFBFBD>嚗? ```bash
|
||||
# <20>唳旿摨? DATABASE_URL=postgresql://aiclinical_rw:password@rm-xxxxx.pg.rds.aliyuncs.com:5432/ai_clinical_research?connection_limit=10&pool_timeout=10
|
||||
- 必需变量:
|
||||
```bash
|
||||
# 数据库
|
||||
DATABASE_URL=postgresql://aiclinical_rw:password@rm-xxxxx.pg.rds.aliyuncs.com:5432/ai_clinical_research?connection_limit=10&pool_timeout=10
|
||||
|
||||
# OSS
|
||||
STORAGE_TYPE=oss
|
||||
@@ -287,14 +336,16 @@
|
||||
OSS_ACCESS_KEY_ID=LTAI5***
|
||||
OSS_ACCESS_KEY_SECRET=***
|
||||
|
||||
# 蝻枏<EFBFBD>/<2F>笔<EFBFBD>嚗㇊ostgres-Only嚗? CACHE_TYPE=postgres
|
||||
# 缓存/队列(Postgres-Only)
|
||||
CACHE_TYPE=postgres
|
||||
QUEUE_TYPE=pgboss
|
||||
|
||||
# Dify嚗<EFBFBD><EFBFBD>儭?銝湔𧒄<E6B994>潘<EFBFBD>
|
||||
# Dify(⚠️ 临时值)
|
||||
DIFY_API_URL=http://172.16.x.x/v1
|
||||
DIFY_API_KEY=temp_placeholder_will_update_later
|
||||
|
||||
# Python敺格<EFBFBD><EFBFBD>∴<EFBFBD>蝔滚<EFBFBD>憛怠<EFBFBD>嚗? EXTRACTION_SERVICE_URL=http://172.16.x.x:8000 # <20>𩤃<EFBFBD> 雿輻鍂Python<6F>滚𦛚<E6BB9A><F0A69B9A><EFBFBD>蝵飡P嚗<50><E59A97>SAE<41>批<EFBFBD><E689B9>啗繮<E59597>吔<EFBFBD>
|
||||
# Python微服务(稍后填写)
|
||||
EXTRACTION_SERVICE_URL=http://172.16.x.x:8000 # ⚠️ 使用Python服务的内网IP(从SAE控制台获取)
|
||||
|
||||
# LLM API
|
||||
DEEPSEEK_API_KEY=sk-***
|
||||
@@ -302,17 +353,20 @@
|
||||
# 其他
|
||||
NODE_ENV=production
|
||||
PORT=3001
|
||||
JWT_SECRET=嚗<EFBFBD><EFBFBD><EFBFBD>𣂷<EFBFBD>銝芸撩撖<EFBFBD>𤨎嚗? ```
|
||||
JWT_SECRET=(生成一个强密钥)
|
||||
```
|
||||
|
||||
<EFBFBD>?**<2A>函蔡摨𠉛鍂**
|
||||
- <EFBFBD>梧<EFBFBD> 5<><35><EFBFBD>嚗<EFBFBD><E59A97>敺<EFBFBD><E695BA>蝵?0<><30><EFBFBD>嚗?- SAE<41>批<EFBFBD><E689B9>?> <20>函蔡
|
||||
☐ **部署应用**
|
||||
- ⏱️ 5分钟(等待部署10分钟)
|
||||
- SAE控制台 > 部署
|
||||
- 等待实例启动
|
||||
- <EFBFBD>亦<EFBFBD><EFBFBD>亙<EFBFBD>嚗𡁜<EFBFBD>霂亦<EFBFBD><EFBFBD>?<3F>唳旿摨栞<E691A8><E6A09E>交<EFBFBD><E4BAA4>?
|
||||
- 查看日志:应该看到"数据库连接成功"
|
||||
|
||||
<EFBFBD>?**撉諹<E69289><E8ABB9>𡒊垢<F0A1928A>滚𦛚**
|
||||
☐ **验证后端服务**
|
||||
- ⏱️ 3分钟
|
||||
- ```bash
|
||||
# <EFBFBD>亙熒璉<EFBFBD><EFBFBD>? curl http://aiclinical-backend.sae:3001/health
|
||||
# 健康检查
|
||||
curl http://aiclinical-backend.sae:3001/health
|
||||
# 应该返回 200 OK
|
||||
|
||||
# 测试用户注册
|
||||
@@ -324,44 +378,48 @@
|
||||
|
||||
---
|
||||
|
||||
### 2.2 Python敺格<EFBFBD><EFBFBD>⊿<EFBFBD>蝵?
|
||||
<EFBFBD>?**<2A>砍𧑐隞<F0A79190><E99A9E><EFBFBD><EFBFBD><EFBFBD>**
|
||||
### 2.2 Python微服务部署
|
||||
|
||||
☐ **本地代码准备**
|
||||
- ⏱️ 5分钟
|
||||
- `cd extraction_service`
|
||||
- 确保requirements.txt正确
|
||||
|
||||
<EFBFBD>?**靽格㺿Dockerfile嚗Áorkers<EFBFBD>𣂼<EFBFBD>嚗?*
|
||||
☐ **修改Dockerfile(Workers限制)**
|
||||
- ⏱️ 2分钟
|
||||
- 编辑 `extraction_service/Dockerfile`
|
||||
- CMD设置workers=2
|
||||
- <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>`07-<2D>喲睸<E596B2>滨蔭銵亙<E98AB5>霂湔<E99C82>.md` 蝚?<3F>?
|
||||
<EFBFBD>?**<2A><>遣Docker<65>𨅯<EFBFBD>**
|
||||
- <20>梧<EFBFBD> 10<31><30><EFBFBD>嚗㇊ython<6F>𨅯<EFBFBD>颲<EFBFBD>之嚗?- ```bash
|
||||
- 🔗 参考:`07-关键配置补充说明.md` 第6节
|
||||
|
||||
☐ **构建Docker镜像**
|
||||
- ⏱️ 10分钟(Python镜像较大)
|
||||
- ```bash
|
||||
cd extraction_service
|
||||
docker build -t python-service:v1.0.0 .
|
||||
```
|
||||
|
||||
<EFBFBD>?**<2A>砍𧑐瘚贝<E7989A><E8B49D>𨅯<EFBFBD>**
|
||||
☐ **本地测试镜像**
|
||||
- ⏱️ 5分钟
|
||||
- ```bash
|
||||
docker run -p 8000:8000 python-service:v1.0.0
|
||||
curl http://localhost:8000/health
|
||||
```
|
||||
|
||||
<EFBFBD>?**<2A>券<EFBFBD><E588B8><EFBFBD>ACR**
|
||||
☐ **推送到ACR**
|
||||
- ⏱️ 5分钟
|
||||
- ```bash
|
||||
docker tag python-service:v1.0.0 registry.cn-hangzhou.aliyuncs.com/aiclinical/python-service:v1.0.0
|
||||
docker push registry.cn-hangzhou.aliyuncs.com/aiclinical/python-service:v1.0.0
|
||||
```
|
||||
|
||||
<EFBFBD>?**<2A>𥕦遣SAE摨𠉛鍂**
|
||||
☐ **创建SAE应用**
|
||||
- ⏱️ 10分钟
|
||||
- 应用名称:aiclinical-python-service
|
||||
- 镜像:registry.cn-hangzhou.aliyuncs.com/aiclinical/python-service:v1.0.0
|
||||
- 摰硺<EFBFBD>閫<EFBFBD>聢嚗?<3F>?GB嚗<42><E59A97>儭?銝滩<E98A9D>雿𦒘<E99BBF>2GB嚗?- 摰硺<E691B0><E7A1BA>圈<EFBFBD>嚗𡁏<E59A97>撠?嚗峕<E59A97>憭?
|
||||
- 实例规格:1核2GB(⚠️ 不要低于2GB)
|
||||
- 实例数量:最小1,最大3
|
||||
|
||||
<EFBFBD>?**<2A>滨蔭<E6BBA8>臬<EFBFBD><E887AC>㗛<EFBFBD>**
|
||||
☐ **配置环境变量**
|
||||
- ⏱️ 3分钟
|
||||
- ```bash
|
||||
OSS_REGION=cn-hangzhou
|
||||
@@ -370,54 +428,56 @@
|
||||
OSS_ACCESS_KEY_SECRET=***
|
||||
```
|
||||
|
||||
<EFBFBD>?**<2A>函蔡撟園<E6929F>霂?*
|
||||
☐ **部署并验证**
|
||||
- ⏱️ 5分钟
|
||||
- 部署应用
|
||||
- 瘚贝<EFBFBD>嚗䫤curl http://172.16.x.x:8000/health`嚗<EFBFBD>蝙<EFBFBD>典<EFBFBD><EFBFBD><EFBFBD><EFBFBD>蝵飡P嚗?
|
||||
- 测试:`curl http://172.16.x.x:8000/health`(使用实际内网IP)
|
||||
|
||||
---
|
||||
|
||||
### 2.3 前端部署
|
||||
|
||||
<EFBFBD>?**<2A>砍𧑐隞<F0A79190><E99A9E><EFBFBD><EFBFBD><EFBFBD>**
|
||||
☐ **本地代码准备**
|
||||
- ⏱️ 10分钟
|
||||
- `cd frontend-v2`
|
||||
- `npm install`
|
||||
- `npm run build`
|
||||
|
||||
<EFBFBD>?**靽格㺿nginx.conf嚗<EFBFBD><EFBFBD>隞嗅之撠誯<EFBFBD><EFBFBD>塚<EFBFBD>**
|
||||
☐ **修改nginx.conf(文件大小限制)**
|
||||
- ⏱️ 2分钟
|
||||
- 编辑 `frontend-v2/nginx.conf.template`
|
||||
- 添加 `client_max_body_size 50M;`
|
||||
- <20><> <20><><EFBFBD><EFBFBD><EFBFBD>`07-<2D>喲睸<E596B2>滨蔭銵亙<E98AB5>霂湔<E99C82>.md` 蝚?<3F>?
|
||||
<EFBFBD>?**<2A><>遣Docker<65>𨅯<EFBFBD>**
|
||||
- 🔗 参考:`07-关键配置补充说明.md` 第5节
|
||||
|
||||
☐ **构建Docker镜像**
|
||||
- ⏱️ 5分钟
|
||||
- ```bash
|
||||
cd frontend-v2
|
||||
docker build -t frontend:v1.0.0 .
|
||||
```
|
||||
|
||||
<EFBFBD>?**<2A>券<EFBFBD><E588B8><EFBFBD>ACR**
|
||||
☐ **推送到ACR**
|
||||
- ⏱️ 3分钟
|
||||
- ```bash
|
||||
docker tag frontend:v1.0.0 registry.cn-hangzhou.aliyuncs.com/aiclinical/frontend:v1.0.0
|
||||
docker push registry.cn-hangzhou.aliyuncs.com/aiclinical/frontend:v1.0.0
|
||||
```
|
||||
|
||||
<EFBFBD>?**<2A>𥕦遣SAE摨𠉛鍂**
|
||||
☐ **创建SAE应用**
|
||||
- ⏱️ 10分钟
|
||||
- 应用名称:aiclinical-frontend
|
||||
- 镜像:registry.cn-hangzhou.aliyuncs.com/aiclinical/frontend:v1.0.0
|
||||
- 摰硺<EFBFBD>閫<EFBFBD>聢嚗?.5<EFBFBD>?GB
|
||||
- 摰硺<EFBFBD><EFBFBD>圈<EFBFBD>嚗?
|
||||
- 实例规格:0.5核1GB
|
||||
- 实例数量:1
|
||||
|
||||
<EFBFBD>?**<2A>滨蔭<E6BBA8>臬<EFBFBD><E887AC>㗛<EFBFBD>**
|
||||
☐ **配置环境变量**
|
||||
- ⏱️ 2分钟
|
||||
- ```bash
|
||||
BACKEND_SERVICE_HOST=aiclinical-backend.sae
|
||||
BACKEND_SERVICE_PORT=3001
|
||||
```
|
||||
|
||||
<EFBFBD>?**<2A>函蔡撟園<E6929F>霂?*
|
||||
☐ **部署并验证**
|
||||
- ⏱️ 5分钟
|
||||
- 部署应用
|
||||
- 浏览器访问:http://前端公网地址
|
||||
@@ -425,23 +485,28 @@
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>嗆挾3嚗鋽ify<EFBFBD>滚𦛚<EFBFBD>函蔡嚗㇄ay 2銝𠰴<E98A9D>嚗?
|
||||
### 3.1 ECS<43>滚𦛚<E6BB9A>典<EFBFBD>憭?
|
||||
<EFBFBD>?**<2A>𥕦遣ECS摰硺<E691B0>**
|
||||
- <20>梧<EFBFBD> 10<31><30><EFBFBD>嚗<EFBFBD><E59A97>敺<EFBFBD><E695BA>撱?<3F><><EFBFBD>嚗?- ECS<43>批<EFBFBD><E689B9>?> <20>𥕦遣摰硺<E691B0>
|
||||
- 摰硺<E691B0>閫<EFBFBD>聢嚗塄cs.c6.xlarge嚗?<3F>?GB嚗?- <20>𨅯<EFBFBD>嚗䦧buntu 22.04
|
||||
## 阶段3:Dify服务部署(Day 2上午)
|
||||
|
||||
### 3.1 ECS服务器准备
|
||||
|
||||
☐ **创建ECS实例**
|
||||
- ⏱️ 10分钟(等待创建5分钟)
|
||||
- ECS控制台 > 创建实例
|
||||
- 实例规格:ecs.c6.xlarge(4核8GB)
|
||||
- 镜像:Ubuntu 22.04
|
||||
- VPC:aiclinical-vpc-prod
|
||||
- 交换机:aiclinical-vsw-prod
|
||||
- 安全组:aiclinical-sg-prod
|
||||
- <EFBFBD>祉<EFBFBD>IP嚗𡁜<EFBFBD><EFBFBD>㵪<EFBFBD><EFBFBD>其<EFBFBD>蝞∠<EFBFBD><EFBFBD>㷉ify霈輸䔮嚗?- 霈啣<E99C88><E595A3>祉<EFBFBD>IP嚗噔_______________
|
||||
- 公网IP:分配(用于管理和Dify访问)
|
||||
- 记录公网IP:________________
|
||||
|
||||
<EFBFBD>?**SSH<EFBFBD>餃<EFBFBD>ECS**
|
||||
☐ **SSH登录ECS**
|
||||
- ⏱️ 2分钟
|
||||
- ```bash
|
||||
ssh root@ECS公网IP
|
||||
```
|
||||
|
||||
<EFBFBD>?**摰㕑<E691B0>Docker**
|
||||
☐ **安装Docker**
|
||||
- ⏱️ 5分钟
|
||||
- ```bash
|
||||
curl -fsSL https://get.docker.com | bash
|
||||
@@ -450,7 +515,7 @@
|
||||
docker --version
|
||||
```
|
||||
|
||||
<EFBFBD>?**摰㕑<E691B0>Docker Compose**
|
||||
☐ **安装Docker Compose**
|
||||
- ⏱️ 3分钟
|
||||
- ```bash
|
||||
curl -L "https://github.com/docker/compose/releases/download/v2.20.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
@@ -458,7 +523,7 @@
|
||||
docker-compose --version
|
||||
```
|
||||
|
||||
<EFBFBD>?**<2A>滨蔭Swap嚗<70>俈甇㏕OM嚗?*
|
||||
☐ **配置Swap(防止OOM)**
|
||||
- ⏱️ 5分钟
|
||||
- ```bash
|
||||
fallocate -l 4G /swapfile
|
||||
@@ -468,12 +533,13 @@
|
||||
echo '/swapfile none swap sw 0 0' >> /etc/fstab
|
||||
swapon --show
|
||||
```
|
||||
- <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>`03-Dify-ECS<EFBFBD>函蔡摰<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.md` 蝚?<3F>?
|
||||
- 🔗 参考:`03-Dify-ECS部署完全指南.md` 第4节
|
||||
|
||||
---
|
||||
|
||||
### 3.2 Dify部署
|
||||
|
||||
<EFBFBD>?**銝贝蝸Dify**
|
||||
☐ **下载Dify**
|
||||
- ⏱️ 5分钟
|
||||
- ```bash
|
||||
cd /opt
|
||||
@@ -481,19 +547,22 @@
|
||||
cd dify/docker
|
||||
```
|
||||
|
||||
<EFBFBD>?**靽格㺿docker-compose.yaml嚗<EFBFBD>垢<EFBFBD><EFBFBD><EFBFBD><EFBFBD>剁<EFBFBD>**
|
||||
☐ **修改docker-compose.yaml(端口安全)**
|
||||
- ⏱️ 5分钟
|
||||
- 编辑 `docker-compose.yaml`
|
||||
- Redis端口:`127.0.0.1:6379:6379`
|
||||
- Weaviate端口:`127.0.0.1:8080:8080`
|
||||
- <20>𩤃<EFBFBD> <20>芣<EFBFBD>Nginx撖孵<E69296>嚗?0蝡臬藁嚗?- <20><> <20><><EFBFBD><EFBFBD><EFBFBD>`07-<2D>喲睸<E596B2>滨蔭銵亙<E98AB5>霂湔<E99C82>.md` 蝚?<3F>?
|
||||
<EFBFBD>?**<2A>滨蔭.env<6E><76>辣**
|
||||
- ⚠️ 只有Nginx对外(80端口)
|
||||
- 🔗 参考:`07-关键配置补充说明.md` 第4节
|
||||
|
||||
☐ **配置.env文件**
|
||||
- ⏱️ 10分钟
|
||||
- ```bash
|
||||
cp .env.example .env
|
||||
vi .env
|
||||
```
|
||||
- <EFBFBD>喲睸<EFBFBD>滨蔭嚗? ```bash
|
||||
- 关键配置:
|
||||
```bash
|
||||
# Redis
|
||||
REDIS_HOST=redis
|
||||
REDIS_PORT=6379
|
||||
@@ -503,21 +572,24 @@
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=dify
|
||||
DB_USERNAME=postgres
|
||||
DB_PASSWORD=嚗<EFBFBD><EFBFBD><EFBFBD>𣂼撩撖<EFBFBD><EFBFBD>嚗?
|
||||
DB_PASSWORD=(生成强密码)
|
||||
|
||||
# Weaviate
|
||||
WEAVIATE_ENDPOINT=http://weaviate:8080
|
||||
|
||||
# 其他
|
||||
SECRET_KEY=嚗<EFBFBD><EFBFBD><EFBFBD>𣂼撩撖<EFBFBD>𤨎嚗? ```
|
||||
SECRET_KEY=(生成强密钥)
|
||||
```
|
||||
|
||||
<EFBFBD>?**<2A>臬𢆡Dify**
|
||||
☐ **启动Dify**
|
||||
- ⏱️ 10分钟(首次启动需要拉取镜像)
|
||||
- ```bash
|
||||
docker-compose up -d
|
||||
docker-compose logs -f
|
||||
# 蝑匧<EFBFBD><EFBFBD><EFBFBD><EFBFBD>㗇<EFBFBD><EFBFBD>∪鍳<EFBFBD>剁<EFBFBD>蝥?-3<><33><EFBFBD>嚗? ```
|
||||
# 等待所有服务启动(约2-3分钟)
|
||||
```
|
||||
|
||||
<EFBFBD>?**撉諹<E69289>Dify<EFBFBD>滚𦛚**
|
||||
☐ **验证Dify服务**
|
||||
- ⏱️ 3分钟
|
||||
- 浏览器访问:http://ECS公网IP
|
||||
- 应该看到Dify欢迎页面
|
||||
@@ -526,62 +598,70 @@
|
||||
|
||||
### 3.3 Dify配置
|
||||
|
||||
<EFBFBD>?**瘜典<E7989C>蝞∠<E89D9E><E288A0>䁅揭<E48185>?*
|
||||
☐ **注册管理员账号**
|
||||
- ⏱️ 2分钟
|
||||
- 擐𡝗活霈輸䔮隡𡁏<EFBFBD>蝷箸釣<EFBFBD>?- <20>桃拳嚗惨dmin@your-company.com
|
||||
- 首次访问会提示注册
|
||||
- 邮箱:admin@your-company.com
|
||||
- 密码:(强密码)
|
||||
|
||||
<EFBFBD>?**<2A>𥕦遣API Key**
|
||||
☐ **创建API Key**
|
||||
- ⏱️ 3分钟
|
||||
- 登录Dify
|
||||
- 设置 > API密钥 > 创建密钥
|
||||
- 名称:Backend Service
|
||||
- 复制API Key:app-xxxxxxxxxxxxxxxxxxxxx
|
||||
- <EFBFBD>𩤃<EFBFBD> 憒亙<E68692>靽嘥<E99DBD>嚗<EFBFBD>蘨<EFBFBD>曄內銝<E585A7>甈?
|
||||
<EFBFBD>?**<2A>湔鰵<E6B994>𡒊垢<F0A1928A>臬<EFBFBD><E887AC>㗛<EFBFBD>**
|
||||
- ⚠️ 妥善保存,只显示一次
|
||||
|
||||
☐ **更新后端环境变量**
|
||||
- ⏱️ 5分钟
|
||||
- SAE<EFBFBD>批<EFBFBD><EFBFBD>?> aiclinical-backend > <EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD>
|
||||
- 靽格㺿嚗? ```bash
|
||||
- SAE控制台 > aiclinical-backend > 环境变量
|
||||
- 修改:
|
||||
```bash
|
||||
DIFY_API_URL=http://172.16.x.x/v1 # ECS内网IP
|
||||
DIFY_API_KEY=app-xxxxxxxxxxxxxxxxxxxxx # 真实Key
|
||||
```
|
||||
- 保存 > 重启应用
|
||||
|
||||
<EFBFBD>?**瘚贝<E7989A>PKB<4B>蠘<EFBFBD>**
|
||||
☐ **测试PKB功能**
|
||||
- ⏱️ 5分钟
|
||||
- ```bash
|
||||
# <EFBFBD>𥕦遣<EFBFBD>亥<EFBFBD>摨? curl -X POST http://<2F>滨垢<E6BBA8>啣<EFBFBD>/api/v1/pkb/knowledge-bases \
|
||||
# 创建知识库
|
||||
curl -X POST http://前端地址/api/v1/pkb/knowledge-bases \
|
||||
-H "Authorization: Bearer USER_TOKEN" \
|
||||
-d '{"name":"瘚贝<EFBFBD><EFBFBD>亥<EFBFBD>摨?}'
|
||||
-d '{"name":"测试知识库"}'
|
||||
# 应该返回 200 OK
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>嗆挾4嚗𡁶垢<EFBFBD>啁垢瘚贝<EFBFBD>嚗㇄ay 2銝见<E98A9D>嚗?
|
||||
## 阶段4:端到端测试(Day 2下午)
|
||||
|
||||
### 4.1 功能测试
|
||||
|
||||
<EFBFBD>?**<2A>冽<EFBFBD>瘜典<E7989C>/<2F>餃<EFBFBD>**
|
||||
☐ **用户注册/登录**
|
||||
- ⏱️ 5分钟
|
||||
- <EFBFBD>滨垢瘜典<EFBFBD><EFBFBD>啁鍂<EFBFBD>?- <20>餃<EFBFBD><E9A483>𣂼<EFBFBD>
|
||||
- 前端注册新用户
|
||||
- 登录成功
|
||||
|
||||
<EFBFBD>?**AI撖寡<EFBFBD>嚗㇁IA璅∪<EFBFBD>嚗?*
|
||||
☐ **AI对话(AIA模块)**
|
||||
- ⏱️ 5分钟
|
||||
- 创建项目
|
||||
- 发起对话
|
||||
- 验证DeepSeek API调用成功
|
||||
|
||||
<EFBFBD>?**<2A>亥<EFBFBD>摨橒<E691A8>PKB璅∪<E79285>嚗?*
|
||||
☐ **知识库(PKB模块)**
|
||||
- ⏱️ 10分钟
|
||||
- <EFBFBD>𥕦遣<EFBFBD>亥<EFBFBD>摨?- 銝𠹺<E98A9D>PDF<44><46>﹝
|
||||
- 创建知识库
|
||||
- 上传PDF文档
|
||||
- 验证Dify处理成功
|
||||
|
||||
<EFBFBD>?**<2A><>讃蝑偦<E89D91>㚁<EFBFBD>ASL璅∪<E79285>嚗?*
|
||||
☐ **文献筛选(ASL模块)**
|
||||
- ⏱️ 10分钟
|
||||
- <EFBFBD>𥕦遣蝑偦<EFBFBD>厰★<EFBFBD>?- 銝𠹺<E98A9D>PDF
|
||||
- 创建筛选项目
|
||||
- 上传PDF
|
||||
- 验证Python服务解析成功
|
||||
|
||||
<EFBFBD>?**<2A>唳旿皜<E697BF><E79A9C>嚗㇄C璅∪<E79285>嚗?*
|
||||
☐ **数据清洗(DC模块)**
|
||||
- ⏱️ 10分钟
|
||||
- 上传Excel
|
||||
- 执行清洗
|
||||
@@ -591,39 +671,48 @@
|
||||
|
||||
### 4.2 性能测试
|
||||
|
||||
<EFBFBD>?**<2A>滚<EFBFBD><E6BB9A>園𡢿**
|
||||
☐ **响应时间**
|
||||
- ⏱️ 10分钟
|
||||
- API<EFBFBD>滚<EFBFBD><EFBFBD>園𡢿 < 2蝘?- 憿菟𢒰<E88F9F>㰘蝸<E3B098>園𡢿 < 3蝘?
|
||||
<EFBFBD>?**撟嗅<E6929F>瘚贝<E7989A>**
|
||||
- API响应时间 < 2秒
|
||||
- 页面加载时间 < 3秒
|
||||
|
||||
☐ **并发测试**
|
||||
- ⏱️ 10分钟
|
||||
- 使用Apache Bench或JMeter
|
||||
- 璅⊥<EFBFBD>10銝芸僎<EFBFBD>𤑳鍂<EFBFBD>?- 撉諹<E69289><E8ABB9>𣳇<EFBFBD>霂?
|
||||
- 模拟10个并发用户
|
||||
- 验证无错误
|
||||
|
||||
---
|
||||
|
||||
### 4.3 监控配置
|
||||
|
||||
<EFBFBD>?**<2A>滨蔭<E6BBA8>亙<EFBFBD><E4BA99>園<EFBFBD>**
|
||||
☐ **配置日志收集**
|
||||
- ⏱️ 10分钟
|
||||
- SAE自动收集stdout/stderr
|
||||
- 撉諹<EFBFBD><EFBFBD>亙<EFBFBD><EFBFBD>舀䰻<EFBFBD>?
|
||||
<EFBFBD>?**<2A>滨蔭<E6BBA8>𡃏郎閫<E9838E><E996AB>**
|
||||
- 验证日志可查看
|
||||
|
||||
☐ **配置告警规则**
|
||||
- ⏱️ 15分钟
|
||||
- 鈭𤑳<EFBFBD><EFBFBD>?> <20>𡃏郎閫<E9838E><E996AB>
|
||||
- 云监控 > 告警规则
|
||||
- CPU > 70%
|
||||
- 内存 > 80%
|
||||
- <EFBFBD>躰秤<EFBFBD>亙<EFBFBD> > 10<31>?<3F><><EFBFBD>
|
||||
- 错误日志 > 10条/分钟
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD>嗆挾5嚗帋<EFBFBD><EFBFBD>碶<EFBFBD><EFBFBD><EFBFBD>﹝嚗㇄ay 3嚗?
|
||||
### 5.1 <20>舫<EFBFBD>劐<EFBFBD><E58A90>?
|
||||
<EFBFBD>?**<2A>滨蔭SSH<53>折<EFBFBD>嚗<EFBFBD><E59A97><EFBFBD>睲噶<E79DB2>抬<EFBFBD>**
|
||||
## 阶段5:优化与文档(Day 3)
|
||||
|
||||
### 5.1 可选优化
|
||||
|
||||
☐ **配置SSH隧道(开发便利)**
|
||||
- ⏱️ 10分钟
|
||||
- <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>`07-<2D>喲睸<E596B2>滨蔭銵亙<E98AB5>霂湔<E99C82>.md` 蝚?<3F>?
|
||||
<EFBFBD>?**摰䂿緵OSS蝑曉<E89D91>URL嚗<4C><E59A97><EFBFBD>剁<EFBFBD>**
|
||||
- 🔗 参考:`07-关键配置补充说明.md` 第7节
|
||||
|
||||
☐ **实现OSS签名URL(安全)**
|
||||
- ⏱️ 30分钟
|
||||
- <EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>`07-<2D>喲睸<E596B2>滨蔭銵亙<E98AB5>霂湔<E99C82>.md` 蝚?<3F>?
|
||||
<EFBFBD>?**<2A>滨蔭<E6BBA8>笔<EFBFBD>嚗<EFBFBD>虾<EFBFBD>㚁<EFBFBD>**
|
||||
- 🔗 参考:`07-关键配置补充说明.md` 第8节
|
||||
|
||||
☐ **配置域名(可选)**
|
||||
- ⏱️ 30分钟
|
||||
- 购买域名
|
||||
- 配置DNS解析
|
||||
@@ -633,20 +722,22 @@
|
||||
|
||||
### 5.2 文档整理
|
||||
|
||||
<EFBFBD>?**霈啣<E99C88><E595A3>滨蔭靽⊥<E99DBD>**
|
||||
☐ **记录配置信息**
|
||||
- ⏱️ 20分钟
|
||||
- 创建 `部署配置清单.xlsx`
|
||||
- 记录所有密码、地址、Key
|
||||
|
||||
<EFBFBD>?**憭<>遢<EFBFBD>滨蔭<E6BBA8><E894AD>辣**
|
||||
☐ **备份配置文件**
|
||||
- ⏱️ 10分钟
|
||||
- Dify<EFBFBD>?`.env` <EFBFBD>?`docker-compose.yaml`
|
||||
- 銝𠹺<EFBFBD><EFBFBD>啁<EFBFBD><EFBFBD>滝it隞枏<EFBFBD><EFBFBD>硋<EFBFBD>撖<EFBFBD><EFBFBD><EFBFBD>?
|
||||
<EFBFBD>?**蝻硋<E89DBB>餈鞟輕<E99E9F>见<EFBFBD>**
|
||||
- Dify的 `.env` 和 `docker-compose.yaml`
|
||||
- 上传到私有Git仓库或加密存储
|
||||
|
||||
☐ **编写运维手册**
|
||||
- ⏱️ 30分钟
|
||||
- 日常操作流程
|
||||
- 故障处理流程
|
||||
- <EFBFBD>𠉛頂鈭箔縑<EFBFBD>?
|
||||
- 联系人信息
|
||||
|
||||
---
|
||||
|
||||
## 总结
|
||||
@@ -656,35 +747,37 @@
|
||||
| 阶段 | 预计时间 | 实际时间 |
|
||||
|------|---------|---------|
|
||||
| 阶段1:基础设施 | 2小时 | _______ |
|
||||
| <EFBFBD>嗆挾2嚗𡁏瓲敹<EFBFBD><EFBFBD><EFBFBD>?| 2撠𤩺𧒄 | _______ |
|
||||
| 阶段2:核心服务 | 2小时 | _______ |
|
||||
| 阶段3:Dify服务 | 1小时 | _______ |
|
||||
| <EFBFBD>嗆挾4嚗𡁏<EFBFBD>霂?| 1撠𤩺𧒄 | _______ |
|
||||
| <EFBFBD>嗆挾5嚗帋<EFBFBD><EFBFBD>?| <20>舫<EFBFBD>?| _______ |
|
||||
| 阶段4:测试 | 1小时 | _______ |
|
||||
| 阶段5:优化 | 可选 | _______ |
|
||||
| **总计** | **6小时** | _______ |
|
||||
|
||||
### 成本统计
|
||||
|
||||
| <EFBFBD>滚𦛚 | 閫<>聢 | <20><><EFBFBD><EFBFBD>?|
|
||||
| 服务 | 规格 | 月成本 |
|
||||
|------|------|--------|
|
||||
| SAE<EFBFBD>滨垢 | 0.5<EFBFBD>?GB<EFBFBD>1 | 瞼50 |
|
||||
| SAE<EFBFBD>𡒊垢 | 1<EFBFBD>?GB<EFBFBD>2 | 瞼200 |
|
||||
| SAE Python | 1<EFBFBD>?GB<EFBFBD>1 | 瞼100 |
|
||||
| RDS PostgreSQL | 2<EFBFBD>?GB | 瞼400 |
|
||||
| ECS Dify | 4<EFBFBD>?GB | 瞼300 |
|
||||
| SAE前端 | 0.5核1GB×1 | ¥50 |
|
||||
| SAE后端 | 1核2GB×2 | ¥200 |
|
||||
| SAE Python | 1核2GB×1 | ¥100 |
|
||||
| RDS PostgreSQL | 2核4GB | ¥400 |
|
||||
| ECS Dify | 4核8GB | ¥300 |
|
||||
| OSS | 50GB | ¥10 |
|
||||
| NAT网关 | 小型+EIP | ¥100 |
|
||||
| **<EFBFBD>餉恣** | - | **瞼1,160/<EFBFBD>?* |
|
||||
| **总计** | - | **¥1,160/月** |
|
||||
|
||||
### 銝衤<EFBFBD>甇?
|
||||
<EFBFBD>?閫<><E996AB>7憭拍迅摰𡁏<E691B0>?<3F>?<3F>寞旿<E5AF9E>烐綉<E78390>唳旿靚<E697BF>㟲韏<E39FB2><E99F8F>
|
||||
<EFBFBD>?<3F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>瞍𠉛<E79E8D>
|
||||
<EFBFBD>?蝻硋<E89DBB><E7A18B>冽<EFBFBD><E586BD>见<EFBFBD>
|
||||
### 下一步
|
||||
|
||||
☐ 观察7天稳定性
|
||||
☐ 根据监控数据调整资源
|
||||
☐ 准备故障演练
|
||||
☐ 编写用户手册
|
||||
|
||||
---
|
||||
|
||||
**<EFBFBD>剖<EFBFBD>嚗<EFBFBD><EFBFBD>撌脩<EFBFBD>摰峕<EFBFBD>鈭<EFBFBD><EFBFBD>0<EFBFBD>?<3F><><EFBFBD>蝵莎<E89DB5>** <20><>
|
||||
**恭喜!你已经完成了从0到1的部署!** 🎉
|
||||
|
||||
**文档创建人:** AI助手
|
||||
**最后更新:** 2025-12-14
|
||||
**<EFBFBD><EFBFBD>𧋦嚗?* v1.0
|
||||
**版本:** v1.0
|
||||
|
||||
|
||||
Reference in New Issue
Block a user