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,14 +1,14 @@
|
||||
# 🎉 前端Nginx - 部署成功总结
|
||||
|
||||
> **閮ㄧ讲瀹屾垚鏃堕棿**锛?025-12-25 19:55
|
||||
> **部署完成时间**:2025-12-25 19:55
|
||||
> **镜像版本**:v1.0
|
||||
> **内网地址**:`http://172.17.173.72:80`
|
||||
> **閮ㄧ讲鐘舵€?*锛氣渽 杩愯<E69DA9>涓?
|
||||
> **鍋ュ悍妫€鏌?*锛氣渽 閫氳繃锛圚TTP 200锛?
|
||||
> **部署状态**:✅ 运行中
|
||||
> **健康检查**:✅ 通过(HTTP 200)
|
||||
|
||||
---
|
||||
|
||||
## 馃搳 涓€銆侀儴缃蹭俊鎭<E4BF8A><E98EAD>瑙?
|
||||
## 📊 一、部署信息概览
|
||||
|
||||
### 应用配置
|
||||
```yaml
|
||||
@@ -20,14 +20,14 @@
|
||||
|
||||
### 实例规格
|
||||
```yaml
|
||||
CPU: 0.5鏍?
|
||||
CPU: 0.5核
|
||||
内存: 1GB
|
||||
瀹炰緥鏁? 1涓?
|
||||
实例数: 1个
|
||||
规格选择理由:
|
||||
- 前端只提供静态资源和代理转发
|
||||
- 璧勬簮娑堣€楁瀬浣?
|
||||
- 0.5鏍稿畬鍏ㄨ冻澶?
|
||||
- 瀵规瘮锛氬悗绔<EFBFBD>渶瑕?鏍?GB锛孭ython闇€瑕?鏍?GB
|
||||
- 资源消耗极低
|
||||
- 0.5核完全足够
|
||||
- 对比:后端需要1核2GB,Python需要1核2GB
|
||||
```
|
||||
|
||||
### 镜像信息
|
||||
@@ -44,32 +44,32 @@ CPU: 0.5
|
||||
```yaml
|
||||
内网地址: http://172.17.173.72:80
|
||||
VPC: vpc-2ze055cptkew9c38w4r06
|
||||
瀹夊叏缁? sg-2zedk6fi8sgmmcwdu7tu
|
||||
安全组: sg-2zedk6fi8sgmmcwdu7tu
|
||||
公网访问: 无(仅内网)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 馃殌 浜屻€侀儴缃茶繃绋?
|
||||
## 🚀 二、部署过程
|
||||
|
||||
### 閮ㄧ讲鏃堕棿绾?
|
||||
### 部署时间线
|
||||
|
||||
| 时间 | 操作 | 结果 |
|
||||
|------|------|------|
|
||||
| 11:50 | 鍒涘缓SAE搴旂敤 | 鉁?|
|
||||
| 11:52 | 閰嶇疆瀹瑰櫒闀滃儚鍜屽疄渚嬭<EFBFBD>鏍?| 鉁?|
|
||||
| 11:53 | 閰嶇疆鐜<EFBFBD><EFBFBD>鍙橀噺锛堝悗绔<EFBFBD>湴鍧€锛?| 鉁?|
|
||||
| 11:54 | 閰嶇疆鍋ュ悍妫€鏌?| 鉁?|
|
||||
| 11:54 | 閮ㄧ讲搴旂敤 | 鉁?|
|
||||
| 11:55 | 瀹瑰櫒鍚<EFBFBD>姩鎴愬姛 | 鉁?|
|
||||
| 11:55 | 鍋ュ悍妫€鏌ラ€氳繃 | 鉁?|
|
||||
| 12:00 | 瀹屾暣閾捐矾娴嬭瘯閫氳繃 | 鉁?|
|
||||
| 11:50 | 创建SAE应用 | ✅ |
|
||||
| 11:52 | 配置容器镜像和实例规格 | ✅ |
|
||||
| 11:53 | 配置环境变量(后端地址) | ✅ |
|
||||
| 11:54 | 配置健康检查 | ✅ |
|
||||
| 11:54 | 部署应用 | ✅ |
|
||||
| 11:55 | 容器启动成功 | ✅ |
|
||||
| 11:55 | 健康检查通过 | ✅ |
|
||||
| 12:00 | 完整链路测试通过 | ✅ |
|
||||
|
||||
**总耗时**:约10分钟(一次成功,零问题)
|
||||
|
||||
---
|
||||
|
||||
## 鉁?涓夈€侀儴缃查獙璇?
|
||||
## ✅ 三、部署验证
|
||||
|
||||
### 1. 启动日志验证
|
||||
|
||||
@@ -86,14 +86,14 @@ nginx: configuration file /etc/nginx/nginx.conf test is successful
|
||||
|
||||
**验证结果**:✅ 所有配置正确,启动成功
|
||||
|
||||
### 2. 闈欐€佽祫婧愭祴璇?
|
||||
### 2. 静态资源测试
|
||||
|
||||
**娴嬭瘯鍛戒护**锛?
|
||||
**测试命令**:
|
||||
```bash
|
||||
curl -I http://172.17.173.72/
|
||||
```
|
||||
|
||||
**娴嬭瘯缁撴灉**锛?
|
||||
**测试结果**:
|
||||
```http
|
||||
HTTP/1.1 200 OK
|
||||
Server: nginx
|
||||
@@ -102,16 +102,16 @@ Content-Length: 458
|
||||
Cache-Control: no-cache, no-store, must-revalidate
|
||||
```
|
||||
|
||||
**楠岃瘉缁撴灉**锛氣渽 闈欐€佽祫婧愭<E5A9A7>甯告彁渚?
|
||||
**验证结果**:✅ 静态资源正常提供
|
||||
|
||||
### 3. React应用验证
|
||||
|
||||
**娴嬭瘯鍛戒护**锛?
|
||||
**测试命令**:
|
||||
```bash
|
||||
curl http://172.17.173.72/ | head -20
|
||||
```
|
||||
|
||||
**娴嬭瘯缁撴灉**锛?
|
||||
**测试结果**:
|
||||
```html
|
||||
<!doctype html>
|
||||
<html lang="en">
|
||||
@@ -131,19 +131,19 @@ curl http://172.17.173.72/ | head -20
|
||||
|
||||
### 4. 前端→后端代理测试(关键!)
|
||||
|
||||
**娴嬭瘯鍛戒护**锛?
|
||||
**测试命令**:
|
||||
```bash
|
||||
curl http://172.17.173.72/health
|
||||
```
|
||||
|
||||
**娴嬭瘯缁撴灉**锛?
|
||||
**测试结果**:
|
||||
```
|
||||
healthy
|
||||
```
|
||||
|
||||
**楠岃瘉缁撴灉**锛氣渽 鍓嶇<E98D93>鍒板悗绔<E68297>殑浠g悊瀹屽叏姝e父宸ヤ綔锛?
|
||||
**验证结果**:✅ 前端到后端的代理完全正常工作!
|
||||
|
||||
### 5. 鍋ュ悍妫€鏌ユ棩蹇?
|
||||
### 5. 健康检查日志
|
||||
|
||||
```bash
|
||||
127.0.0.1 - - [25/Dec/2025:11:55:01 +0800] "GET / HTTP/1.1" 200 304
|
||||
@@ -151,47 +151,47 @@ healthy
|
||||
127.0.0.1 - - [25/Dec/2025:11:55:11 +0800] "GET / HTTP/1.1" 200 304
|
||||
```
|
||||
|
||||
**楠岃瘉缁撴灉**锛氣渽 SAE鍋ュ悍妫€鏌ユ<E98F8C>甯革紝姣?绉掓<E7BB89>鏌ヤ竴娆?
|
||||
**验证结果**:✅ SAE健康检查正常,每5秒检查一次
|
||||
|
||||
---
|
||||
|
||||
## 馃幆 鍥涖€佸叧閿<E58FA7>厤缃?
|
||||
## 🎯 四、关键配置
|
||||
|
||||
### 环境变量配置
|
||||
|
||||
```bash
|
||||
# 鍚庣<EFBFBD>鏈嶅姟IP锛堝繀闇€锛?
|
||||
# 后端服务IP(必需)
|
||||
BACKEND_SERVICE_HOST=172.17.173.71
|
||||
|
||||
# 鍚庣<EFBFBD>鏈嶅姟绔<EFBFBD>彛锛堝彲閫夛紝榛樿<EFBFBD>3001锛?
|
||||
# 后端服务端口(可选,默认3001)
|
||||
BACKEND_SERVICE_PORT=3001
|
||||
```
|
||||
|
||||
**璇存槑**锛?
|
||||
**说明**:
|
||||
- 这两个环境变量在容器启动时通过 `envsubst` 注入到Nginx配置
|
||||
- 不需要重新构建镜像,只需配置环境变量
|
||||
- 绗﹀悎浜戝師鐢?2-Factor App鍘熷垯
|
||||
- 符合云原生12-Factor App原则
|
||||
|
||||
### 鍋ュ悍妫€鏌ラ厤缃?
|
||||
### 健康检查配置
|
||||
|
||||
```yaml
|
||||
Liveness瀛樻椿妫€鏌?
|
||||
Liveness存活检查:
|
||||
方式: HTTP GET
|
||||
路径: /
|
||||
端口: 80
|
||||
鍒濆<EFBFBD>寤惰繜: 10绉?
|
||||
妫€鏌ラ棿闅? 10绉?
|
||||
瓒呮椂鏃堕棿: 3绉?
|
||||
澶辫触闃堝€? 3娆?
|
||||
初始延迟: 10秒
|
||||
检查间隔: 10秒
|
||||
超时时间: 3秒
|
||||
失败阈值: 3次
|
||||
|
||||
Readiness灏辩华妫€鏌?
|
||||
Readiness就绪检查:
|
||||
方式: HTTP GET
|
||||
路径: /
|
||||
端口: 80
|
||||
鍒濆<EFBFBD>寤惰繜: 5绉?
|
||||
妫€鏌ラ棿闅? 5绉?
|
||||
瓒呮椂鏃堕棿: 3绉?
|
||||
澶辫触闃堝€? 2娆?
|
||||
初始延迟: 5秒
|
||||
检查间隔: 5秒
|
||||
超时时间: 3秒
|
||||
失败阈值: 2次
|
||||
```
|
||||
|
||||
### Nginx代理规则
|
||||
@@ -224,141 +224,141 @@ location / {
|
||||
|
||||
---
|
||||
|
||||
## 馃搳 浜斻€侀儴缃插<E7BC83>姣?
|
||||
## 📊 五、部署对比
|
||||
|
||||
### 与Node.js后端部署对比
|
||||
|
||||
| 瀵规瘮椤?| Node.js鍚庣<EFBFBD> | 鍓嶇<E98D93>Nginx |
|
||||
| 对比项 | Node.js后端 | 前端Nginx |
|
||||
|--------|------------|-----------|
|
||||
| **澶嶆潅搴?* | 猸愨瓙猸愨瓙 | 猸?|
|
||||
| **閮ㄧ讲鏃堕棿** | 绾?灏忔椂锛堥亣鍒?涓<>棶棰橈級 | 绾?0鍒嗛挓锛堜竴娆℃垚鍔燂級 |
|
||||
| **瀹炰緥瑙勬牸** | 1鏍?GB | 0.5鏍?GB |
|
||||
| **鐜<EFBFBD><EFBFBD>鍙橀噺鏁?* | 15+ | 2 |
|
||||
| **鍚<EFBFBD>姩鏃堕棿** | 绾?0绉?| 绾?绉?|
|
||||
| **閬囧埌鐨勯棶棰?* | 4涓<EFBFBD>紙bash/config/pino/require锛?| 0涓?|
|
||||
| **复杂度** | ⭐⭐⭐⭐ | ⭐ |
|
||||
| **部署时间** | 约2小时(遇到4个问题) | 约10分钟(一次成功) |
|
||||
| **实例规格** | 1核2GB | 0.5核1GB |
|
||||
| **环境变量数** | 15+ | 2 |
|
||||
| **启动时间** | 约30秒 | 约5秒 |
|
||||
| **遇到的问题** | 4个(bash/config/pino/require) | 0个 |
|
||||
| **镜像大小** | 838MB | 91.9MB |
|
||||
| **鍋ュ悍妫€鏌ヨ矾寰?* | `/health` | `/` |
|
||||
| **健康检查路径** | `/health` | `/` |
|
||||
|
||||
**结论**:前端Nginx部署非常简单,一次成功,零问题!
|
||||
|
||||
---
|
||||
|
||||
## 馃彈锔?鍏<>€佸畬鏁存灦鏋?
|
||||
## 🏗️ 六、完整架构
|
||||
|
||||
### 当前部署架构
|
||||
|
||||
```
|
||||
用户请求(未来)
|
||||
鈫?
|
||||
[鍏<EFBFBD>綉SLB] 鈫?寰呴厤缃?
|
||||
鈫?
|
||||
[鍓嶇<EFBFBD>Nginx] http://172.17.173.72:80 鉁?宸查儴缃?
|
||||
↓
|
||||
[公网SLB] ← 待配置
|
||||
↓
|
||||
[前端Nginx] http://172.17.173.72:80 ✅ 已部署
|
||||
├── 静态资源:/, /assets/*, /vite.svg
|
||||
鈹斺攢鈹€ API浠g悊锛?api/*, /health, /test/*
|
||||
鈫?
|
||||
[Node.js鍚庣<EFBFBD>] http://172.17.173.71:3001 鉁?宸查儴缃?
|
||||
鈹溾攢鈹€ 杩炴帴鏁版嵁搴?
|
||||
鈹溾攢鈹€ 璋冪敤Python寰<EFBFBD>湇鍔?
|
||||
└── API代理:/api/*, /health, /test/*
|
||||
↓
|
||||
[Node.js后端] http://172.17.173.71:3001 ✅ 已部署
|
||||
├── 连接数据库
|
||||
├── 调用Python微服务
|
||||
└── 业务逻辑处理
|
||||
鈫? 鈫?
|
||||
↓ ↓
|
||||
[PostgreSQL RDS] [Python微服务]
|
||||
鉁?宸查儴缃? http://172.17.173.66:8000
|
||||
鉁?宸查儴缃?
|
||||
✅ 已部署 http://172.17.173.66:8000
|
||||
✅ 已部署
|
||||
```
|
||||
|
||||
### 服务清单
|
||||
|
||||
| 鏈嶅姟 | 鍐呯綉鍦板潃 | 瑙勬牸 | 鐘舵€?| 閮ㄧ讲鏃堕棿 |
|
||||
| 服务 | 内网地址 | 规格 | 状态 | 部署时间 |
|
||||
|------|---------|------|------|---------|
|
||||
| 鍓嶇<EFBFBD>Nginx | http://172.17.173.72:80 | 0.5鏍?GB | 鉁?杩愯<E69DA9>涓?| 2025-12-25 |
|
||||
| Node.js鍚庣<EFBFBD> | http://172.17.173.71:3001 | 1鏍?GB | 鉁?杩愯<E69DA9>涓?| 2025-12-25 |
|
||||
| Python寰<EFBFBD>湇鍔?| http://172.17.173.66:8000 | 1鏍?GB | 鉁?杩愯<E69DA9>涓?| 2025-12-24 |
|
||||
| PostgreSQL | pgm-xxx:5432 | 2鏍?GB | 鉁?杩愯<E69DA9>涓?| 2025-12-24 |
|
||||
| 前端Nginx | http://172.17.173.72:80 | 0.5核1GB | ✅ 运行中 | 2025-12-25 |
|
||||
| Node.js后端 | http://172.17.173.71:3001 | 1核2GB | ✅ 运行中 | 2025-12-25 |
|
||||
| Python微服务 | http://172.17.173.66:8000 | 1核2GB | ✅ 运行中 | 2025-12-24 |
|
||||
| PostgreSQL | pgm-xxx:5432 | 2核4GB | ✅ 运行中 | 2025-12-24 |
|
||||
|
||||
---
|
||||
|
||||
## 馃幆 涓冦€佷笅涓€姝ュ伐浣?
|
||||
## 🎯 七、下一步工作
|
||||
|
||||
### 高优先级 🔴
|
||||
|
||||
- [ ] **配置公网SLB**:绑定前端服务,提供公网访问入口
|
||||
- [ ] **配置域名**:申请域名并绑定到SLB
|
||||
- [ ] **SSL璇佷功**锛氶厤缃瓾TTPS锛堥樋閲屼簯鍏嶈垂SSL鎴朙et's Encrypt锛?
|
||||
- [ ] **鍓嶇<EFBFBD>瀹炰緥鎵╁<EFBFBD>**锛氫粠1涓<31>墿瀹瑰埌2涓<32>紝瀹炵幇楂樺彲鐢?
|
||||
- [ ] **SSL证书**:配置HTTPS(阿里云免费SSL或Let's Encrypt)
|
||||
- [ ] **前端实例扩容**:从1个扩容到2个,实现高可用
|
||||
|
||||
### 中优先级 🟡
|
||||
|
||||
- [ ] **鐩戞帶鍛婅<EFBFBD>**锛氶厤缃甋AE搴旂敤鐩戞帶鍜屽憡璀﹁<E79280>鍒?
|
||||
- [ ] **鏃ュ織鍒嗘瀽**锛氶厤缃<E58EA4>棩蹇楁湇鍔<E6B987>LS锛岄泦涓<E6B3A6><E6B693>鐞嗘棩蹇?
|
||||
- [ ] **CDN鍔犻€?*锛氶厤缃<E58EA4>樋閲屼簯CDN锛屽姞閫熼潤鎬佽祫婧愯<E5A9A7>闂?
|
||||
- [ ] **监控告警**:配置SAE应用监控和告警规则
|
||||
- [ ] **日志分析**:配置日志服务SLS,集中管理日志
|
||||
- [ ] **CDN加速**:配置阿里云CDN,加速静态资源访问
|
||||
- [ ] **安全加固**:配置WAF防火墙,防护常见攻击
|
||||
|
||||
### 低优先级 🟢
|
||||
|
||||
- [ ] **性能优化**:启用HTTP/2,优化Nginx配置
|
||||
- [ ] **鍘嬪姏娴嬭瘯**锛氳繘琛屽苟鍙戝帇鍔涙祴璇?
|
||||
- [ ] **压力测试**:进行并发压力测试
|
||||
- [ ] **备份策略**:配置自动备份和恢复流程
|
||||
|
||||
---
|
||||
|
||||
## 馃搱 鍏<>€佽祫婧愪娇鐢ㄦ儏鍐?
|
||||
## 📈 八、资源使用情况
|
||||
|
||||
### 实例资源
|
||||
|
||||
```yaml
|
||||
当前配置:
|
||||
CPU: 0.5鏍?
|
||||
CPU: 0.5核
|
||||
内存: 1GB
|
||||
瀹炰緥鏁? 1涓?
|
||||
实例数: 1个
|
||||
|
||||
实际使用(预估):
|
||||
CPU浣跨敤鐜? <10%
|
||||
鍐呭瓨浣跨敤鐜? <30%
|
||||
CPU使用率: <10%
|
||||
内存使用率: <30%
|
||||
网络带宽: <10Mbps
|
||||
```
|
||||
|
||||
### 成本估算
|
||||
|
||||
```yaml
|
||||
SAE鎴愭湰锛堝崟瀹炰緥锛?
|
||||
0.5鏍?GB: 绾β?0-50/鏈?
|
||||
SAE成本(单实例):
|
||||
0.5核1GB: 约¥30-50/月
|
||||
|
||||
鎵╁<EFBFBD>鍒?瀹炰緥鍚?
|
||||
鎬绘垚鏈? 绾β?0-100/鏈?
|
||||
扩容到2实例后:
|
||||
总成本: 约¥60-100/月
|
||||
|
||||
建议:
|
||||
娴嬭瘯闃舵<EFBFBD>浣跨敤1涓<EFBFBD>疄渚?
|
||||
测试阶段使用1个实例
|
||||
生产环境使用2个实例(高可用)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 馃敡 涔濄€佹晠闅滄帓鏌ユ寚鍗?
|
||||
## 🔧 九、故障排查指南
|
||||
|
||||
### 常见问题
|
||||
|
||||
#### 闂<EFBFBD><EFBFBD>1锛氬<EFBFBD>鍣ㄥ惎鍔ㄥけ璐?
|
||||
#### 问题1:容器启动失败
|
||||
|
||||
**鐥囩姸**锛氬<E9949B>鍣ㄥ弽澶嶉噸鍚?
|
||||
**症状**:容器反复重启
|
||||
|
||||
**鍙<EFBFBD>兘鍘熷洜**锛?
|
||||
- 鐜<EFBFBD><EFBFBD>鍙橀噺 `BACKEND_SERVICE_HOST` 鏈<EFBFBD>厤缃?
|
||||
**可能原因**:
|
||||
- 环境变量 `BACKEND_SERVICE_HOST` 未配置
|
||||
|
||||
**瑙e喅鏂规硶**锛?
|
||||
**解决方法**:
|
||||
```bash
|
||||
# 鍦⊿AE鎺у埗鍙版<EFBFBD>鏌ョ幆澧冨彉閲忛厤缃?
|
||||
# 纭<EFBFBD>繚 BACKEND_SERVICE_HOST 鍜?BACKEND_SERVICE_PORT 宸叉<EFBFBD>纭<EFBFBD>厤缃?
|
||||
# 在SAE控制台检查环境变量配置
|
||||
# 确保 BACKEND_SERVICE_HOST 和 BACKEND_SERVICE_PORT 已正确配置
|
||||
```
|
||||
|
||||
#### 闂<EFBFBD><EFBFBD>2锛氬仴搴锋<EFBFBD>鏌ュけ璐?
|
||||
#### 问题2:健康检查失败
|
||||
|
||||
**鐥囩姸**锛氬疄渚嬬姸鎬佹樉绀?涓嶅仴搴?
|
||||
**症状**:实例状态显示"不健康"
|
||||
|
||||
**鍙<EFBFBD>兘鍘熷洜**锛?
|
||||
- Nginx鏈<EFBFBD><EFBFBD>甯稿惎鍔?
|
||||
- 鍋ュ悍妫€鏌ヨ矾寰勯敊璇?
|
||||
**可能原因**:
|
||||
- Nginx未正常启动
|
||||
- 健康检查路径错误
|
||||
|
||||
**瑙e喅鏂规硶**锛?
|
||||
**解决方法**:
|
||||
```bash
|
||||
# 查看容器日志
|
||||
# 检查是否有 "nginx: configuration file test is successful"
|
||||
@@ -366,19 +366,19 @@ SAE成本(单实例
|
||||
|
||||
#### 问题3:前端无法代理到后端
|
||||
|
||||
**鐥囩姸**锛氳<E9949B>闂?`/health` 杩斿洖404鎴?02
|
||||
**症状**:访问 `/health` 返回404或502
|
||||
|
||||
**鍙<EFBFBD>兘鍘熷洜**锛?
|
||||
**可能原因**:
|
||||
- 后端地址配置错误
|
||||
- 网络不通(安全组规则)
|
||||
|
||||
**瑙e喅鏂规硶**锛?
|
||||
**解决方法**:
|
||||
```bash
|
||||
# 1. 妫€鏌ュ惎鍔ㄦ棩蹇椾腑鐨?Backend Service 鍦板潃
|
||||
# 2. 娴嬭瘯鍚庣<EFBFBD>鏄<EFBFBD>惁鍙<EFBFBD><EFBFBD>闂?
|
||||
# 1. 检查启动日志中的 Backend Service 地址
|
||||
# 2. 测试后端是否可访问
|
||||
curl http://172.17.173.71:3001/health
|
||||
|
||||
# 3. 妫€鏌ュ畨鍏ㄧ粍瑙勫垯鏄<EFBFBD>惁鍏佽<EFBFBD>鍐呯綉浜掗€?
|
||||
# 3. 检查安全组规则是否允许内网互通
|
||||
```
|
||||
|
||||
---
|
||||
@@ -387,24 +387,24 @@ curl http://172.17.173.71:3001/health
|
||||
|
||||
### 成功因素
|
||||
|
||||
1. **杩愯<EFBFBD>鏃堕厤缃?*锛氬悗绔<E68297>湴鍧€閫氳繃鐜<E7B983><E9909C>鍙橀噺娉ㄥ叆锛屼笉鍐欐<E98D90>鍦ㄩ暅鍍忎腑
|
||||
2. **绠€鍗曟灦鏋?*锛歂ginx鏋佸叾绋冲畾锛岄厤缃<E58EA4>畝鍗?
|
||||
3. **鍏呭垎鍑嗗<EFBFBD>**锛氭彁鍓嶅噯澶囧ソ鎵€鏈夐厤缃<E58EA4>俊鎭?
|
||||
4. **鍙傝€冪粡楠?*锛氬€熼壌Node.js鍚庣<E98D9A>閮ㄧ讲缁忛獙
|
||||
1. **运行时配置**:后端地址通过环境变量注入,不写死在镜像中
|
||||
2. **简单架构**:Nginx极其稳定,配置简单
|
||||
3. **充分准备**:提前准备好所有配置信息
|
||||
4. **参考经验**:借鉴Node.js后端部署经验
|
||||
|
||||
### 涓嶯ode.js瀵规瘮鐨勪紭鍔?
|
||||
### 与Node.js对比的优势
|
||||
|
||||
1. **闆堕棶棰橀儴缃?*锛氭病鏈夐亣鍒颁换浣曢棶棰橈紝涓€娆℃垚鍔?
|
||||
2. **璧勬簮鑺傜渷**锛氬彧闇€瑕?.5鏍?GB
|
||||
3. **鍚<EFBFBD>姩蹇<EFBFBD>€?*锛?绉掑嵆鍙<E5B586>惎鍔?
|
||||
4. **閰嶇疆绠€鍗?*锛氬彧闇€2涓<32>幆澧冨彉閲?
|
||||
1. **零问题部署**:没有遇到任何问题,一次成功
|
||||
2. **资源节省**:只需要0.5核1GB
|
||||
3. **启动快速**:5秒即可启动
|
||||
4. **配置简单**:只需2个环境变量
|
||||
|
||||
### 云原生设计的体现
|
||||
|
||||
1. **閰嶇疆澶栭儴鍖?*锛氶€氳繃鐜<E7B983><E9909C>鍙橀噺娉ㄥ叆閰嶇疆
|
||||
2. **鏃犵姸鎬佽<EFBFBD>璁?*锛氬彲浠ユ按骞虫墿灞?
|
||||
3. **鍋ュ悍妫€鏌?*锛氭敮鎸丩iveness鍜孯eadiness鎺㈤拡
|
||||
4. **鏃ュ織鏍囧噯鍖?*锛氳緭鍑哄埌stdout/stderr
|
||||
1. **配置外部化**:通过环境变量注入配置
|
||||
2. **无状态设计**:可以水平扩展
|
||||
3. **健康检查**:支持Liveness和Readiness探针
|
||||
4. **日志标准化**:输出到stdout/stderr
|
||||
|
||||
---
|
||||
|
||||
@@ -416,25 +416,25 @@ curl http://172.17.173.71:3001/health
|
||||
# 前端Nginx(入口)
|
||||
http://172.17.173.72:80
|
||||
|
||||
# Node.js鍚庣<EFBFBD>锛圓PI锛?
|
||||
# Node.js后端(API)
|
||||
http://172.17.173.71:3001
|
||||
|
||||
# Python寰<EFBFBD>湇鍔★紙鏂囨。澶勭悊锛?
|
||||
# Python微服务(文档处理)
|
||||
http://172.17.173.66:8000
|
||||
|
||||
# PostgreSQL鏁版嵁搴?
|
||||
# PostgreSQL数据库
|
||||
pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432
|
||||
```
|
||||
|
||||
**閰嶇疆鍏<EFBFBD>綉璁块棶鏃堕渶瑕佺敤鍒拌繖浜涘湴鍧€锛?*
|
||||
**配置公网访问时需要用到这些地址!**
|
||||
|
||||
---
|
||||
|
||||
## 馃摎 鍗佷簩銆佺浉鍏虫枃妗g储寮?
|
||||
## 📚 十二、相关文档索引
|
||||
|
||||
### 前端部署文档
|
||||
- [07-前端Nginx-SAE部署操作手册.md](./07-前端Nginx-SAE部署操作手册.md) - 完整部署步骤
|
||||
- [06-鍓嶇<EFBFBD>Nginx-SAE瀹瑰櫒閮ㄧ讲鎸囧崡.md](./06-鍓嶇<EFBFBD>Nginx-SAE瀹瑰櫒閮ㄧ讲鎸囧崡.md) - 鎶€鏈<E282AC>灦鏋勮<E98F8B>瑙?
|
||||
- [06-前端Nginx-SAE容器部署指南.md](./06-前端Nginx-SAE容器部署指南.md) - 技术架构详解
|
||||
|
||||
### 后端部署文档
|
||||
- [12-Node.js后端-SAE部署操作手册.md](./12-Node.js后端-SAE部署操作手册.md)
|
||||
@@ -445,29 +445,28 @@ pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432
|
||||
|
||||
---
|
||||
|
||||
## 馃帀 鏈€缁堢粨璁?
|
||||
## 🎉 最终结论
|
||||
|
||||
**AI临床研究平台核心服务已全部部署成功!**
|
||||
|
||||
鉁?PostgreSQL鏁版嵁搴擄紙2025-12-24锛?
|
||||
鉁?Python寰<EFBFBD>湇鍔★紙2025-12-24锛?
|
||||
鉁?Node.js鍚庣<EFBFBD>锛?025-12-25锛?
|
||||
鉁?鍓嶇<E98D93>Nginx锛?025-12-25锛?
|
||||
✅ PostgreSQL数据库(2025-12-24)
|
||||
✅ Python微服务(2025-12-24)
|
||||
✅ Node.js后端(2025-12-25)
|
||||
✅ 前端Nginx(2025-12-25)
|
||||
|
||||
**瀹屾暣閾捐矾娴嬭瘯閫氳繃**锛?
|
||||
- 鍓嶇<EFBFBD>闈欐€佽祫婧?鉁?
|
||||
- 鍓嶇<EFBFBD>鈫掑悗绔<EFBFBD>唬鐞?鉁?
|
||||
- 鍚庣<EFBFBD>鈫掓暟鎹<EFBFBD>簱 鉁?
|
||||
- 鍚庣<EFBFBD>鈫扨ython 鉁?
|
||||
**完整链路测试通过**:
|
||||
- 前端静态资源 ✅
|
||||
- 前端→后端代理 ✅
|
||||
- 后端→数据库 ✅
|
||||
- 后端→Python ✅
|
||||
|
||||
**绯荤粺鐘舵€?*锛氬叏閮ㄨ繍琛屾<E7909B>甯革紝鍙<E7B49D>互杩涜<E69DA9>鍔熻兘娴嬭瘯鍜屼笟鍔¢獙璇侊紒馃帄
|
||||
**系统状态**:全部运行正常,可以进行功能测试和业务验证!🎊
|
||||
|
||||
---
|
||||
|
||||
> **文档版本**:v1.0
|
||||
> **鍒涘缓鏃堕棿**锛?025-12-25 20:00
|
||||
> **缁存姢鑰?*锛氬紑鍙戝洟闃?
|
||||
|
||||
> **创建时间**:2025-12-25 20:00
|
||||
> **维护者**:开发团队
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user