Files
railwaysystem/docs/handbook/08-deployment-and-release.md
T

102 lines
4.8 KiB
Markdown
Raw Normal View History

# 08. RailwaySystem 部署与发布指南
> **文档定位**:面向运维工程师、发布主管及系统管理员的生产与测试环境部署、数据库迁移及服务维护手册。
> **当前基线**:Final Candidate `5a49b2e2988bf23ca2a70568264c05b24dfda1b6` (`origin/feat/cicd-pipeline`)
---
## 1. 目标运行环境标准
系统在多环境部署中遵循标准化的网络拓扑与端口规划:
```mermaid
flowchart LR
subgraph Clients["客户端层"]
Web["PC 浏览器 (Admin/教师/学员)"]
BoardDev["物联网终端 (电子班牌)"]
end
subgraph ReverseProxy["反向代理与静态托管 (端口 8082)"]
Nginx["Nginx Web 服务<br/>静态托管 build_ui / SSL 443 / 8082"]
end
subgraph AppCluster["业务应用服务 (端口 8092)"]
SpringBoot["Spring Boot 容器 (ruoyi-admin)<br/>JVM 4GB+ / 端口 8092"]
end
subgraph DataTier["国产数据库与缓存层"]
KB[("人大金仓 KingbaseES V9<br/>端口 54321 / 4321")]
Redis[("Redis 缓存服务<br/>端口 6379")]
end
Web -->|HTTP / HTTPS| Nginx
BoardDev -->|HTTP API| Nginx
Nginx -->|反向代理 /prod-api| SpringBoot
SpringBoot -->|JDBC 8.6.0| KB
SpringBoot -->|Jedis / Lettuce| Redis
```
| 组件名称 | 本地开发环境端口 | 集成与验收测试环境端口 | 生产环境建议规范 |
| :--- | :---: | :---: | :--- |
| **后端 API 服务 (Spring Boot)** | `8090` | **`8092`** | 8090~8099 负载均衡集群,JVM 内存建议分配 4GB+ |
| **前端交互应用 (Vue/Nginx)** | `8080` | **`8082`** | Nginx 反向代理(443/80),开启 Gzip 压缩与静态缓存 |
| **KingbaseES 国产主库** | `127.0.0.1:4321` (SSH隧道)| 直连实例 `54321` / `4321` | 国产人大金仓数据库实例,标准单主库配置 |
| **Redis 缓存服务** | `6379` (无密码) | `6379` (带密码预检) | 标准 Redis 缓存服务,用于 Token 校验与验证码防重放 |
---
## 2. 发布增量迁移规范 (Release DB Delta)
在系统从初始 V2 物理结构演进到当前 Final Candidate 的过程中,形成了正式的发布增量迁移序列:
> **正式发布增量版本**:`CURRENT_RELEASE_DB_DELTA = 3`
### 2.1 正式 Delta 脚本清单
1. **Delta 001** —— `RuoYi-Vue/sql/system/kingbase/001_sys_oper_log_cost_time.sql`
- 作用:补齐 Kingbase 系统操作日志表中的消耗时间(`cost_time`)统计字段,保障运维监控正常运行。
2. **Delta 002** —— `RuoYi-Vue/sql/system/kingbase/002_legacy_analytics_permissions.sql`
- 作用:将旧分析模块菜单权限与 V2 契约精准对齐,建立只读报表查询与导出安全屏障。
3. **Delta 003** —— `RuoYi-Vue/sql/system/kingbase/003_report_attendance_action_permissions.sql`
- 作用:向 `public.sys_menu` 表声明开班现场报到确认(`train:report:confirm`)、课次考勤打卡(`train:attendance:checkin`)与考勤人工修正(`train:attendance:edit`)三项按钮级原子权限。
### 2.2 字典初始化红线警示
* ⚠️ **`007_dicts.sql` 明确执行禁令**:
- **`DO NOT EXECUTE`**:该脚本包含了大量未经环境幂等校验的历史字典初始数据,若盲目物理执行会污染生产 `sys_dict_data` 主键并引发唯一性冲突。在当前发布版本中严格禁止在生产库物理执行!
---
## 3. 标准发布与升级步骤
生产升级必须遵循受控操作规程:
```bash
# 步骤 1:拉取受控发布分支最新代码
git checkout feat/cicd-pipeline
git pull origin feat/cicd-pipeline
# 步骤 2:驱动依赖与环境预检
bash scripts/bootstrap/check-kingbase-jdbc.sh
# 步骤 3:数据库增量应用 (仅执行当前 Delta 001/002/003)
ksql -U SYSTEM -d training -f RuoYi-Vue/sql/system/kingbase/001_sys_oper_log_cost_time.sql
ksql -U SYSTEM -d training -f RuoYi-Vue/sql/system/kingbase/002_legacy_analytics_permissions.sql
ksql -U SYSTEM -d training -f RuoYi-Vue/sql/system/kingbase/003_report_attendance_action_permissions.sql
# 步骤 4:后端服务编译打包与启动 (8092 目标端口)
mvn clean package -DskipTests
java -Xms2048m -Xmx4096m -jar RuoYi-Vue/ruoyi-admin/target/ruoyi-admin.jar --server.port=8092 &
# 步骤 5:前端静态资源编译并由 Nginx 承载 (8082 目标端口)
cd build_ui
npm run build:prod
# 部署至 Nginx html 目录,加载 deploy/nginx.conf.example 配置
```
---
## 4. 技术参考链接 (Technical References)
* Kingbase JDBC 驱动依赖说明:[deployment/kingbase-jdbc-provisioning.md](deployment/kingbase-jdbc-provisioning.md)
* 发版说明与变更记录:[docs/reports/archive/20260915/release-notes.md](../reports/archive/20260915/release-notes.md)
* 部署验收与就绪报告:[docs/reports/archive/20260915/deployment-report.md](../reports/archive/20260915/deployment-report.md)
* 数据库物理模型清单:[docs/database-v2/01_table_inventory.md](../database-v2/01_table_inventory.md)