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,18 +1,21 @@
|
||||
# <EFBFBD><EFBFBD> AI銝游<EFBFBD><EFBFBD>𠉛弦撟喳蝱 - <20>輸<EFBFBD>鈭騌AE<41><45><EFBFBD>啁<EFBFBD>摰䂿𠶖<E482BF><F0A0B696>扇敶?
|
||||
> **<2A><>﹝<EFBFBD>券<EFBFBD>?*嚗朞扇敶閖燵<E99696>䔶<EFBFBD>SAE<41>滚𦛚<E6BB9A>冽<EFBFBD><E586BD>啁<EFBFBD>摰䂿𠶖<E482BF>?+ 瘥𤩺活<F0A4A9BA>函蔡霈啣<E99C88>
|
||||
> **<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>?*嚗?026-01-01 14:00
|
||||
> **蝏湔擪鈭箏<EFBFBD>**嚗𡁜<E59A97><F0A1819C>穃𣪧<E7A983>?
|
||||
> **霂湔<EFBFBD>**嚗𡁏𧋦<F0A1818F><F0A78BA6>﹝<EFBFBD><EFB99D>&霈啣<E99C88>SAE銝𦠜<E98A9D><F0A6A09C>匧<EFBFBD><E58CA7>函<EFBFBD>敶枏<E695B6><E69E8F>嗆<EFBFBD><E59786><EFBFBD><EFBFBD><EFBFBD>𡠺<EFBFBD><F0A1A0BA><EFBFBD><EFBFBD>啣<EFBFBD><E595A3><EFBFBD><EFBFBD><EFBFBD>讐<EFBFBD><E8AE90>研<EFBFBD><E7A094>鍂<EFBFBD>瑕<EFBFBD>撖<EFBFBD><E69296>蝑匧<E89D91><E58CA7>株<EFBFBD>皞𣂷縑<F0A382B7>?
|
||||
# 🚀 AI临床研究平台 - 阿里云SAE最新真实状态记录
|
||||
|
||||
> **文档用途**:记录阿里云SAE服务器最新真实状态 + 每次部署记录
|
||||
> **最后更新**:2026-01-01 14:00
|
||||
> **维护人员**:开发团队
|
||||
> **说明**:本文档准确记录SAE上所有应用的当前状态,包括内网地址、镜像版本、用户名密码等关键资源信息
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> 銝<><E98A9D><EFBFBD><EFBFBD><EFBFBD>漤<EFBFBD>蝵脩𠶖<E884A9><F0A0B696><EFBFBD>閫?
|
||||
| <20>滚𦛚<E6BB9A>滨妍 | <20>函蔡<E587BD>嗆<EFBFBD>?| <20>𨅯<EFBFBD><F0A885AF><EFBFBD>𧋦 | <20>函蔡雿滨蔭 | <20><><EFBFBD>擧凒<E693A7>唳𧒄<E594B3>?|
|
||||
## 📊 一、当前部署状态一览
|
||||
|
||||
| 服务名称 | 部署状态 | 镜像版本 | 部署位置 | 最后更新时间 |
|
||||
|---------|---------|---------|---------|-------------|
|
||||
| **PostgreSQL<EFBFBD>唳旿摨?* | <20>?餈鞱<E9A488>銝?| PostgreSQL 15 | RDS | 2025-12-24 |
|
||||
| **<EFBFBD>滨垢Nginx<EFBFBD>滚𦛚** | <EFBFBD>?餈鞱<E9A488>銝?| v1.2 | SAE | 2026-01-01 |
|
||||
| **Python敺格<EFBFBD><EFBFBD>?* | <20>?餈鞱<E9A488>銝?| v1.0 | SAE | 2025-12-24 |
|
||||
| **Node.js<EFBFBD>𡒊垢** | <EFBFBD>?餈鞱<E9A488>銝?| v1.3 | SAE | 2025-12-25 |
|
||||
| **Dify AI<EFBFBD>滚𦛚** | <EFBFBD>?<3F>芷<EFBFBD>蝵?| - | - | - |
|
||||
| **PostgreSQL数据库** | ✅ 运行中 | PostgreSQL 15 | RDS | 2025-12-24 |
|
||||
| **前端Nginx服务** | ✅ 运行中 | v1.2 | SAE | 2026-01-01 |
|
||||
| **Python微服务** | ✅ 运行中 | v1.0 | SAE | 2025-12-24 |
|
||||
| **Node.js后端** | ✅ 运行中 | v1.3 | SAE | 2025-12-25 |
|
||||
| **Dify AI服务** | ⏳ 未部署 | - | - | - |
|
||||
|
||||
---
|
||||
|
||||
@@ -20,14 +23,16 @@
|
||||
|
||||
### 2.1 ACR容器镜像仓库
|
||||
|
||||
**<EFBFBD>箸𧋦靽⊥<EFBFBD>**嚗?- **<EFBFBD>賢<EFBFBD>蝛粹𡢿**嚗䫤ai-clinical`
|
||||
**基本信息**:
|
||||
- **命名空间**:`ai-clinical`
|
||||
- **Registry地址(公网)**:`crpi-cd5ij4pjt65mweeo.cn-beijing.personal.cr.aliyuncs.com`
|
||||
- **Registry<EFBFBD>啣<EFBFBD>嚗ĀPC嚗?*嚗䫤crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com`
|
||||
- **<EFBFBD>冽<EFBFBD><EFBFBD>?*嚗䫤gofeng117@163.com`
|
||||
- **Registry地址(VPC)**:`crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com`
|
||||
- **用户名**:`gofeng117@163.com`
|
||||
- **密码**:`fengzhibo117`
|
||||
|
||||
**<EFBFBD>𨅯<EFBFBD>隞枏<EFBFBD><EFBFBD>𡑒”**嚗?
|
||||
| 隞枏<E99A9E><E69E8F>滨妍 | <20><><EFBFBD>啁<EFBFBD><E59581>?| <20>𨅯<EFBFBD>憭批<E686AD> | VPC<50>啣<EFBFBD> |
|
||||
**镜像仓库列表**:
|
||||
|
||||
| 仓库名称 | 最新版本 | 镜像大小 | VPC地址 |
|
||||
|---------|---------|---------|---------|
|
||||
| **python-extraction** | v1.0 | 1.12GB | `crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/python-extraction:v1.0` |
|
||||
| **ai-clinical_frontend-nginx** | v1.2 | ~50MB | `crpi-cd5ij4pjt65mweeo-vpc.cn-beijing.personal.cr.aliyuncs.com/ai-clinical/ai-clinical_frontend-nginx:v1.2` |
|
||||
@@ -37,48 +42,59 @@
|
||||
|
||||
### 2.2 VPC网络与NAT网关
|
||||
|
||||
**VPC靽⊥<EFBFBD>**嚗?- **VPC ID**嚗䫤vpc-2ze055cptkew9c38w4r06`
|
||||
**VPC信息**:
|
||||
- **VPC ID**:`vpc-2ze055cptkew9c38w4r06`
|
||||
- **VPC名称**:`ai-clinical-vpc`
|
||||
- **网段**:`172.17.0.0/16`
|
||||
- **<EFBFBD>啣<EFBFBD>**嚗𡁜<E59A97><F0A1819C>?嚗<><E59A97>鈭穿<E988AD>
|
||||
- **鈭斗揢<EFBFBD>?**嚗䫤vsw-2zevacop039bxrmj6yc0c`嚗<>虾<EFBFBD>典躹F嚗?- **鈭斗揢<E69697>?**嚗䫤vsw-2zehoeyw9ldncymcyvfwq`嚗<EFBFBD>虾<EFBFBD>典躹A嚗?- **摰匧<E691B0>蝏<EFBFBD>D**嚗䫤sg-2zedk6fi8sgmmcwdu7tu`
|
||||
- **地域**:华北2(北京)
|
||||
- **交换机1**:`vsw-2zevacop039bxrmj6yc0c`(可用区F)
|
||||
- **交换机2**:`vsw-2zehoeyw9ldncymcyvfwq`(可用区A)
|
||||
- **安全组ID**:`sg-2zedk6fi8sgmmcwdu7tu`
|
||||
|
||||
**NAT蝵穃<EFBFBD>靽⊥<EFBFBD>**嚗?- **NAT蝵穃<E89DB5><E7A983>滨妍**嚗䫤NAT_airesearch`
|
||||
**NAT网关信息**:
|
||||
- **NAT网关名称**:`NAT_airesearch`
|
||||
- **NAT网关ID**:`ngw-2zeec9ulzgw7ywvx1pst6`
|
||||
- **<EFBFBD>祉<EFBFBD>IP嚗𠄌IP嚗?*嚗䫤182.92.176.14`
|
||||
- **公网IP(EIP)**:`182.92.176.14`
|
||||
- **SNAT表ID**:`stb-2zesszmzx1qpwf1cb2bry`
|
||||
|
||||
---
|
||||
|
||||
### 2.3 RDS PostgreSQL<EFBFBD>唳旿摨?
|
||||
**摰硺<E691B0>靽⊥<E99DBD>**嚗?- **摰硺<E691B0>ID**嚗䫤pgm-2zex1m2y3r23hdn5`
|
||||
- **閫<>聢**嚗?<3F>?GB嚗īg.n2.2c.1m嚗?- **摮睃<E691AE>蝛粹𡢿**嚗?00GB嚗𠄎SD鈭𤑳<E988AD>嚗?- **PostgreSQL<51><4C>𧋦**嚗?5.0
|
||||
### 2.3 RDS PostgreSQL数据库
|
||||
|
||||
**实例信息**:
|
||||
- **实例ID**:`pgm-2zex1m2y3r23hdn5`
|
||||
- **规格**:2核4GB(pg.n2.2c.1m)
|
||||
- **存储空间**:100GB(SSD云盘)
|
||||
- **PostgreSQL版本**:15.0
|
||||
- **内网地址**:`pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432`
|
||||
- **憭𣇉<EFBFBD><EFBFBD>啣<EFBFBD>**嚗䫤pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com`嚗<EFBFBD><EFBFBD>儭?撌脣<E6928C><E884A3>哨<EFBFBD>
|
||||
- **<EFBFBD><EFBFBD>憭扯<EFBFBD><EFBFBD>交㺭**嚗?00
|
||||
- **外网地址**:`pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com`(⚠️ 已关闭)
|
||||
- **最大连接数**:400
|
||||
- **时区**:Asia/Shanghai
|
||||
- **<EFBFBD>賢<EFBFBD><EFBFBD>?*嚗?72.17.0.0/16嚗ĀPC蝵烐挾嚗?
|
||||
**<2A>唳旿摨㯄<E691A8>蝵?*嚗?- **<EFBFBD>唳旿摨枏<EFBFBD>**嚗䫤ai_clinical_research`
|
||||
- **<2A>冽<EFBFBD><E586BD>?*嚗䫤airesearch`
|
||||
- **白名单**:172.17.0.0/16(VPC网段)
|
||||
|
||||
**数据库配置**:
|
||||
- **数据库名**:`ai_clinical_research`
|
||||
- **用户名**:`airesearch`
|
||||
- **密码**:`Xibahe@fengzhibo117`
|
||||
- **摮㛖泵<EFBFBD>?*嚗䦧TF8
|
||||
- **字符集**:UTF8
|
||||
- **排序规则**:en_US.utf8
|
||||
|
||||
**餈墧𦻖摮㛖泵銝?*嚗?```
|
||||
**连接字符串**:
|
||||
```
|
||||
postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research
|
||||
```
|
||||
<EFBFBD>𩤃<EFBFBD> 瘜冽<E7989C>嚗𡁜<E59A97><F0A1819C><EFBFBD>葉<EFBFBD>?`@` <20><>閬<EFBFBD>RL蝻𣇉<E89DBB>銝?`%40`
|
||||
⚠️ 注意:密码中的 `@` 需要URL编码为 `%40`
|
||||
|
||||
**Schema<EFBFBD>嗆<EFBFBD>**嚗?1銝芯<E98A9D><E88AAF>﹖chema嚗㚁<E59A97>
|
||||
**Schema架构**(11个业务Schema):
|
||||
|
||||
| Schema<EFBFBD>滨妍 | <20>蠘<EFBFBD>璅∪<E79285> | 銵冽㺭<E586BD>?| 霂湔<E99C82> |
|
||||
| Schema名称 | 功能模块 | 表数量 | 说明 |
|
||||
|-----------|---------|-------|------|
|
||||
| `platform_schema` | 撟喳蝱<EFBFBD>詨<EFBFBD> | 8 | <EFBFBD>冽<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>僐<EFBFBD><EFBFBD>遙<EFBFBD>⊿<EFBFBD><EFBFBD>梹<EFBFBD>pg-boss嚗?|
|
||||
| `asl_schema` | 蝟餌<EFBFBD><EFBFBD><EFBFBD>讃蝑𥟇䰻 | 6 | 憿寧𤌍<E5AFA7><F0A48C8D><EFBFBD><EFBFBD>柴<EFBFBD><E69FB4><EFBFBD><EFBFBD>亥扇敶?|
|
||||
| `aia_schema` | AI<EFBFBD>箄<EFBFBD><EFBFBD>䁅<EFBFBD> | 5 | AI憿寧𤌍<EFBFBD><EFBFBD><EFBFBD>閬<EFBFBD>遙<EFBFBD>?|
|
||||
| `platform_schema` | 平台核心 | 8 | 用户、权限、任务队列(pg-boss) |
|
||||
| `asl_schema` | 系统文献筛查 | 6 | 项目、文献、筛查记录 |
|
||||
| `aia_schema` | AI智能摘要 | 5 | AI项目、摘要任务 |
|
||||
| `dc_schema` | 数据清洗 | 6 | 工具A/B/C数据处理 |
|
||||
| `pkb_schema` | 銝芯犖<EFBFBD>亥<EFBFBD>摨?| 5 | <20><>讃蝞∠<E89D9E><E288A0><EFBFBD><EFBFBD>霈?|
|
||||
| `iit_schema` | IIT Manager Agent | 5 | IIT憿寧𤌍<EFBFBD><EFBFBD><EFBFBD>摰⊥瓲<EFBFBD>其<EFBFBD><EFBFBD><EFBFBD>遙<EFBFBD>∟<EFBFBD>銵?|
|
||||
| `pkb_schema` | 个人知识库 | 5 | 文献管理、笔记 |
|
||||
| `iit_schema` | IIT Manager Agent | 5 | IIT项目、待审核动作、任务运行 |
|
||||
| `admin_schema` | 系统管理 | 0 | 预留 |
|
||||
| `rvw_schema` | 文献回顾 | 0 | 预留 |
|
||||
| `ssa_schema` | 智能统计分析 | 0 | 预留 |
|
||||
@@ -89,18 +105,22 @@ postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyun
|
||||
|
||||
### 2.4 SAE Serverless应用
|
||||
|
||||
**<2A>賢<EFBFBD>蝛粹𡢿**嚗?- **<2A>賢<EFBFBD>蝛粹𡢿ID**嚗䫤cn-beijing:test-airesearch`
|
||||
- **<EFBFBD>啣<EFBFBD>**嚗𡁜<E59A97><F0A1819C>?嚗<><E59A97>鈭穿<E988AD>
|
||||
**命名空间**:
|
||||
- **命名空间ID**:`cn-beijing:test-airesearch`
|
||||
- **地域**:华北2(北京)
|
||||
|
||||
**撌脤<EFBFBD>蝵脣<EFBFBD><EFBFBD>典<EFBFBD>銵?*嚗?
|
||||
| 摨𠉛鍂<F0A0899B>滨妍 | <20>嗆<EFBFBD>?| 閫<>聢 | 摰硺<E691B0><E7A1BA>?| 蝡臬藁 | <20><><EFBFBD><EFBFBD>啣<EFBFBD> | <20>𨅯<EFBFBD><F0A885AF><EFBFBD>𧋦 |
|
||||
**已部署应用列表**:
|
||||
|
||||
| 应用名称 | 状态 | 规格 | 实例数 | 端口 | 内网地址 | 镜像版本 |
|
||||
|---------|------|------|-------|------|---------|---------|
|
||||
| **python-extraction-test** | <EFBFBD>?餈鞱<E9A488>銝?| 1<EFBFBD>?GB | 1 | 8000 | `http://172.17.173.66:8000` | v1.0 |
|
||||
| **nodejs-backend-test** | <EFBFBD>?餈鞱<E9A488>銝?| 1<EFBFBD>?GB | 1 | 3001 | `http://172.17.173.73:3001` | v1.3 |
|
||||
| **frontend-nginx-service** | <EFBFBD>?餈鞱<E9A488>銝?| 0.5<EFBFBD>?GB | 1 | 80 | `http://172.17.173.80:80` | v1.2 |
|
||||
| **python-extraction-test** | ✅ 运行中 | 1核2GB | 1 | 8000 | `http://172.17.173.66:8000` | v1.0 |
|
||||
| **nodejs-backend-test** | ✅ 运行中 | 1核2GB | 1 | 3001 | `http://172.17.173.73:3001` | v1.3 |
|
||||
| **frontend-nginx-service** | ✅ 运行中 | 0.5核1GB | 1 | 80 | `http://172.17.173.80:80` | v1.2 |
|
||||
|
||||
**<EFBFBD>臬<EFBFBD><EFBFBD>㗛<EFBFBD><EFBFBD>滨蔭**嚗?
|
||||
**Node.js<6A>𡒊垢嚗ěodejs-backend-test嚗?*嚗?```bash
|
||||
**环境变量配置**:
|
||||
|
||||
**Node.js后端(nodejs-backend-test)**:
|
||||
```bash
|
||||
NODE_ENV=production
|
||||
PORT=3001
|
||||
DATABASE_URL=postgresql://airesearch:Xibahe%40fengzhibo117@pgm-2zex1m2y3r23hdn5.pg.rds.aliyuncs.com:5432/ai_clinical_research?connection_limit=18&pool_timeout=10
|
||||
@@ -142,12 +162,14 @@ WECHAT_AGENT_ID=1000002
|
||||
WECHAT_CORP_SECRET=AZIVxMtoLb0rEszXS81e4dBRl-I9kgTjygIS0cFfENU
|
||||
```
|
||||
|
||||
**<EFBFBD>滨垢Nginx嚗Êrontend-nginx-service嚗?*嚗?```bash
|
||||
**前端Nginx(frontend-nginx-service)**:
|
||||
```bash
|
||||
BACKEND_SERVICE_HOST=172.17.173.73
|
||||
BACKEND_SERVICE_PORT=3001
|
||||
```
|
||||
|
||||
**Python敺格<EFBFBD><EFBFBD>∴<EFBFBD>python-extraction-test嚗?*嚗?```bash
|
||||
**Python微服务(python-extraction-test)**:
|
||||
```bash
|
||||
LOG_LEVEL=INFO
|
||||
TEMP_DIR=/tmp/extraction_service
|
||||
```
|
||||
@@ -156,39 +178,55 @@ TEMP_DIR=/tmp/extraction_service
|
||||
|
||||
### 2.5 OSS对象存储
|
||||
|
||||
**Bucket靽⊥<EFBFBD>**嚗?- **Bucket<65>滨妍**嚗䫤ai-clinical-research`
|
||||
- **<EFBFBD>啣<EFBFBD>**嚗𡁜<E59A97><F0A1819C>?嚗<><E59A97>鈭穿<E988AD>
|
||||
- **摮睃<EFBFBD>蝐餃<EFBFBD>**嚗𡁏<E59A97><F0A1818F><EFBFBD><EFBFBD><EFBFBD>?- **霈輸䔮<E8BCB8>批<EFBFBD>**嚗𡁶<E59A97><F0A181B6>?- **摮睃<E691AE><E79D83>𦯀<EFBFBD>蝐餃<E89D90>**嚗𡁜<E59A97><F0A1819C>𤾸<EFBFBD>雿坔<E99BBF><E59D94>?- **<EFBFBD><EFBFBD><EFBFBD>Endpoint**嚗䫤oss-cn-beijing-internal.aliyuncs.com`
|
||||
**Bucket信息**:
|
||||
- **Bucket名称**:`ai-clinical-research`
|
||||
- **地域**:华北2(北京)
|
||||
- **存储类型**:标准存储
|
||||
- **访问控制**:私有
|
||||
- **存储冗余类型**:同城冗余存储
|
||||
- **内网Endpoint**:`oss-cn-beijing-internal.aliyuncs.com`
|
||||
- **公网Endpoint**:`oss-cn-beijing.aliyuncs.com`
|
||||
- **Bucket域名(内网)**:`ai-clinical-research.oss-cn-beijing-internal.aliyuncs.com`
|
||||
- **<EFBFBD>𥕦遣<EFBFBD>園𡢿**嚗?025-12-16 20:22
|
||||
- **创建时间**:2025-12-16 20:22
|
||||
|
||||
**RAM<EFBFBD>冽<EFBFBD>霈輸䔮<EFBFBD>剛<EFBFBD>**嚗?- **RAM<41>冽<EFBFBD><E586BD>?*嚗䫤oss-bucket-put-object@1991407246109125.onaliyun.com`
|
||||
**RAM用户访问凭证**:
|
||||
- **RAM用户名**:`oss-bucket-put-object@1991407246109125.onaliyun.com`
|
||||
- **AccessKeyId**:`LTAI5tB2Dt3NdvBL3G7nYGv7`
|
||||
- **AccessKeySecret**:`1iSN9k39RkApP93QjUhC1DcPIeMG4V`
|
||||
- **UID**:`203256565888301026`
|
||||
- **<EFBFBD>𥕦遣<EFBFBD>園𡢿**嚗?025-12-16 20:31:41
|
||||
- **创建时间**:2025-12-16 20:31:41
|
||||
|
||||
<EFBFBD>𩤃<EFBFBD> **摰匧<E691B0>霅血<E99C85>**嚗鋫ccessKey<65>舀<EFBFBD><E88880>煺縑<E785BA>荔<EFBFBD>霂瑕嚉<E79195>𣂷漱<F0A382B7>啣<EFBFBD>撘<EFBFBD>Git隞枏<E99A9E>嚗?
|
||||
**摮睃<E691AE><E79D83>券<EFBFBD>?*嚗?- `/uploads/pdfs/` - PDF<44><46>辣銝𠹺<E98A9D>
|
||||
⚠️ **安全警告**:AccessKey是敏感信息,请勿提交到公开Git仓库!
|
||||
|
||||
**存储用途**:
|
||||
- `/uploads/pdfs/` - PDF文件上传
|
||||
- `/uploads/docx/` - Word文档上传
|
||||
- `/uploads/txt/` - 文本文件上传
|
||||
- `/exports/` - 导出文件临时存储
|
||||
|
||||
---
|
||||
|
||||
### 2.6 CLB韐蠘蝸<EFBFBD><EFBFBD>﹛<EFBFBD>?
|
||||
**<2A>祉<EFBFBD>霈輸䔮<E8BCB8>啣<EFBFBD>**嚗?- **<EFBFBD>祉<EFBFBD>IP**嚗䫤8.140.53.236`
|
||||
### 2.6 CLB负载均衡器
|
||||
|
||||
**公网访问地址**:
|
||||
- **公网IP**:`8.140.53.236`
|
||||
- **访问地址**:`http://8.140.53.236/`
|
||||
- **<EFBFBD>笔<EFBFBD>蝏穃<EFBFBD>**嚗䫤https://iit.xunzhengyixue.com/`嚗<>歇憭<E6AD87><E686AD>嚗?- **<2A>𡒊垢<F0A1928A>滚𦛚<E6BB9A>?*嚗䫤172.17.173.80:80`嚗<EFBFBD><EFBFBD>蝡烤ginx嚗?- **<EFBFBD>穃𨯬蝡臬藁**嚗?0嚗𠃍TTP嚗?
|
||||
- **域名绑定**:`https://iit.xunzhengyixue.com/`(已备案)
|
||||
- **后端服务器**:`172.17.173.80:80`(前端Nginx)
|
||||
- **监听端口**:80(HTTP)
|
||||
|
||||
---
|
||||
|
||||
## 📦 三、已部署服务详情
|
||||
|
||||
### 3.1 PostgreSQL<EFBFBD>唳旿摨?
|
||||
- **<2A>函蔡<E587BD>園𡢿**嚗?025-12-24
|
||||
- **<EFBFBD>函蔡<EFBFBD>孵<EFBFBD>**嚗䫤pg_dump` <20>券<EFBFBD>撖澆枂 <20>?RDS撖澆<E69296>
|
||||
- **<EFBFBD>唳旿餈<EFBFBD>宏<EFBFBD>園鵭**嚗𡁶漲12蝘𡜐<E89D98>90MB SQL<51><4C>辣嚗?- **撉諹<E69289><E8ABB9>嗆<EFBFBD>?*嚗尠<E59A97> Schema摰峕㟲<E5B395><E39FB2>㺭<EFBFBD>桐<EFBFBD><E6A190>氬<EFBFBD><E6B0AC><EFBFBD>蝟餅迤蝖?- **憭<>遢<EFBFBD><E981A2>辣**嚗䫤AIclinicalresearch/rds_init_20251224_154529.sql`嚗?0MB嚗?- **RDS<44>芸𢆡憭<F0A286A1>遢**嚗𡁏<E59A97><F0A1818F>亙<EFBFBD><E4BA99>?<3F>對<EFBFBD>靽萘<E99DBD>7憭抬<E686AD>
|
||||
### 3.1 PostgreSQL数据库
|
||||
|
||||
- **部署时间**:2025-12-24
|
||||
- **部署方式**:`pg_dump` 全量导出 → RDS导入
|
||||
- **数据迁移时长**:约12秒(90MB SQL文件)
|
||||
- **验证状态**:✅ Schema完整、数据一致、关系正确
|
||||
- **备份文件**:`AIclinicalresearch/rds_init_20251224_154529.sql`(90MB)
|
||||
- **RDS自动备份**:每日凌晨2点(保留7天)
|
||||
|
||||
---
|
||||
|
||||
@@ -196,21 +234,33 @@ TEMP_DIR=/tmp/extraction_service
|
||||
|
||||
**当前部署版本**:v1.2
|
||||
|
||||
**<EFBFBD>𨅯<EFBFBD>靽⊥<EFBFBD>**嚗?- **隞枏<E99A9E><E69E8F>滨妍**嚗䫤ai-clinical_frontend-nginx`
|
||||
- **<2A>𨅯<EFBFBD><F0A885AF><EFBFBD>𧋦**嚗䫤v1.2` <20><><EFBFBD>敶枏<E695B6><E69E8F>函蔡<E587BD><E894A1>𧋦嚗?- **<EFBFBD>𨅯<EFBFBD>憭批<EFBFBD>**嚗𡁶漲50MB
|
||||
**镜像信息**:
|
||||
- **仓库名称**:`ai-clinical_frontend-nginx`
|
||||
- **镜像版本**:`v1.2` ✅(当前部署版本)
|
||||
- **镜像大小**:约50MB
|
||||
- **基础镜像**:`nginx:alpine`
|
||||
- **<EFBFBD><EFBFBD>遣<EFBFBD>園𡢿**嚗?026-01-01
|
||||
- **构建时间**:2026-01-01
|
||||
- **镜像摘要**:sha256:1b444d3d04e0e0e62a50009f165991b7d0192d7e21804aa9a3b3558e5aec7961
|
||||
|
||||
**<EFBFBD>函蔡<EFBFBD>嗆<EFBFBD>?*嚗?- <20>?撌脫<E6928C><E884AB>罸<EFBFBD>蝵脣<E89DB5>SAE嚗?026-01-01嚗?- <20>?<3F>滚𦛚餈鞱<E9A488>甇<EFBFBD>虜嚗<E8999C><E59A97>蝵穃𧑐<E7A983><F0A79190>嚗冴ttp://172.17.173.80:80嚗?- <20>?隡<><E99AA1>敺桐縑<E6A190>笔<EFBFBD>撉諹<E69289><E8ABB9><EFBFBD>辣撌脤<E6928C>蝵莎<E89DB5>WW_verify_YnhsQBwI0ARnNoG0.txt嚗?
|
||||
**v1.2<EFBFBD><EFBFBD>𧋦<EFBFBD>湔鰵<EFBFBD><EFBFBD>捆**嚗?- <20>?靽桀<E99DBD>Windows<77>Z<EFBFBD>蝚阡䔮憸矋<E686B8>docker-entrypoint.sh CRLF<4C>䓴F嚗?- <20>?瘛餃<E7989B>隡<EFBFBD><E99AA1>敺桐縑<E6A190>笔<EFBFBD>撉諹<E69289><E8ABB9><EFBFBD>辣
|
||||
- <EFBFBD>𩤃<EFBFBD> <20>函蔡<E587BD>𤾸<EFBFBD>蝵穃𧑐<E7A983><F0A79190>撌脣<E6928C><E884A3>湛<EFBFBD>172.17.173.72 <20>?172.17.173.80
|
||||
**部署状态**:
|
||||
- ✅ 已成功部署到SAE(2026-01-01)
|
||||
- ✅ 服务运行正常(内网地址:http://172.17.173.80:80)
|
||||
- ✅ 企业微信域名验证文件已部署(WW_verify_YnhsQBwI0ARnNoG0.txt)
|
||||
|
||||
**Git<EFBFBD><EFBFBD>辣蝏𤘪<EFBFBD>**嚗?```
|
||||
**v1.2版本更新内容**:
|
||||
- ✅ 修复Windows换行符问题(docker-entrypoint.sh CRLF→LF)
|
||||
- ✅ 添加企业微信域名验证文件
|
||||
- ⚠️ 部署后内网地址已变更:172.17.173.72 → 172.17.173.80
|
||||
|
||||
**Git文件结构**:
|
||||
```
|
||||
AIclinicalresearch/frontend-v2/
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> Dockerfile <EFBFBD>?撌脫<E6928C>鈭二it嚗<74><E59A97><EFBFBD>嗆挾<E59786><E68CBE>遣嚗?<3F>鎿<EFBFBD><E98EBF><EFBFBD> .dockerignore <20>?撌脫<E6928C>鈭二it嚗<74><E59A97><EFBFBD>𡝗<EFBFBD>撱箔<E692B1>銝𧢲<E98A9D>嚗?<3F>鎿<EFBFBD><E98EBF><EFBFBD> nginx.conf <20>?撌脫<E6928C>鈭二it嚗𠃊ginx<6E>滨蔭嚗?<3F>鎿<EFBFBD><E98EBF><EFBFBD> docker-entrypoint.sh <20>?撌脫<E6928C>鈭二it嚗<74>鍳<EFBFBD>刻<EFBFBD><E588BB>穿<EFBFBD>Unix<69>Z<EFBFBD>蝚佗<E89D9A>
|
||||
├── Dockerfile ✅ 已提交Git(多阶段构建)
|
||||
├── .dockerignore ✅ 已提交Git(优化构建上下文)
|
||||
├── nginx.conf ✅ 已提交Git(Nginx配置)
|
||||
├── docker-entrypoint.sh ✅ 已提交Git(启动脚本,Unix换行符)
|
||||
└── public/
|
||||
<EFBFBD>婙<EFBFBD><EFBFBD><EFBFBD> WW_verify_YnhsQBwI0ARnNoG0.txt <EFBFBD>?隡<><E99AA1>敺桐縑<E6A190>笔<EFBFBD>撉諹<E69289><E8ABB9><EFBFBD>辣
|
||||
└── WW_verify_YnhsQBwI0ARnNoG0.txt ✅ 企业微信域名验证文件
|
||||
```
|
||||
|
||||
---
|
||||
@@ -219,118 +269,178 @@ AIclinicalresearch/frontend-v2/
|
||||
|
||||
**当前部署版本**:v1.3
|
||||
|
||||
**<2A>𨅯<EFBFBD>靽⊥<E99DBD>**嚗?- **隞枏<E99A9E><E69E8F>滨妍**嚗䫤backend-service`
|
||||
**镜像信息**:
|
||||
- **仓库名称**:`backend-service`
|
||||
- **镜像版本**:`v1.3` ✅(已部署)
|
||||
- **<EFBFBD>𨅯<EFBFBD>憭批<EFBFBD>**嚗?38MB (<EFBFBD>讠憬<EFBFBD>?~186MB)
|
||||
- **镜像大小**:838MB (压缩后 ~186MB)
|
||||
- **基础镜像**:`node:22-alpine`
|
||||
- **<EFBFBD><EFBFBD>遣<EFBFBD>園𡢿**嚗?025-12-25 18:43
|
||||
- **<EFBFBD><EFBFBD>遣蝑𣇉裦**嚗𡁏㺿餈𤤿<E9A488><F0A4A4BF>寞<EFBFBD>B嚗<42>𧋦<EFBFBD>啁<EFBFBD>霂?Docker<65>枏<EFBFBD>嚗?- **<EFBFBD>𨅯<EFBFBD><EFBFBD>䁅<EFBFBD>**嚗窃ha256:a4ffb61c15af1cd1ed9de187b4464a1aab773918e5b41b4df5b8ad96514f9941
|
||||
- **构建时间**:2025-12-25 18:43
|
||||
- **构建策略**:改进版方案B(本地编译+Docker打包)
|
||||
- **镜像摘要**:sha256:a4ffb61c15af1cd1ed9de187b4464a1aab773918e5b41b4df5b8ad96514f9941
|
||||
|
||||
**<EFBFBD><EFBFBD><EFBFBD>舀沲<EFBFBD>?*嚗?- **Node.js<6A><73>𧋦**嚗?2.x
|
||||
- **Prisma<EFBFBD><EFBFBD>𧋦**嚗?.17.0
|
||||
- **ORM**嚗䥪risma嚗<61>𣈲<EFBFBD><F0A388B2><EFBFBD>Schema嚗?- **Web獢<62>沲**嚗鎄astify
|
||||
- **<EFBFBD>笔<EFBFBD>蝟餌<EFBFBD>**嚗䮝g-boss嚗㇊ostgres-Only<6C>嗆<EFBFBD>嚗?- **蝻枏<E89DBB>蝟餌<E89D9F>**嚗䥪ostgreSQL嚗<4C>𤜯隞Οedis嚗?
|
||||
**<2A>函蔡<E587BD>嗆<EFBFBD>?*嚗?- <20>?撌脫<E6928C><E884AB>罸<EFBFBD>蝵脣<E89DB5>SAE嚗?025-12-25 18:55嚗?- <20>?<3F>滚𦛚餈鞱<E9A488>甇<EFBFBD>虜嚗<E8999C><E59A97>蝵穃𧑐<E7A983><F0A79190>嚗冴ttp://172.17.173.73:3001嚗?- <20>?<3F>亙熒璉<E78692><E79289>仿<EFBFBD>朞<EFBFBD>
|
||||
**技术架构**:
|
||||
- **Node.js版本**:22.x
|
||||
- **Prisma版本**:6.17.0
|
||||
- **ORM**:Prisma(支持多Schema)
|
||||
- **Web框架**:Fastify
|
||||
- **队列系统**:pg-boss(Postgres-Only架构)
|
||||
- **缓存系统**:PostgreSQL(替代Redis)
|
||||
|
||||
**Git<EFBFBD><EFBFBD>辣蝏𤘪<EFBFBD>**嚗?```
|
||||
**部署状态**:
|
||||
- ✅ 已成功部署到SAE(2025-12-25 18:55)
|
||||
- ✅ 服务运行正常(内网地址:http://172.17.173.73:3001)
|
||||
- ✅ 健康检查通过
|
||||
|
||||
**Git文件结构**:
|
||||
```
|
||||
AIclinicalresearch/backend/
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> Dockerfile <EFBFBD>?撌脫<E6928C>鈭二it嚗<74>㺿餈𤤿<E9A488><F0A4A4BF>寞<EFBFBD>B嚗𡁏𧋦<F0A1818F>啁<EFBFBD>霂?Docker<65>枏<EFBFBD>嚗?<3F>鎿<EFBFBD><E98EBF><EFBFBD> .dockerignore <20>?撌脫<E6928C>鈭二it嚗<74><E59A97><EFBFBD>𡝗<EFBFBD>撱箔<E692B1>銝𧢲<E98A9D>嚗?<3F>鎿<EFBFBD><E98EBF><EFBFBD> prisma/schema.prisma <20>?撌脣<E6928C>甇充DS嚗?2銝芣芋<E88AA3>?30+<2B>喟頂摮埈挾嚗?<3F>婙<EFBFBD><E5A999><EFBFBD> tsconfig.json <20>?撌脖<E6928C><E88496>吔<EFBFBD><E59094>㘾膄瘚贝<E7989A><E8B49D><EFBFBD>辣嚗?```
|
||||
├── Dockerfile ✅ 已提交Git(改进版方案B:本地编译+Docker打包)
|
||||
├── .dockerignore ✅ 已提交Git(优化构建上下文)
|
||||
├── prisma/schema.prisma ✅ 已同步RDS(32个模型+30+关系字段)
|
||||
└── tsconfig.json ✅ 已优化(排除测试文件)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 3.4 Python敺格<EFBFBD><EFBFBD>?
|
||||
### 3.4 Python微服务
|
||||
|
||||
**当前部署版本**:v1.0
|
||||
|
||||
**<EFBFBD>𨅯<EFBFBD>靽⊥<EFBFBD>**嚗?- **隞枏<E99A9E><E69E8F>滨妍**嚗䫤python-extraction`
|
||||
**镜像信息**:
|
||||
- **仓库名称**:`python-extraction`
|
||||
- **镜像版本**:`v1.0`
|
||||
- **<EFBFBD>𨅯<EFBFBD>憭批<EFBFBD>**嚗?.12GB
|
||||
- **镜像大小**:1.12GB
|
||||
- **基础镜像**:`python:3-slim`
|
||||
- **<EFBFBD><EFBFBD>遣<EFBFBD>園𡢿**嚗?025-12-24
|
||||
- **构建时间**:2025-12-24
|
||||
|
||||
**<EFBFBD>蠘<EFBFBD>璅∪<EFBFBD>**嚗?- <20>?**PDF<44><46>𧋦<EFBFBD>𣂼<EFBFBD>**嚗䥪yMuPDF 1.26.7
|
||||
- <EFBFBD>?**Docx<63><78>﹝<EFBFBD>𣂼<EFBFBD>**嚗鐝ammoth + python-docx
|
||||
- <EFBFBD>?**<2A>唳旿皜<E697BF><E79A9C>嚗㇄C撌亙<E6928C>嚗?*嚗䮝andas 2.0+ / numpy 1.24+ / polars 0.19+
|
||||
- <EFBFBD>?**霂剛<E99C82>璉<EFBFBD>瘚?*嚗饝angdetect
|
||||
- <EFBFBD>?**Nougat OCR**嚗𡁜歇蝘駁膄嚗<E88684><E59A97>撠誯<E692A0><E8AAAF>?.5GB嚗?
|
||||
**<2A>函蔡<E587BD>嗆<EFBFBD>?*嚗?- <20>?撌脤<E6928C>蝵脣<E89DB5>SAE嚗?025-12-24嚗?- <20>?摨𠉛鍂餈鞱<E9A488>甇<EFBFBD>虜嚗?銝泡orker餈𤤿<E9A488>嚗?- <20>?<3F><><EFBFBD>霈輸䔮<E8BCB8>啣<EFBFBD>嚗䫤http://172.17.173.66:8000`
|
||||
- <20>?<3F>亙熒璉<E78692><E79289>仿<EFBFBD>朞<EFBFBD>
|
||||
**功能模块**:
|
||||
- ✅ **PDF文本提取**:PyMuPDF 1.26.7
|
||||
- ✅ **Docx文档提取**:Mammoth + python-docx
|
||||
- ✅ **数据清洗(DC工具)**:pandas 2.0+ / numpy 1.24+ / polars 0.19+
|
||||
- ✅ **语言检测**:langdetect
|
||||
- ❌ **Nougat OCR**:已移除(减小镜像1.5GB)
|
||||
|
||||
**Git<EFBFBD><EFBFBD>辣蝏𤘪<EFBFBD>**嚗?```
|
||||
**部署状态**:
|
||||
- ✅ 已部署到SAE(2025-12-24)
|
||||
- ✅ 应用运行正常(2个worker进程)
|
||||
- ✅ 内网访问地址:`http://172.17.173.66:8000`
|
||||
- ✅ 健康检查通过
|
||||
|
||||
**Git文件结构**:
|
||||
```
|
||||
AIclinicalresearch/extraction_service/
|
||||
<EFBFBD>鎿<EFBFBD><EFBFBD><EFBFBD> Dockerfile <EFBFBD>?撌脫<E6928C>鈭二it嚗<74><E59A97><EFBFBD>嗆挾<E59786><E68CBE>遣 + <20>輸<EFBFBD>鈭烐<E988AD>嚗?<3F>鎿<EFBFBD><E98EBF><EFBFBD> .dockerignore <20>?撌脫<E6928C>鈭二it嚗<74><E59A97><EFBFBD>𡝗<EFBFBD>撱箔<E692B1>銝𧢲<E98A9D>嚗?<3F>婙<EFBFBD><E5A999><EFBFBD> requirements-prod.txt <20>?撌脫<E6928C>鈭二it嚗<74>移蝞<E7A7BB>靘肽<E99D98><E882BD>𡑒”嚗?```
|
||||
├── Dockerfile ✅ 已提交Git(多阶段构建 + 阿里云源)
|
||||
├── .dockerignore ✅ 已提交Git(优化构建上下文)
|
||||
└── requirements-prod.txt ✅ 已提交Git(精简依赖列表)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## <EFBFBD><EFBFBD> <20>䜘<EFBFBD><E49C98><EFBFBD>蝵脣<E89DB5><E884A3>脰扇敶?
|
||||
## 🔄 四、部署历史记录
|
||||
|
||||
### 2026-01-01(前端v1.2部署 - 企业微信域名验证)✅
|
||||
|
||||
#### 部署背景
|
||||
- **<2A>桃<EFBFBD>**嚗帋蛹隡<E89BB9><E99AA1>敺桐縑<E6A190>亙<EFBFBD><E4BA99>滨蔭<E6BBA8>臭縑<E887AD>笔<EFBFBD>嚗屸<E59A97>閬<EFBFBD>銁<EFBFBD>滨垢<E6BBA8>寧𤌍敶閖<E695B6>蝵脣<E89DB5><E884A3>漤<EFBFBD>霂<EFBFBD><E99C82>隞?- **<2A>笔<EFBFBD>**嚗冴ttps://iit.xunzhengyixue.com/
|
||||
- **目的**:为企业微信接入配置可信域名,需要在前端根目录部署域名验证文件
|
||||
- **域名**:https://iit.xunzhengyixue.com/
|
||||
- **验证文件**:WW_verify_YnhsQBwI0ARnNoG0.txt
|
||||
|
||||
#### <EFBFBD>函蔡餈<EFBFBD><EFBFBD>銝𡡞䔮憸䀝耨憭?1. **<2A>桅<EFBFBD><E6A185>𤑳緵**嚗𡁜<E59A97>蝡眠1.1<EFBFBD>函蔡憭梯揖嚗<EFBFBD>捆<EFBFBD>典鍳<EFBFBD>典<EFBFBD>蝡见朖<EFBFBD><EFBFBD><EFBFBD>? - <20>?<3F>啗情嚗锭AE<41>亙<EFBFBD>銝箇征嚗<E5BE81>捆<EFBFBD>函𠶖<E587BD><F0A0B696>遬蝷?撏拇<E6928F><E68B87>㚚<EFBFBD><E39A9A><EFBFBD>?
|
||||
- <20>?<3F>躰秤嚗䫤exec /docker-entrypoint.sh: no such file or directory`
|
||||
#### 部署过程与问题修复
|
||||
1. **问题发现**:前端v1.1部署失败,容器启动后立即退出
|
||||
- ❌ 现象:SAE日志为空,容器状态显示"崩溃或退出"
|
||||
- ❌ 错误:`exec /docker-entrypoint.sh: no such file or directory`
|
||||
|
||||
2. **<EFBFBD>寞𧋦<EFBFBD>笔<EFBFBD><EFBFBD><EFBFBD><EFBFBD>**嚗? - <20><> `docker-entrypoint.sh` 雿輻鍂鈭<E98D82>indows<77>Z<EFBFBD>蝚佗<E89D9A>CRLF `\r\n`嚗? - <20><> Linux摰孵膥<E5ADB5><E886A5>ash閫<68><E996AB><EFBFBD>冽<EFBFBD>瘜閗<E7989C><E99697>青RLF<4C>澆<EFBFBD><E6BE86><EFBFBD><EFBFBD><EFBFBD>? - <20><> 餈蹱糓銝<E7B393>銝芸<E98A9D><E88AB8>讠<EFBFBD>頝典像<E585B8>啣<EFBFBD><E595A3>煾䔮憸?
|
||||
3. **閫<><E996AB><EFBFBD>寞<EFBFBD>**嚗? - <20>?撠?`docker-entrypoint.sh` 頧祆揢銝摻nix<EFBFBD>Z<EFBFBD>蝚佗<EFBFBD>LF `\n`嚗? - <20>?雿輻鍂PowerShell<6C>賭誘<E8B3AD>寥<EFBFBD>頧祆揢
|
||||
- <EFBFBD>?<3F>砍𧑐Docker瘚贝<E7989A>撉諹<E69289><E8ABB9>朞<EFBFBD>
|
||||
2. **根本原因分析**:
|
||||
- 🔍 `docker-entrypoint.sh` 使用了Windows换行符(CRLF `\r\n`)
|
||||
- 🔍 Linux容器的bash解释器无法识别CRLF格式的脚本
|
||||
- 🔍 这是一个典型的跨平台开发问题
|
||||
|
||||
4. **<EFBFBD>𨅯<EFBFBD><EFBFBD><EFBFBD>遣銝擧綫<EFBFBD>?*嚗? - <20>?<3F>齿鰵<E9BDBF><E9B0B5>遣<EFBFBD>𨅯<EFBFBD><F0A885AF><EFBFBD>扇銝漓1.2嚗?3.7蝘𡜐<EFBFBD>
|
||||
- <EFBFBD>?<3F>券<EFBFBD><E588B8><EFBFBD>ACR<43>𣂼<EFBFBD>嚗Ê̌igest: 1b444d3d...嚗? - <20>?<3F>𨅯<EFBFBD><F0A885AF><EFBFBD>鉄隡<E98984><E99AA1>敺桐縑撉諹<E69289><E8ABB9><EFBFBD>辣
|
||||
3. **解决方案**:
|
||||
- ✅ 将 `docker-entrypoint.sh` 转换为Unix换行符(LF `\n`)
|
||||
- ✅ 使用PowerShell命令批量转换
|
||||
- ✅ 本地Docker测试验证通过
|
||||
|
||||
5. **SAE<EFBFBD>函蔡<EFBFBD>𣂼<EFBFBD>**嚗? - <20>?<3F>函蔡<E587BD>𨅯<EFBFBD><F0A885AF><EFBFBD>𧋦嚗鯝1.2
|
||||
- <EFBFBD>?<3F>臬<EFBFBD><E887AC>㗛<EFBFBD><E3979B>滨蔭嚗䫤BACKEND_SERVICE_HOST=172.17.173.73`, `BACKEND_SERVICE_PORT=3001`
|
||||
- <EFBFBD>?摰孵膥<E5ADB5>臬𢆡甇<F0A286A1>虜嚗<E8999C><E59A97>摨瑟<E691A8><E7919F>仿<EFBFBD>朞<EFBFBD>
|
||||
- <EFBFBD>?<3F>啣<EFBFBD>蝵穃𧑐<E7A983><F0A79190>嚗䫤http://172.17.173.80:80`
|
||||
- <20>𩤃<EFBFBD> IP<49>啣<EFBFBD><E595A3>睃<EFBFBD>嚗?72.17.173.72 <20>?172.17.173.80
|
||||
4. **镜像构建与推送**:
|
||||
- ✅ 重新构建镜像标记为v1.2(23.7秒)
|
||||
- ✅ 推送到ACR成功(digest: 1b444d3d...)
|
||||
- ✅ 镜像包含企业微信验证文件
|
||||
|
||||
5. **SAE部署成功**:
|
||||
- ✅ 部署镜像版本:v1.2
|
||||
- ✅ 环境变量配置:`BACKEND_SERVICE_HOST=172.17.173.73`, `BACKEND_SERVICE_PORT=3001`
|
||||
- ✅ 容器启动正常,健康检查通过
|
||||
- ✅ 新内网地址:`http://172.17.173.80:80`
|
||||
- ⚠️ IP地址变化:172.17.173.72 → 172.17.173.80
|
||||
|
||||
#### 技术要点总结
|
||||
1. **Windows<EFBFBD>Z<EFBFBD>蝚阡䔮憸?*嚗? - <20>笔<EFBFBD>嚗鎭it<69>汾indows銝𢠃<E98A9D>霈方蓮<E696B9>V蛹CRLF
|
||||
- 閫<EFBFBD><EFBFBD>嚗帋蝙<EFBFBD>?`.gitattributes` <20>𡝗<EFBFBD><F0A19D97>刻蓮<E588BB>? - 撉諹<E69289>嚗䫤(Get-Content file -Raw) -match "\`r\`n"`
|
||||
1. **Windows换行符问题**:
|
||||
- 原因:Git在Windows上默认转换为CRLF
|
||||
- 解决:使用 `.gitattributes` 或手动转换
|
||||
- 验证:`(Get-Content file -Raw) -match "\`r\`n"`
|
||||
|
||||
2. **摰孵膥靚<EFBFBD><EFBFBD><EFBFBD><EFBFBD>撌?*嚗? - <20>砍𧑐瘚贝<E7989A>嚗䫤docker run --rm -e KEY=VALUE image:tag`
|
||||
2. **容器调试技巧**:
|
||||
- 本地测试:`docker run --rm -e KEY=VALUE image:tag`
|
||||
- 查看日志:`docker logs container_name`
|
||||
- 进入容器:`docker exec -it container sh`
|
||||
|
||||
3. **SAE<EFBFBD>函蔡<EFBFBD><EFBFBD>雿喳<EFBFBD>頝?*嚗? - <20>臬<EFBFBD><E887AC>㗛<EFBFBD>敹<EFBFBD>◆<EFBFBD>滨蔭摰峕㟲
|
||||
3. **SAE部署最佳实践**:
|
||||
- 环境变量必须配置完整
|
||||
- 本地先验证镜像可正常运行
|
||||
- 部署后IP可能变化,需要更新依赖服务的配置
|
||||
|
||||
#### 部署结果
|
||||
- <EFBFBD>?<3F>滨垢<E6BBA8>滚𦛚v1.2<EFBFBD>函蔡<EFBFBD>𣂼<EFBFBD>
|
||||
- <EFBFBD>?隡<><E99AA1>敺桐縑撉諹<E69289><E8ABB9><EFBFBD>辣<EFBFBD>航挪<E888AA>?- <20>?蝟餌<E89D9F><E9A48C>港<EFBFBD>餈鞱<E9A488>甇<EFBFBD>虜
|
||||
- <EFBFBD>𩤃<EFBFBD> <20><>閬<EFBFBD>釣<EFBFBD>𧶏<EFBFBD><F0A7B68F><EFBFBD><EFBFBD><EFBFBD>啣<EFBFBD>撌脫凒<E884AB>堆<EFBFBD>靘肽<E99D98><E882BD>滨垢<E6BBA8><E59EA2><EFBFBD><EFBFBD>⊿<EFBFBD>閬<EFBFBD><E996AC><EFBFBD>湧<EFBFBD>蝵?
|
||||
- ✅ 前端服务v1.2部署成功
|
||||
- ✅ 企业微信验证文件可访问
|
||||
- ✅ 系统整体运行正常
|
||||
- ⚠️ 需要注意:内网地址已更新,依赖前端的服务需要调整配置
|
||||
|
||||
---
|
||||
|
||||
### 2025-12-25嚗<EFBFBD><EFBFBD><EFBFBD>湧<EFBFBD>蝵脫<EFBFBD><EFBFBD><EFBFBD>𠯫嚗咓<EFBFBD>?
|
||||
### 2025-12-25(完整部署成功日)🎉
|
||||
|
||||
#### 上午:Node.js后端部署
|
||||
- <EFBFBD>?Node.js<EFBFBD>𡒊垢<EFBFBD>𣂼<EFBFBD><EFBFBD>函蔡<EFBFBD>訕AE嚗ǒ1.3嚗?- <20>?靽桀<E99DBD>Alpine Linux bash頝臬<E9A09D><E887AC>桅<EFBFBD>嚗?bin/bash <20>?/bin/sh嚗?- <20>?靽桀<E99DBD>config<69>桀<EFBFBD>蝻箏仃<E7AE8F>桅<EFBFBD>嚗㇄ockerfile銵亙<E98AB5>COPY config嚗?- <20>?靽桀<E99DBD>pino-pretty<74>煺漣<E785BA>臬<EFBFBD><E887AC>桅<EFBFBD>嚗<EFBFBD>辺隞嗅鍳<E59785>剁<EFBFBD>
|
||||
- <EFBFBD>?靽桀<E99DBD>healthCheck ES Module<6C>澆捆<E6BE86>改<EFBFBD>require <20>?import嚗?- <20>?<3F><><EFBFBD>撘撇WT撖<54>𤨎嚗?4雿滚<E99BBF><E6BB9A>剛<EFBFBD><E5899B>塚<EFBFBD>
|
||||
- ✅ Node.js后端成功部署到SAE(v1.3)
|
||||
- ✅ 修复Alpine Linux bash路径问题(/bin/bash → /bin/sh)
|
||||
- ✅ 修复config目录缺失问题(Dockerfile补充COPY config)
|
||||
- ✅ 修复pino-pretty生产环境问题(条件启用)
|
||||
- ✅ 修复healthCheck ES Module兼容性(require → import)
|
||||
- ✅ 生成强JWT密钥(64位十六进制)
|
||||
|
||||
#### 中午:前端Nginx部署
|
||||
- <EFBFBD>?<3F>滨垢Nginx<6E>𣂼<EFBFBD><F0A382BC>函蔡<E587BD>訕AE嚗ǒ1.0嚗?- <20>?<3F>滨垢<E6BBA8>滚𦛚餈鞱<E9A488>甇<EFBFBD>虜嚗<E8999C><E59A97>蝵穃𧑐<E7A983><F0A79190>嚗冴ttp://172.17.173.72:80嚗?- <20>?<3F>滨垢<E6BBA8>啣<EFBFBD>蝡臭誨<E887AD><E8AAA8><EFBFBD>霂<EFBFBD><E99C82>朞<EFBFBD>
|
||||
- <EFBFBD>?摰峕㟲<E5B395>曇楝瘚贝<E7989A><E8B49D>朞<EFBFBD>嚗<EFBFBD><E59A97>蝡胼<E89DA1><E883BC>𡒊垢<F0A1928A>埝㺭<E59F9D>桀<EFBFBD>嚗?
|
||||
- ✅ 前端Nginx成功部署到SAE(v1.0)
|
||||
- ✅ 前端服务运行正常(内网地址:http://172.17.173.72:80)
|
||||
- ✅ 前端到后端代理验证通过
|
||||
- ✅ 完整链路测试通过(前端→后端→数据库)
|
||||
|
||||
#### 下午:环境变量修复与CLB配置
|
||||
- <EFBFBD>?<3F>𤑳緵撌亙<E6928C>C<EFBFBD>?憭批<E686AD><E689B9>賣𥁒<E8B3A3>辷<EFBFBD>connect ECONNREFUSED 127.0.0.1:8000嚗?- <20>?<3F>埝䰻撟嗡耨憭滚<E686AD><E6BB9A>桅䔮憸矋<E686B8><E79F8B>臬<EFBFBD><E887AC>㗛<EFBFBD><E3979B>漤<EFBFBD>霂? - 隞<><E99A9E>雿輻鍂嚗䫤EXTRACTION_SERVICE_URL`
|
||||
- ✅ 发现工具C的7大功能报错(connect ECONNREFUSED 127.0.0.1:8000)
|
||||
- ✅ 排查并修复关键问题:环境变量名错误
|
||||
- 代码使用:`EXTRACTION_SERVICE_URL`
|
||||
- 错误配置:`PYTHON_SERVICE_URL`
|
||||
- 正确配置:`EXTRACTION_SERVICE_URL=http://172.17.173.66:8000`
|
||||
- <EFBFBD>?Node.js<EFBFBD>𡒊垢<EFBFBD>齿鰵<EFBFBD>函蔡嚗䬠P<EFBFBD>啣<EFBFBD><EFBFBD>湔鰵銝綽<EFBFBD>http://172.17.173.73:3001
|
||||
- <EFBFBD>?<3F>湔鰵<E6B994>滨垢Nginx<6E>臬<EFBFBD><E887AC>㗛<EFBFBD>嚗鋳ACKEND_SERVICE_HOST=172.17.173.73
|
||||
- <EFBFBD>?<3F>滨蔭CLB韐蠘蝸<E8A098><E89DB8>﹛<EFBFBD>剁<EFBFBD><E58981>瑕<EFBFBD><E79195>祉<EFBFBD>霈輸䔮<E8BCB8>啣<EFBFBD>嚗冴ttp://8.140.53.236/
|
||||
- <EFBFBD>?撌亙<E6928C>C<EFBFBD>?憭批<E686AD><E689B9>賢<EFBFBD><E8B3A2>冽<EFBFBD>霂閖<E99C82>朞<EFBFBD>
|
||||
- <EFBFBD>?<3F><>讃蝑𥟇䰻璅∪<E79285>瘚贝<E7989A><E8B49D>朞<EFBFBD>
|
||||
- <EFBFBD>?摰峕㟲蝟餌<E89D9F><E9A48C>函蔡<E587BD>𣂼<EFBFBD>撉諹<E69289> <20><>
|
||||
- ✅ Node.js后端重新部署,IP地址更新为:http://172.17.173.73:3001
|
||||
- ✅ 更新前端Nginx环境变量:BACKEND_SERVICE_HOST=172.17.173.73
|
||||
- ✅ 配置CLB负载均衡器,获得公网访问地址:http://8.140.53.236/
|
||||
- ✅ 工具C的7大功能全部测试通过
|
||||
- ✅ 文献筛查模块测试通过
|
||||
- ✅ 完整系统部署成功验证 🎉
|
||||
|
||||
---
|
||||
|
||||
### 2025-12-24(初始部署)
|
||||
|
||||
- <EFBFBD>?PostgreSQL<EFBFBD>唳旿摨㯄<EFBFBD>蝵脣<EFBFBD><EFBFBD>?- <20>?<3F>滨垢Nginx Docker<65>𨅯<EFBFBD><F0A885AF><EFBFBD>遣撟嗆綫<E59786><E7B6AB>秐ACR
|
||||
- <EFBFBD>?Python敺格<E695BA><E6A0BC>.ocker<65>𨅯<EFBFBD><F0A885AF><EFBFBD>遣撟嗆綫<E59786><E7B6AB>秐ACR
|
||||
- <EFBFBD>?Python敺格<EFBFBD><EFBFBD>⊥<EFBFBD><EFBFBD>罸<EFBFBD>蝵脣<EFBFBD>SAE嚗<EFBFBD><EFBFBD>蝵穃𧑐<EFBFBD><EFBFBD>嚗?72.17.173.66:8000嚗?- <20>?閫<><E996AB>ACR<43>𨅯<EFBFBD><F0A885AF>匧<EFBFBD><E58CA7><EFBFBD><EFBFBD><EFBFBD>桅<EFBFBD>嚗<EFBFBD><E59A97>蝵桅<E89DB5><E6A185>譍<EFBFBD>摨栞恕霂<E68195><E99C82>
|
||||
- <EFBFBD>?Node.js<6A>𡒊垢Prisma<6D>滚<EFBFBD><E6BB9A>峕郊摰峕<E691B0>嚗?2銝芣芋<E88AA3>页<EFBFBD><E9A1B5>见𢆡銵亙<E98AB5>30+<2B>喟頂摮埈挾嚗?- <20>?Node.js<6A>𡒊垢TypeScript蝻𤥁<E89DBB>靽桀<E99DBD>摰峕<E691B0>嚗<EFBFBD>耨憭?00+<2B>躰秤<E8BAB0>?<3F>躰秤嚗?- <20>?Node.js<6A>𡒊垢Docker<65>𨅯<EFBFBD><F0A885AF><EFBFBD>遣<EFBFBD>𣂼<EFBFBD>嚗?38MB嚗峕㺿餈𤤿<E9A488><F0A4A4BF>寞<EFBFBD>B嚗?- <20>?Node.js<6A>𡒊垢<F0A1928A>𨅯<EFBFBD><F0A885AF>券<EFBFBD><E588B8>秐ACR嚗ǒ1.0嚗?
|
||||
- ✅ PostgreSQL数据库部署完成
|
||||
- ✅ 前端Nginx Docker镜像构建并推送至ACR
|
||||
- ✅ Python微服务Docker镜像构建并推送至ACR
|
||||
- ✅ Python微服务成功部署到SAE(内网地址:172.17.173.66:8000)
|
||||
- ✅ 解决ACR镜像拉取权限问题(配置镜像仓库认证)
|
||||
- ✅ Node.js后端Prisma反向同步完成(32个模型,手动补全30+关系字段)
|
||||
- ✅ Node.js后端TypeScript编译修复完成(修复200+错误→0错误)
|
||||
- ✅ Node.js后端Docker镜像构建成功(838MB,改进版方案B)
|
||||
- ✅ Node.js后端镜像推送至ACR(v1.0)
|
||||
|
||||
---
|
||||
|
||||
> **提示**:本文档记录SAE服务器的最新真实状态,每次部署后必须更新!
|
||||
> **<EFBFBD><EFBFBD><EFBFBD>擧凒<EFBFBD>?*嚗?026-01-01 14:00
|
||||
> **最后更新**:2026-01-01 14:00
|
||||
> **当前版本**:前端v1.2 | 后端v1.3 | Python v1.0 | PostgreSQL 15
|
||||
|
||||
Reference in New Issue
Block a user