20260823210241
This commit is contained in:
1 parent
5ff4583aeb
commit
f4c7413dc6
2766 files changed
+1836409
-94689
No files matched your search
@@ -0,0 +1,330 @@
|
||||
# 故障处理
|
||||
|
||||
<cite>
|
||||
**本文引用的文件**
|
||||
- [GlobalExceptionHandler.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java)
|
||||
- [application.yaml](file://fms-api/src/main/resources/application.yaml)
|
||||
- [http.js](file://fms-vue/src/services/http.js)
|
||||
- [FpsMonitor.vue](file://fms-vue/src/components/FpsMonitor.vue)
|
||||
- [OrgDatabaseConfigLoader.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/database/OrgDatabaseConfigLoader.java)
|
||||
- [OrgDatabaseConfig.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/database/OrgDatabaseConfig.java)
|
||||
- [README.md](file://fms-api/config/dbconfigs/README.md)
|
||||
- [LogRebuild.java](file://.tmp-fkcheck/LogRebuild.java)
|
||||
- [OrgDataSourceFactoryTests.java](file://fms-api/src/test/java/cn/g3soft/fmsapi/database/OrgDataSourceFactoryTests.java)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构总览](#架构总览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能注意事项](#性能注意事项)
|
||||
8. [故障排查指南](#故障排查指南)
|
||||
9. [结论](#结论)
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本指南面向FMS系统的运维与研发人员,聚焦于常见故障的类型识别、定位方法、恢复流程与预防机制。内容覆盖前后端错误日志分析、数据库连接异常、网络问题、内存与CPU瓶颈诊断,以及服务重启、数据回滚、熔断降级与健康检查等实践建议。
|
||||
|
||||
## 项目结构
|
||||
FMS系统由前端Vue应用与后端Spring Boot API组成:
|
||||
- 前端负责请求拦截、统一错误提示、登录态处理与运行时性能监控(FPS)。
|
||||
- 后端提供全局异常处理、多机构数据库配置加载、连接池参数配置与结构化日志表设计。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
FE["前端 Vue<br/>请求拦截/错误提示/FPS监控"] --> API["后端 Spring Boot API<br/>全局异常/接口响应"]
|
||||
API --> DB["SQL Server<br/>多机构数据库"]
|
||||
API --> LOG["日志表 s_log_technical / s_log_login / s_log_audit"]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [http.js:40-104](file://fms-vue/src/services/http.js#L40-L104)
|
||||
- [GlobalExceptionHandler.java:15-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L15-L84)
|
||||
- [application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [LogRebuild.java:25-96](file://.tmp-fkcheck/LogRebuild.java#L25-L96)
|
||||
|
||||
**章节来源**
|
||||
- [http.js:1-111](file://fms-vue/src/services/http.js#L1-L111)
|
||||
- [application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
|
||||
## 核心组件
|
||||
- 前端HTTP拦截器:统一注入鉴权头、解析服务端返回码、处理超时与网络异常、对认证失败进行会话清理与跳转登录。
|
||||
- 后端全局异常处理器:捕获业务异常、保存对象异常、数据库访问异常与未处理异常,记录系统异常并返回统一错误响应。
|
||||
- 多机构数据库配置加载:按机构ID读取properties文件,校验URL协议为SQL Server,抛出非法路径或认证错误。
|
||||
- 连接池与服务器配置:定义端口、上下文路径、数据库连接池参数(初始大小、最大活跃数、等待时间、空闲检测等)。
|
||||
- 日志表结构:技术日志、登录日志、审计日志包含trace_id、request_id、错误码、异常文本、上下文等字段,便于追踪与分析。
|
||||
|
||||
**章节来源**
|
||||
- [http.js:40-104](file://fms-vue/src/services/http.js#L40-L104)
|
||||
- [GlobalExceptionHandler.java:15-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L15-L84)
|
||||
- [OrgDatabaseConfigLoader.java:31-57](file://fms-api/src/main/java/cn/g3soft/fmsapi/database/OrgDatabaseConfigLoader.java#L31-L57)
|
||||
- [application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [LogRebuild.java:25-96](file://.tmp-fkcheck/LogRebuild.java#L25-L96)
|
||||
|
||||
## 架构总览
|
||||
前后端通过REST交互,前端在请求层集中处理鉴权与错误提示;后端以全局异常处理器统一收敛异常,并通过数据库连接池访问多机构SQL Server。日志写入结构化表,支持按trace_id与级别检索。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as "用户浏览器"
|
||||
participant FE as "前端 http.js"
|
||||
participant API as "后端 GlobalExceptionHandler"
|
||||
participant DB as "SQL Server"
|
||||
participant LOG as "日志表"
|
||||
U->>FE : 发起API请求
|
||||
FE->>FE : 注入Authorization头
|
||||
FE->>API : HTTP请求
|
||||
API->>DB : 执行数据库操作
|
||||
DB-->>API : 结果或异常
|
||||
API->>LOG : 记录技术/登录/审计日志
|
||||
API-->>FE : 统一响应(成功/业务/系统异常)
|
||||
FE-->>U : 展示结果或错误提示
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [http.js:40-104](file://fms-vue/src/services/http.js#L40-L104)
|
||||
- [GlobalExceptionHandler.java:15-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L15-L84)
|
||||
- [LogRebuild.java:25-96](file://.tmp-fkcheck/LogRebuild.java#L25-L96)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 前端错误处理与性能监控
|
||||
- 请求拦截:自动附加Bearer Token,超时默认15秒。
|
||||
- 响应拦截:将无code的响应包装为标准结构;根据返回码判断是否认证失败并跳转登录;对网络异常与5xx错误弹出全局消息提示。
|
||||
- 性能监控:内置FPS监控组件,使用requestAnimationFrame采样,统计当前帧率、平均值与历史柱状图,支持重置与拖拽。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start(["请求开始"]) --> Inject["注入Authorization头"]
|
||||
Inject --> Send["发送HTTP请求"]
|
||||
Send --> Resp{"响应成功?"}
|
||||
Resp -- 否 --> NetErr["网络异常/超时"]
|
||||
NetErr --> Toast["显示全局错误提示"]
|
||||
Toast --> End(["结束"])
|
||||
Resp -- 是 --> CheckCode{"返回码=0?"}
|
||||
CheckCode -- 否 --> AuthCheck{"是否认证错误?"}
|
||||
AuthCheck -- 是 --> Logout["清理会话并跳转登录"]
|
||||
AuthCheck -- 否 --> BizErr["构造业务错误并抛出"]
|
||||
CheckCode -- 是 --> Success["透传数据"]
|
||||
Success --> End
|
||||
Logout --> End
|
||||
BizErr --> End
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [http.js:40-104](file://fms-vue/src/services/http.js#L40-L104)
|
||||
|
||||
**章节来源**
|
||||
- [http.js:1-111](file://fms-vue/src/services/http.js#L1-L111)
|
||||
- [FpsMonitor.vue:1-290](file://fms-vue/src/components/FpsMonitor.vue#L1-L290)
|
||||
|
||||
### 后端全局异常处理
|
||||
- 分类处理:认证异常、业务异常、保存对象异常、数据库异常与通用异常。
|
||||
- 日志记录:对所有系统异常记录method、uri与堆栈信息。
|
||||
- 统一响应:返回标准错误码与消息,避免暴露内部细节。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class GlobalExceptionHandler {
|
||||
+handleAuthenticationException()
|
||||
+handleBusinessException()
|
||||
+handleSaveObjectException()
|
||||
+handleDatabaseException()
|
||||
+handleException()
|
||||
-logSystemException()
|
||||
-systemErrorResponse()
|
||||
}
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [GlobalExceptionHandler.java:15-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L15-L84)
|
||||
|
||||
**章节来源**
|
||||
- [GlobalExceptionHandler.java:15-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L15-L84)
|
||||
|
||||
### 多机构数据库配置与连接策略
|
||||
- 配置文件:每个机构一个properties文件,命名规范为{ORG_ID}.properties,仅允许字母、数字、下划线与连字符。
|
||||
- 安全校验:路径规范化后限制在配置目录内;缺失文件或非法路径抛出认证异常。
|
||||
- 驱动与协议:强制要求URL以jdbc:sqlserver:开头。
|
||||
- 连接池行为:测试用例表明获取连接失败时不重试、快速失败并断开后续尝试,避免雪崩。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["加载机构配置"] --> B["规范化组织ID与路径"]
|
||||
B --> C{"路径合法且文件存在?"}
|
||||
C -- 否 --> E["抛出认证异常"]
|
||||
C -- 是 --> D["读取properties并校验URL协议"]
|
||||
D --> F{"是否为SQL Server URL?"}
|
||||
F -- 否 --> G["抛出非法协议异常"]
|
||||
F -- 是 --> H["创建数据源(连接池)"]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [OrgDatabaseConfigLoader.java:31-57](file://fms-api/src/main/java/cn/g3soft/fmsapi/database/OrgDatabaseConfigLoader.java#L31-L57)
|
||||
- [OrgDataSourceFactoryTests.java:11-29](file://fms-api/src/test/java/cn/g3soft/fmsapi/database/OrgDataSourceFactoryTests.java#L11-L29)
|
||||
|
||||
**章节来源**
|
||||
- [OrgDatabaseConfigLoader.java:31-57](file://fms-api/src/main/java/cn/g3soft/fmsapi/database/OrgDatabaseConfigLoader.java#L31-L57)
|
||||
- [OrgDatabaseConfig.java:1-10](file://fms-api/src/main/java/cn/g3soft/fmsapi/database/OrgDatabaseConfig.java#L1-L10)
|
||||
- [README.md:1-28](file://fms-api/config/dbconfigs/README.md#L1-L28)
|
||||
- [OrgDataSourceFactoryTests.java:11-29](file://fms-api/src/test/java/cn/g3soft/fmsapi/database/OrgDataSourceFactoryTests.java#L11-L29)
|
||||
|
||||
## 依赖关系分析
|
||||
- 前端依赖axios进行HTTP通信,统一封装post方法与拦截器逻辑。
|
||||
- 后端依赖Spring MVC与Druid连接池,通过application.yaml配置服务与连接池参数。
|
||||
- 日志模块通过SQL脚本创建结构化表,支撑技术日志、登录日志与审计日志的持久化与索引查询。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
Axios["axios(http.js)"] --> API["Spring MVC(GlobalExceptionHandler)"]
|
||||
API --> Druid["Druid连接池(application.yaml)"]
|
||||
API --> SQL["SQL Server(LogRebuild.java)"]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [http.js:1-111](file://fms-vue/src/services/http.js#L1-L111)
|
||||
- [application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [LogRebuild.java:25-96](file://.tmp-fkcheck/LogRebuild.java#L25-L96)
|
||||
|
||||
**章节来源**
|
||||
- [http.js:1-111](file://fms-vue/src/services/http.js#L1-L111)
|
||||
- [application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [LogRebuild.java:25-96](file://.tmp-fkcheck/LogRebuild.java#L25-L96)
|
||||
|
||||
## 性能注意事项
|
||||
- 前端渲染性能:使用FPS监控组件观察帧率变化,结合历史柱状图定位卡顿时段;合理设置采样间隔与历史长度,避免过度响应式更新。
|
||||
- 后端接口响应:关注数据库连接池参数(最大活跃数、等待时间),在高并发场景下避免连接耗尽导致请求排队。
|
||||
- 数据库查询优化:利用日志表中的trace_id与级别索引,结合业务模块代码定位慢查询与异常热点。
|
||||
|
||||
[本节为通用指导,无需特定文件引用]
|
||||
|
||||
## 故障排查指南
|
||||
|
||||
### 网络连接问题
|
||||
- 现象:前端报“网络异常”或“请求超时”,后端可能不可达或返回5xx。
|
||||
- 排查步骤:
|
||||
- 检查前端超时配置与baseURL是否正确。
|
||||
- 确认后端服务端口与上下文路径配置。
|
||||
- 查看后端全局异常处理器是否记录了系统异常与方法URI。
|
||||
- 若为认证错误(401/40101),前端会清理会话并跳转登录页。
|
||||
|
||||
**章节来源**
|
||||
- [http.js:40-104](file://fms-vue/src/services/http.js#L40-L104)
|
||||
- [application.yaml:1-4](file://fms-api/src/main/resources/application.yaml#L1-L4)
|
||||
- [GlobalExceptionHandler.java:57-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L57-L84)
|
||||
|
||||
### 数据库连接异常
|
||||
- 现象:接口报错“系统异常”,或连接池无法获取连接。
|
||||
- 排查步骤:
|
||||
- 核对机构配置文件是否存在且路径合法,URL必须为SQL Server协议。
|
||||
- 检查连接池参数(initial-size、max-active、max-wait)是否合理。
|
||||
- 验证连接失败时的快速失败策略,避免重试风暴。
|
||||
- 通过日志表检索trace_id与错误码,定位具体数据库节点与SQL。
|
||||
|
||||
**章节来源**
|
||||
- [OrgDatabaseConfigLoader.java:31-57](file://fms-api/src/main/java/cn/g3soft/fmsapi/database/OrgDatabaseConfigLoader.java#L31-L57)
|
||||
- [application.yaml:14-26](file://fms-api/src/main/resources/application.yaml#L14-L26)
|
||||
- [OrgDataSourceFactoryTests.java:11-29](file://fms-api/src/test/java/cn/g3soft/fmsapi/database/OrgDataSourceFactoryTests.java#L11-L29)
|
||||
- [LogRebuild.java:52-75](file://.tmp-fkcheck/LogRebuild.java#L52-L75)
|
||||
|
||||
### 内存溢出(OOM)
|
||||
- 现象:服务频繁重启、GC频繁、堆内存占用过高。
|
||||
- 排查步骤:
|
||||
- 收集JVM堆转储与GC日志,分析大对象与泄漏点。
|
||||
- 检查数据库连接池是否过大导致连接泄露。
|
||||
- 审查前端是否一次性加载超大资源导致页面崩溃。
|
||||
- 结合日志表中的trace_id关联前后端调用链,定位触发点。
|
||||
|
||||
[本节为通用指导,无需特定文件引用]
|
||||
|
||||
### CPU占用过高
|
||||
- 现象:接口响应变慢、线程阻塞、CPU持续高位。
|
||||
- 排查步骤:
|
||||
- 使用线程dump分析热点线程与锁竞争。
|
||||
- 检查数据库慢查询与全表扫描。
|
||||
- 评估前端重渲染与大数据量列表导致的计算开销。
|
||||
- 通过日志表按模块与级别筛选异常与耗时记录。
|
||||
|
||||
[本节为通用指导,无需特定文件引用]
|
||||
|
||||
### 错误日志分析方法
|
||||
- 前端JavaScript错误:
|
||||
- 关注http.js的响应拦截器抛出的错误结构与提示。
|
||||
- 使用浏览器控制台与网络面板查看请求与响应。
|
||||
- 后端异常堆栈:
|
||||
- 通过GlobalExceptionHandler记录的method与uri定位接口。
|
||||
- 结合日志表s_log_technical的exception_text与context_text深入分析。
|
||||
- 业务逻辑错误:
|
||||
- 依据业务异常与保存对象异常的table、action、index字段缩小范围。
|
||||
|
||||
**章节来源**
|
||||
- [http.js:49-104](file://fms-vue/src/services/http.js#L49-L104)
|
||||
- [GlobalExceptionHandler.java:20-64](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L20-L64)
|
||||
- [LogRebuild.java:52-75](file://.tmp-fkcheck/LogRebuild.java#L52-L75)
|
||||
|
||||
### 性能瓶颈识别与优化方案
|
||||
- 前端渲染性能优化:
|
||||
- 使用FpsMonitor.vue观察帧率波动,减少不必要的重渲染。
|
||||
- 合理分页与虚拟滚动,降低DOM压力。
|
||||
- 后端接口响应优化:
|
||||
- 调整连接池参数,避免连接耗尽。
|
||||
- 引入缓存与异步处理,降低同步阻塞。
|
||||
- 数据库查询优化:
|
||||
- 基于日志表trace_id与级别索引定位慢查询。
|
||||
- 优化SQL与索引,减少全表扫描。
|
||||
|
||||
**章节来源**
|
||||
- [FpsMonitor.vue:1-290](file://fms-vue/src/components/FpsMonitor.vue#L1-L290)
|
||||
- [application.yaml:14-26](file://fms-api/src/main/resources/application.yaml#L14-L26)
|
||||
- [LogRebuild.java:52-75](file://.tmp-fkcheck/LogRebuild.java#L52-L75)
|
||||
|
||||
### 系统恢复流程
|
||||
- 服务重启策略:
|
||||
- 先停止流量入口,再优雅关闭服务,确保事务一致性。
|
||||
- 重启后验证健康检查与基础接口可用性。
|
||||
- 数据回滚操作:
|
||||
- 基于迁移脚本与备份进行回滚,优先回滚最近变更。
|
||||
- 回滚后校验关键表结构与数据完整性。
|
||||
- 紧急修复方案:
|
||||
- 临时放宽连接池限制或降级非核心功能。
|
||||
- 通过日志表快速定位问题根因并实施热修复。
|
||||
|
||||
[本节为通用指导,无需特定文件引用]
|
||||
|
||||
### 故障预防机制
|
||||
- 健康检查:
|
||||
- 实现轻量级健康检查接口,验证数据库连通性与自身可达性。
|
||||
- 自动重试:
|
||||
- 对幂等接口配置有限重试与退避策略,避免雪崩。
|
||||
- 熔断降级:
|
||||
- 对依赖服务启用熔断器,失败时快速返回降级响应。
|
||||
- 监控告警:
|
||||
- 基于日志表与指标采集建立阈值告警,及时发现问题。
|
||||
|
||||
[本节为通用指导,无需特定文件引用]
|
||||
|
||||
### 应急预案与灾难恢复计划
|
||||
- 预案分级:
|
||||
- 定义P0-P3事件等级,明确响应时限与升级路径。
|
||||
- 恢复目标:
|
||||
- RTO(恢复时间目标)与RPO(恢复点目标)设定与演练。
|
||||
- 演练与复盘:
|
||||
- 定期开展故障演练,完善SOP与知识库。
|
||||
- 复盘根因,落实改进措施与回归测试。
|
||||
|
||||
[本节为通用指导,无需特定文件引用]
|
||||
|
||||
## 结论
|
||||
FMS系统在前后端均具备完善的错误处理与日志能力。通过统一的异常处理、结构化日志表与连接池配置,可高效定位网络、数据库与性能问题。建议结合健康检查、重试与熔断机制提升系统韧性,并制定标准化的恢复流程与应急预案,保障业务连续性。
|
||||
|
||||
## 附录
|
||||
- 常用命令与配置参考:
|
||||
- 启动Legacy SQL Server开发环境时指定TLS安全属性。
|
||||
- 检查连接池参数与服务器上下文路径。
|
||||
|
||||
**章节来源**
|
||||
- [README.md:18-28](file://fms-api/config/dbconfigs/README.md#L18-L28)
|
||||
- [application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
@@ -0,0 +1,296 @@
|
||||
# 监控运维
|
||||
|
||||
<cite>
|
||||
**本文引用的文件**
|
||||
- [application.yaml](file://fms-api/src/main/resources/application.yaml)
|
||||
- [pom.xml](file://fms-api/pom.xml)
|
||||
- [FmsApiApplication.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java)
|
||||
- [GlobalExceptionHandler.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java)
|
||||
- [OrgDatabaseProperties.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/database/OrgDatabaseProperties.java)
|
||||
- [http.js](file://fms-vue/src/services/http.js)
|
||||
- [FpsMonitor.vue](file://fms-vue/src/components/FpsMonitor.vue)
|
||||
- [LogRebuild.java](file://.tmp-fkcheck/LogRebuild.java)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构总览](#架构总览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能与容量规划](#性能与容量规划)
|
||||
8. [故障排查指南](#故障排查指南)
|
||||
9. [结论](#结论)
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本文件为 FMS 系统的监控运维文档,覆盖前端性能指标采集、后端接口响应时间监控、数据库查询性能分析、日志收集与管理策略、系统健康检查机制、数据库监控方案以及运维管理工具使用指南(服务启停、配置热更新、故障自愈)和容量规划扩容策略。内容基于仓库中现有实现进行梳理,并给出可落地的运维建议与可视化图示。
|
||||
|
||||
## 项目结构
|
||||
FMS 由前后端两部分组成:
|
||||
- 前端 fms-vue:基于 Vue 3 + Vite,提供用户界面与前端性能监控能力(FPS 面板),并通过统一的 HTTP 客户端访问后端 API。
|
||||
- 后端 fms-api:Spring Boot 应用,暴露 /api 上下文下的 REST 接口;通过 Druid 连接池访问 SQL Server;内置全局异常处理与统一返回结构;支持按组织动态加载数据库配置。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A["浏览器"] --> B["前端 fms-vue<br/>HTTP 客户端"]
|
||||
B --> C["后端 fms-api<br/>Spring MVC"]
|
||||
C --> D["Druid 连接池"]
|
||||
D --> E["SQL Server 数据库"]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [http.js:1-111](file://fms-vue/src/services/http.js#L1-L111)
|
||||
- [pom.xml:32-96](file://fms-api/pom.xml#L32-L96)
|
||||
|
||||
**章节来源**
|
||||
- [application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [pom.xml:32-96](file://fms-api/pom.xml#L32-L96)
|
||||
|
||||
## 核心组件
|
||||
- 前端性能监控:FPS 面板组件,实时统计当前帧率、平均帧率、最低帧率,并以柱状图展示历史趋势,支持拖拽定位与重置。
|
||||
- 前端网络层:Axios 封装,统一注入认证头、统一错误处理、超时与网络异常提示、鉴权失败跳转登录。
|
||||
- 后端全局异常处理:集中捕获业务异常、数据库异常等,记录系统级日志并返回统一错误码与消息。
|
||||
- 数据库连接池:Druid 连接池参数在配置文件中定义,包含最大活跃数、等待超时、空闲检测等。
|
||||
- 启动入口:应用启动时初始化雪花 ID 生成器,随后启动 Spring Boot 容器。
|
||||
|
||||
**章节来源**
|
||||
- [FpsMonitor.vue:1-290](file://fms-vue/src/components/FpsMonitor.vue#L1-L290)
|
||||
- [http.js:1-111](file://fms-vue/src/services/http.js#L1-L111)
|
||||
- [GlobalExceptionHandler.java:1-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L1-L84)
|
||||
- [application.yaml:10-34](file://fms-api/src/main/resources/application.yaml#L10-L34)
|
||||
- [FmsApiApplication.java:1-22](file://fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java#L1-L22)
|
||||
|
||||
## 架构总览
|
||||
下图展示了从前端请求到后端处理、数据库访问及异常处理的完整链路,并标注了监控点。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as "用户"
|
||||
participant FE as "前端 fms-vue"
|
||||
participant BE as "后端 fms-api"
|
||||
participant DB as "SQL Server"
|
||||
U->>FE : 触发操作
|
||||
FE->>FE : 采集 FPSrequestAnimationFrame
|
||||
FE->>BE : 发起 HTTP 请求带 Authorization
|
||||
BE->>BE : 路由/控制器处理
|
||||
BE->>DB : 执行 SQL经 Druid 连接池
|
||||
DB-->>BE : 返回结果或异常
|
||||
BE-->>FE : 统一 ApiResponse
|
||||
FE-->>U : 渲染结果/提示错误
|
||||
Note over FE,BE : 监控点:前端 FPS、请求耗时、后端异常日志、数据库连接池状态
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [FpsMonitor.vue:36-75](file://fms-vue/src/components/FpsMonitor.vue#L36-L75)
|
||||
- [http.js:40-104](file://fms-vue/src/services/http.js#L40-L104)
|
||||
- [GlobalExceptionHandler.java:48-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L48-L84)
|
||||
- [application.yaml:14-26](file://fms-api/src/main/resources/application.yaml#L14-L26)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 前端性能监控(FPS)
|
||||
- 采样机制:使用 requestAnimationFrame 高频计数,按固定采样间隔计算 FPS,维护当前值、平均值、最小值与历史柱状图。
|
||||
- 健壮性:对非法入参做归一化;后台切换时重置采样窗口,避免将暂停时长计入均值;支持拖拽移动与重置统计。
|
||||
- 集成方式:开发环境按需异步加载,生产环境默认不引入,减少开销。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start(["组件挂载"]) --> Init["初始化采样窗口"]
|
||||
Init --> RAF["进入 requestAnimationFrame 循环"]
|
||||
RAF --> Count{"达到采样间隔?"}
|
||||
Count -- 否 --> RAF
|
||||
Count -- 是 --> Calc["计算 FPS/更新平均/最小/历史"]
|
||||
Calc --> RAF
|
||||
RAF --> Visibility{"页面可见性变化?"}
|
||||
Visibility -- 前台 --> Reset["重置采样窗口"]
|
||||
Visibility -- 后台 --> Wait["等待恢复前台"]
|
||||
Reset --> RAF
|
||||
Wait --> RAF
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [FpsMonitor.vue:36-75](file://fms-vue/src/components/FpsMonitor.vue#L36-L75)
|
||||
- [FpsMonitor.vue:136-146](file://fms-vue/src/components/FpsMonitor.vue#L136-L146)
|
||||
|
||||
**章节来源**
|
||||
- [FpsMonitor.vue:1-290](file://fms-vue/src/components/FpsMonitor.vue#L1-L290)
|
||||
|
||||
### 前端网络层与错误处理
|
||||
- 请求拦截:自动注入 Authorization 头(Bearer Token)。
|
||||
- 响应拦截:统一包装 ApiResponse;对 401/40101 清会话并跳转登录;对超时与网络异常给出友好提示;对 5xx 或不可达场景弹出全局错误消息。
|
||||
- 超时与重试:默认超时 15s;可在调用处传入自定义配置。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant FE as "前端 http.js"
|
||||
participant BE as "后端 fms-api"
|
||||
FE->>FE : 请求拦截注入 Authorization
|
||||
FE->>BE : 发送请求
|
||||
alt 成功
|
||||
BE-->>FE : 200 + ApiResponse
|
||||
FE-->>FE : 标记 success/code/message/data
|
||||
else 鉴权失败(401/40101)
|
||||
BE-->>FE : 401/40101
|
||||
FE-->>FE : 清理会话并跳转登录
|
||||
else 网络/超时
|
||||
BE-->>FE : 无响应/超时
|
||||
FE-->>FE : 抛出错误并弹全局提示
|
||||
end
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [http.js:40-104](file://fms-vue/src/services/http.js#L40-L104)
|
||||
|
||||
**章节来源**
|
||||
- [http.js:1-111](file://fms-vue/src/services/http.js#L1-L111)
|
||||
|
||||
### 后端全局异常处理与日志
|
||||
- 统一异常分类:认证异常、业务异常、保存对象异常、数据库异常、通用异常。
|
||||
- 日志记录:系统级异常记录方法、URI、堆栈等信息,便于问题定位。
|
||||
- 统一返回:所有异常均返回标准 ApiResponse,包含错误码与消息。
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class GlobalExceptionHandler {
|
||||
+handleAuthenticationException()
|
||||
+handleBusinessException()
|
||||
+handleSaveObjectException()
|
||||
+handleDatabaseException()
|
||||
+handleException()
|
||||
-logSystemException()
|
||||
-systemErrorResponse()
|
||||
}
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [GlobalExceptionHandler.java:15-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L15-L84)
|
||||
|
||||
**章节来源**
|
||||
- [GlobalExceptionHandler.java:1-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L1-L84)
|
||||
|
||||
### 数据库连接池与慢查询
|
||||
- 连接池参数:最大活跃连接数、等待超时、空闲检测、借还校验等均在配置中定义。
|
||||
- 慢查询分析:建议在 SQL Server 侧开启查询计划与慢查询日志,结合业务表索引优化;可通过临时脚本验证日志表结构与索引。
|
||||
- 备份恢复:建议定期全量+增量备份,并在测试环境演练恢复流程。
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["应用启动"] --> B["读取 Druid 配置"]
|
||||
B --> C["创建连接池实例"]
|
||||
C --> D{"连接可用?"}
|
||||
D -- 否 --> E["等待/重试/告警"]
|
||||
D -- 是 --> F["业务请求获取连接"]
|
||||
F --> G["执行 SQL"]
|
||||
G --> H{"是否慢查询?"}
|
||||
H -- 是 --> I["记录慢查询/分析执行计划"]
|
||||
H -- 否 --> J["正常返回"]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [application.yaml:14-26](file://fms-api/src/main/resources/application.yaml#L14-L26)
|
||||
- [LogRebuild.java:52-75](file://.tmp-fkcheck/LogRebuild.java#L52-L75)
|
||||
|
||||
**章节来源**
|
||||
- [application.yaml:14-26](file://fms-api/src/main/resources/application.yaml#L14-L26)
|
||||
- [LogRebuild.java:52-75](file://.tmp-fkcheck/LogRebuild.java#L52-L75)
|
||||
|
||||
### 系统健康检查
|
||||
- 现状:仓库未提供显式的健康检查端点。
|
||||
- 建议:新增 /actuator/health 或自定义 /health 端点,检查应用自身与数据库连通性;供负载均衡与健康探针使用。
|
||||
- 告警规则:当健康检查失败、接口超时率升高、错误率超过阈值时触发告警。
|
||||
|
||||
[本节为概念性说明,不直接分析具体文件]
|
||||
|
||||
### 日志收集与管理策略
|
||||
- 应用日志:后端通过 SLF4J 记录系统异常与关键路径信息;前端在网络异常与鉴权失败时弹出全局提示。
|
||||
- 日志级别:建议生产环境 INFO 及以上,调试阶段可临时提高至 DEBUG。
|
||||
- 日志轮转:建议接入 Logback/Log4j2 的滚动策略(按天/大小),并归档保留一定周期。
|
||||
- 结构化日志:建议统一 JSON 格式,包含 trace_id、user_id、module_code、duration_ms 等字段,便于检索与分析。
|
||||
- 日志表:仓库中存在技术日志表结构示例,可用于持久化关键操作与异常信息。
|
||||
|
||||
**章节来源**
|
||||
- [GlobalExceptionHandler.java:66-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L66-L84)
|
||||
- [LogRebuild.java:52-75](file://.tmp-fkcheck/LogRebuild.java#L52-L75)
|
||||
|
||||
### 运维管理工具使用指南
|
||||
- 服务启停:使用 Maven 插件打包后通过 java -jar 启动;开发环境可使用 spring-boot-devtools 提升迭代效率。
|
||||
- 配置热更新:当前未启用配置中心;如需热更新,可考虑引入 Spring Cloud Config/Nacos 或基于 Actuator refresh。
|
||||
- 故障自愈:建议结合健康检查与编排平台(如 Kubernetes Liveness/Readiness)实现自动重启与流量摘除。
|
||||
|
||||
**章节来源**
|
||||
- [pom.xml:98-105](file://fms-api/pom.xml#L98-L105)
|
||||
- [FmsApiApplication.java:13-18](file://fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java#L13-L18)
|
||||
|
||||
## 依赖关系分析
|
||||
- 前端依赖:Vue 3、Vite、Pinia、Axios、NProgress 等。
|
||||
- 后端依赖:Spring Boot WebMVC、JDBC、Druid、JWT、Jackson、SQL Server JDBC 驱动等。
|
||||
- 模块耦合:前端通过 HTTP 与后端交互;后端通过连接池访问数据库;异常处理贯穿全链路。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
FE["fms-vue"] --> |HTTP| BE["fms-api"]
|
||||
BE --> |JDBC| DB["SQL Server"]
|
||||
BE --> |Druid| Pool["连接池"]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [pom.xml:32-96](file://fms-api/pom.xml#L32-L96)
|
||||
- [fms-vue/package.json:21-46](file://fms-vue/package.json#L21-L46)
|
||||
|
||||
**章节来源**
|
||||
- [pom.xml:32-96](file://fms-api/pom.xml#L32-L96)
|
||||
- [fms-vue/package.json:21-46](file://fms-vue/package.json#L21-L46)
|
||||
|
||||
## 性能与容量规划
|
||||
- 前端性能:
|
||||
- 指标:FPS、首屏时间、资源加载耗时、接口响应时间。
|
||||
- 手段:FPS 面板、网络层埋点(请求开始/结束时间)、静态资源缓存与压缩。
|
||||
- 后端性能:
|
||||
- 指标:接口 P95/P99 耗时、错误率、线程池/连接池利用率。
|
||||
- 手段:接口耗时统计、慢查询分析、连接池参数调优。
|
||||
- 数据库性能:
|
||||
- 指标:连接池使用率、慢查询数量、锁等待、IO/CPU 使用。
|
||||
- 手段:索引优化、执行计划分析、分库分表/读写分离(视规模)。
|
||||
- 容量规划:
|
||||
- 基线:压测得出单实例 QPS/TPS、CPU/内存/IO 水位。
|
||||
- 扩容:水平扩展实例数,配合负载均衡与健康检查;数据库垂直升级或横向扩展。
|
||||
- 弹性:根据 CPU/连接池使用率设置自动扩缩容策略。
|
||||
|
||||
[本节为通用指导,不直接分析具体文件]
|
||||
|
||||
## 故障排查指南
|
||||
- 前端网络异常:
|
||||
- 现象:请求超时、网络异常、鉴权失败。
|
||||
- 处理:检查代理与跨域、确认 Token 有效性、查看全局错误提示。
|
||||
- 后端异常:
|
||||
- 现象:系统异常、保存失败、数据库异常。
|
||||
- 处理:查看全局异常日志、定位 URI 与方法、检查数据库连接与 SQL。
|
||||
- 数据库问题:
|
||||
- 现象:连接池耗尽、慢查询增多。
|
||||
- 处理:调整连接池参数、分析慢查询、优化索引与 SQL。
|
||||
|
||||
**章节来源**
|
||||
- [http.js:76-104](file://fms-vue/src/services/http.js#L76-L104)
|
||||
- [GlobalExceptionHandler.java:48-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L48-L84)
|
||||
|
||||
## 结论
|
||||
FMS 已具备前端 FPS 监控、统一网络层与后端全局异常处理的基础能力。建议在此基础上完善健康检查端点、结构化日志与慢查询分析,并结合连接池与数据库侧优化,形成完整的监控与运维体系。通过容量规划与弹性扩容策略,保障系统在高峰期的稳定性与可扩展性。
|
||||
|
||||
## 附录
|
||||
- 关键配置位置:
|
||||
- 后端端口与上下文:application.yaml
|
||||
- 数据库连接池参数:application.yaml
|
||||
- 前端基础 URL 与超时:http.js
|
||||
- 前端 FPS 面板:FpsMonitor.vue
|
||||
- 后端异常处理:GlobalExceptionHandler.java
|
||||
- 启动入口与 ID 生成器:FmsApiApplication.java
|
||||
|
||||
**章节来源**
|
||||
- [application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [http.js:1-111](file://fms-vue/src/services/http.js#L1-L111)
|
||||
- [FpsMonitor.vue:1-290](file://fms-vue/src/components/FpsMonitor.vue#L1-L290)
|
||||
- [GlobalExceptionHandler.java:1-84](file://fms-api/src/main/java/cn/g3soft/fmsapi/exception/GlobalExceptionHandler.java#L1-L84)
|
||||
- [FmsApiApplication.java:1-22](file://fms-api/src/main/java/cn/g3soft/fmsapi/FmsApiApplication.java#L1-L22)
|
||||
@@ -0,0 +1,231 @@
|
||||
# 部署方案
|
||||
|
||||
<cite>
|
||||
**本文引用的文件**
|
||||
- [fms-api/pom.xml](file://fms-api/pom.xml)
|
||||
- [fms-api/src/main/resources/application.yaml](file://fms-api/src/main/resources/application.yaml)
|
||||
- [fms-api/start.cmd](file://fms-api/start.cmd)
|
||||
- [fms-api/config/dbconfigs/README.md](file://fms-api/config/dbconfigs/README.md)
|
||||
- [fms-api/config/dbconfigs/G3HD.properties](file://fms-api/config/dbconfigs/G3HD.properties)
|
||||
- [fms-vue/package.json](file://fms-vue/package.json)
|
||||
- [fms-vue/vite.config.js](file://fms-vue/vite.config.js)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构总览](#架构总览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能与容量规划](#性能与容量规划)
|
||||
8. [故障排查指南](#故障排查指南)
|
||||
9. [结论](#结论)
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本部署方案面向FMS系统生产环境,覆盖服务器硬件与操作系统要求、JDK与Node.js版本、前后端构建流程、Docker容器化与编排、Nginx反向代理(静态资源托管、API网关、SSL)、多环境差异化配置、以及负载均衡与高可用设计。文档基于仓库中后端Spring Boot应用、前端Vite工程及现有配置文件进行说明,确保可落地执行。
|
||||
|
||||
## 项目结构
|
||||
FMS系统采用前后端分离架构:
|
||||
- 后端:Spring Boot API服务(端口8088,上下文/api),使用SQL Server数据库,支持本地或OSS文件存储。
|
||||
- 前端:Vue 3 + Vite工程,开发时通过Vite代理将/api请求转发至后端;生产环境由Nginx统一提供静态资源并反向代理API。
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
Client["浏览器/客户端"] --> Nginx["Nginx 反向代理"]
|
||||
Nginx --> |静态资源| FE["fms-vue 构建产物(dist)"]
|
||||
Nginx --> |/api/*| BE["fms-api Spring Boot(8088)"]
|
||||
BE --> DB["SQL Server"]
|
||||
BE --> FS["文件存储<br/>本地/OSS"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [fms-api/src/main/resources/application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [fms-vue/vite.config.js:11-22](file://fms-vue/vite.config.js#L11-L22)
|
||||
|
||||
章节来源
|
||||
- [fms-api/src/main/resources/application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [fms-vue/vite.config.js:11-22](file://fms-vue/vite.config.js#L11-L22)
|
||||
|
||||
## 核心组件
|
||||
- 后端服务:Spring Boot Web MVC + JDBC + Druid连接池 + JWT鉴权 + SQL Server驱动。
|
||||
- 前端应用:Vue 3 + Vite + Pinia + Axios等。
|
||||
- 数据存储:SQL Server(多机构properties配置)。
|
||||
- 文件存储:本地目录或OSS(可通过配置切换)。
|
||||
|
||||
章节来源
|
||||
- [fms-api/pom.xml:32-96](file://fms-api/pom.xml#L32-L96)
|
||||
- [fms-api/src/main/resources/application.yaml:10-34](file://fms-api/src/main/resources/application.yaml#L10-L34)
|
||||
- [fms-vue/package.json:21-46](file://fms-vue/package.json#L21-L46)
|
||||
|
||||
## 架构总览
|
||||
生产环境推荐拓扑:
|
||||
- 入口层:Nginx对外暴露HTTPS,负责静态资源缓存、Gzip/Brotli压缩、限流、WAF(可选)和API路由。
|
||||
- 应用层:fms-api以无状态方式运行,建议多实例横向扩展,配合会话共享或无状态JWT。
|
||||
- 数据层:SQL Server主备或集群;文件存储建议使用对象存储(OSS)以提升可扩展性。
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant U as "用户"
|
||||
participant N as "Nginx"
|
||||
participant F as "fms-vue 静态资源"
|
||||
participant B as "fms-api 服务"
|
||||
participant D as "SQL Server"
|
||||
U->>N : HTTPS GET /index.html
|
||||
N-->>U : 返回静态页面
|
||||
U->>N : HTTPS POST /api/login
|
||||
N->>B : 转发 /api/*
|
||||
B->>D : 查询用户信息
|
||||
D-->>B : 返回结果
|
||||
B-->>N : JSON响应
|
||||
N-->>U : 返回登录结果
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [fms-vue/vite.config.js:15-21](file://fms-vue/vite.config.js#L15-L21)
|
||||
- [fms-api/src/main/resources/application.yaml:1-4](file://fms-api/src/main/resources/application.yaml#L1-L4)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 后端构建与运行(Maven + Spring Boot)
|
||||
- JDK版本:Java 21(由POM属性指定)。
|
||||
- Maven插件:spring-boot-maven-plugin打包为可执行JAR。
|
||||
- 启动命令:Windows下start.cmd设置JAVA_HOME与MAVEN_HOME后执行spring-boot:run;生产环境直接java -jar运行。
|
||||
- 关键依赖:Spring Web MVC、JDBC、Druid连接池、JWT、SQL Server驱动。
|
||||
|
||||
章节来源
|
||||
- [fms-api/pom.xml:29-31](file://fms-api/pom.xml#L29-L31)
|
||||
- [fms-api/pom.xml:98-105](file://fms-api/pom.xml#L98-L105)
|
||||
- [fms-api/start.cmd:1-8](file://fms-api/start.cmd#L1-L8)
|
||||
|
||||
### 后端配置与环境变量
|
||||
- 服务端口与上下文:server.port=8088,server.servlet.context-path=/api。
|
||||
- 应用名:spring.application.name=fms-api。
|
||||
- 认证:JWT密钥通过环境变量注入(FMS_JWT_SECRET),过期时间默认24小时。
|
||||
- 数据库:连接池参数(初始大小、最小空闲、最大活跃、等待超时、健康检查等)在application.yaml中定义;多机构数据库连接通过config/dbconfigs/*.properties加载。
|
||||
- 文件存储:默认local模式,本地目录./data/files,URL前缀/api/file/static;也可切换至OSS。
|
||||
|
||||
章节来源
|
||||
- [fms-api/src/main/resources/application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [fms-api/config/dbconfigs/README.md:1-28](file://fms-api/config/dbconfigs/README.md#L1-L28)
|
||||
- [fms-api/config/dbconfigs/G3HD.properties:1-5](file://fms-api/config/dbconfigs/G3HD.properties#L1-L5)
|
||||
|
||||
### 前端构建与优化(Vite)
|
||||
- 脚本命令:dev/build/preview/test/lint/fmt等。
|
||||
- 开发代理:/api代理到http://127.0.0.1:8088,便于联调。
|
||||
- 构建产物:vite build输出dist目录,适合Nginx托管。
|
||||
- 依赖:Vue 3、Pinia、Axios、Vitest等。
|
||||
|
||||
章节来源
|
||||
- [fms-vue/package.json:6-19](file://fms-vue/package.json#L6-L19)
|
||||
- [fms-vue/vite.config.js:11-22](file://fms-vue/vite.config.js#L11-L22)
|
||||
- [fms-vue/package.json:21-46](file://fms-vue/package.json#L21-L46)
|
||||
|
||||
### Docker容器化部署
|
||||
- 后端镜像:基于OpenJDK 21基础镜像,复制fms-api打包的JAR,暴露8088端口,设置环境变量(如FMS_JWT_SECRET、数据库连接等)。
|
||||
- 前端镜像:基于Nginx镜像,复制fms-vue/dist到/usr/share/nginx/html,并通过nginx.conf将/api反向代理到后端服务。
|
||||
- 编排:使用docker-compose或Kubernetes管理多实例、滚动更新、健康检查、日志收集与监控。
|
||||
|
||||
(本节为通用实践说明,不直接引用具体代码文件)
|
||||
|
||||
### Nginx反向代理与静态资源托管
|
||||
- 静态资源:将fms-vue/dist映射到根路径,启用缓存、Gzip/Brotli压缩、HTTP/2。
|
||||
- API网关:将/api/*转发到后端服务集群(多个upstream节点实现负载均衡)。
|
||||
- SSL证书:配置HTTPS监听、证书路径、强制HTTPS跳转、安全头(HSTS、CSP等)。
|
||||
- 安全与限流:结合Nginx模块或外部WAF实现访问控制与速率限制。
|
||||
|
||||
(本节为通用实践说明,不直接引用具体代码文件)
|
||||
|
||||
### 多环境差异化配置
|
||||
- 开发环境:
|
||||
- 前端:vite dev,/api代理到本地8088。
|
||||
- 后端:start.cmd或mvn spring-boot:run,读取本地dbconfigs与默认application.yaml。
|
||||
- 测试环境:
|
||||
- 独立数据库与文件存储路径;JWT密钥与数据库连接通过环境变量注入。
|
||||
- 生产环境:
|
||||
- 多实例后端+Nginx负载均衡;文件存储建议切换至OSS;严格的安全策略与监控告警。
|
||||
|
||||
章节来源
|
||||
- [fms-vue/vite.config.js:15-21](file://fms-vue/vite.config.js#L15-L21)
|
||||
- [fms-api/src/main/resources/application.yaml:10-34](file://fms-api/src/main/resources/application.yaml#L10-L34)
|
||||
|
||||
### 负载均衡与高可用
|
||||
- 后端多实例:同一服务多副本,Nginx upstream轮询或加权策略。
|
||||
- 会话无状态:使用JWT,避免服务端会话绑定。
|
||||
- 数据库高可用:SQL Server主备或Always On;连接重试与熔断。
|
||||
- 文件存储:对象存储(OSS)天然具备高可用与弹性扩容能力。
|
||||
- 健康检查:Nginx主动探测后端存活,异常节点自动摘除。
|
||||
|
||||
(本节为通用实践说明,不直接引用具体代码文件)
|
||||
|
||||
## 依赖关系分析
|
||||
- 后端依赖:Spring Web MVC、JDBC、Druid、JWT、SQL Server驱动。
|
||||
- 前端依赖:Vue 3、Pinia、Axios、Vite、Vitest等。
|
||||
- 运行时依赖:JDK 21、Node.js(与Vite兼容的版本)、Nginx(生产静态托管与反向代理)。
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
A["fms-vue(package.json)"] --> V["Vite"]
|
||||
A --> P["Vue 3"]
|
||||
A --> X["Axios"]
|
||||
B["fms-api(pom.xml)"] --> S["Spring Boot Web MVC"]
|
||||
B --> J["JDBC + Druid"]
|
||||
B --> W["JWT"]
|
||||
B --> D["SQL Server Driver"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [fms-vue/package.json:21-46](file://fms-vue/package.json#L21-L46)
|
||||
- [fms-api/pom.xml:32-96](file://fms-api/pom.xml#L32-L96)
|
||||
|
||||
章节来源
|
||||
- [fms-vue/package.json:21-46](file://fms-vue/package.json#L21-L46)
|
||||
- [fms-api/pom.xml:32-96](file://fms-api/pom.xml#L32-L96)
|
||||
|
||||
## 性能与容量规划
|
||||
- 服务器硬件(参考值):
|
||||
- 后端:4核8GB起步,生产建议8核16GB以上;根据并发与SQL复杂度调整。
|
||||
- 前端/Nginx:2核4GB即可,主要承担静态资源与反向代理。
|
||||
- 数据库:按业务规模评估CPU/内存/IO,建议专用主机或云数据库。
|
||||
- 操作系统:Linux发行版(CentOS/RHEL/Ubuntu/Debian)或Windows Server(若沿用Windows部署)。
|
||||
- 网络与安全:开放443/80端口,关闭不必要端口;启用防火墙与访问白名单。
|
||||
- 缓存与压缩:Nginx开启Gzip/Brotli、静态资源缓存;后端连接池与SQL优化。
|
||||
- 监控与日志:集中日志采集(ELK/云日志)、指标监控(Prometheus+Grafana)、链路追踪(可选)。
|
||||
|
||||
(本节为通用实践说明,不直接引用具体代码文件)
|
||||
|
||||
## 故障排查指南
|
||||
- 后端无法启动:
|
||||
- 检查JDK版本是否为21;确认spring-boot-maven-plugin已正确打包。
|
||||
- 验证application.yaml中的端口、上下文路径与数据库连接是否正确。
|
||||
- 数据库连接失败:
|
||||
- 核对config/dbconfigs下的*.properties是否包含正确的url/username/password/driver。
|
||||
- 注意SQL Server TLS版本与加密选项(legacy环境需特殊JVM参数)。
|
||||
- 前端代理问题:
|
||||
- 开发环境确认vite.config.js中/api代理目标地址可达。
|
||||
- 生产环境确认Nginx对/api的反向代理规则与后端服务端口一致。
|
||||
- 文件访问异常:
|
||||
- 本地模式检查./data/files目录权限与磁盘空间。
|
||||
- OSS模式检查g3oss-url与鉴权配置。
|
||||
|
||||
章节来源
|
||||
- [fms-api/start.cmd:1-8](file://fms-api/start.cmd#L1-L8)
|
||||
- [fms-api/src/main/resources/application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [fms-api/config/dbconfigs/README.md:18-28](file://fms-api/config/dbconfigs/README.md#L18-L28)
|
||||
- [fms-vue/vite.config.js:15-21](file://fms-vue/vite.config.js#L15-L21)
|
||||
|
||||
## 结论
|
||||
本方案基于现有后端与前端工程,明确了生产环境的软硬件要求、构建与部署流程、容器化与编排思路、Nginx反向代理与安全配置、多环境差异化管理,以及负载均衡与高可用设计。按此方案实施,可实现稳定、可扩展且易维护的FMS系统生产部署。
|
||||
|
||||
## 附录
|
||||
- 环境变量清单(示例):
|
||||
- FMS_JWT_SECRET:JWT签名密钥(生产必须替换默认值)。
|
||||
- 数据库连接:通过config/dbconfigs/*.properties注入(敏感信息不入库)。
|
||||
- 文件存储:storage-type=local或oss;OSS模式下配置g3oss-url。
|
||||
- 构建与发布步骤(概览):
|
||||
- 前端:pnpm install -> pnpm build -> 产出dist。
|
||||
- 后端:mvn clean package -> 生成可执行JAR。
|
||||
- 部署:Nginx托管dist,/api反向代理到后端服务;配置HTTPS与缓存策略。
|
||||
|
||||
(本节为通用实践说明,不直接引用具体代码文件)
|
||||
@@ -0,0 +1,381 @@
|
||||
# 部署运维
|
||||
|
||||
<cite>
|
||||
**本文引用的文件**
|
||||
- [fms-api/pom.xml](file://fms-api/pom.xml)
|
||||
- [fms-api/src/main/resources/application.yaml](file://fms-api/src/main/resources/application.yaml)
|
||||
- [fms-api/start.cmd](file://fms-api/start.cmd)
|
||||
- [fms-api/config/dbconfigs/README.md](file://fms-api/config/dbconfigs/README.md)
|
||||
- [fms-api/config/dbconfigs/G3HD.properties](file://fms-api/config/dbconfigs/G3HD.properties)
|
||||
- [fms-api/config/dbconfigs/G3HY2025.properties](file://fms-api/config/dbconfigs/G3HY2025.properties)
|
||||
- [fms-vue/package.json](file://fms-vue/package.json)
|
||||
- [fms-vue/vite.config.js](file://fms-vue/vite.config.js)
|
||||
- [fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java](file://fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构总览](#架构总览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排查指南](#故障排查指南)
|
||||
9. [结论](#结论)
|
||||
10. [附录](#附录)
|
||||
|
||||
## 简介
|
||||
本文件面向生产环境的FMS系统,提供端到端的部署与运维指南。内容涵盖:
|
||||
- Docker容器化部署方案、服务器环境要求与网络配置
|
||||
- 前后端构建流程与发布策略(静态资源优化、CDN与缓存)
|
||||
- 监控与日志收集(应用性能监控、错误日志、告警)
|
||||
- 数据库备份恢复与数据迁移流程
|
||||
- 日常运维操作(服务启停、配置更新、故障排查)
|
||||
- 性能调优与安全加固最佳实践
|
||||
|
||||
## 项目结构
|
||||
FMS由前后端两个主要子系统构成:
|
||||
- 后端:Spring Boot API服务(Java 21),使用Maven构建,默认端口8088,上下文路径/api
|
||||
- 前端:Vue 3 + Vite应用,开发时通过代理访问后端API,生产构建为静态资源
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "前端"
|
||||
FE["fms-vue<br/>Vite 构建"]
|
||||
end
|
||||
subgraph "后端"
|
||||
BE["fms-api<br/>Spring Boot Web MVC"]
|
||||
end
|
||||
DB["SQL Server"]
|
||||
OSS["对象存储(可选)"]
|
||||
FE --> |"HTTP /api/*"| BE
|
||||
BE --> DB
|
||||
BE --> OSS
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [fms-vue/vite.config.js:11-21](file://fms-vue/vite.config.js#L11-L21)
|
||||
- [fms-api/src/main/resources/application.yaml:1-4](file://fms-api/src/main/resources/application.yaml#L1-L4)
|
||||
|
||||
章节来源
|
||||
- [fms-api/src/main/resources/application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [fms-vue/vite.config.js:1-25](file://fms-vue/vite.config.js#L1-L25)
|
||||
- [fms-vue/package.json:6-19](file://fms-vue/package.json#L6-L19)
|
||||
- [fms-api/pom.xml:29-96](file://fms-api/pom.xml#L29-L96)
|
||||
|
||||
## 核心组件
|
||||
- 后端服务:基于Spring Boot Web MVC,内置Tomcat,暴露REST接口;使用Druid连接池与SQL Server JDBC驱动;JWT鉴权;支持本地或OSS文件存储
|
||||
- 前端应用:Vue 3 + Vite,开发模式代理/api到后端;生产模式输出静态资源供Web服务器或CDN托管
|
||||
- 数据库:SQL Server,按组织隔离的配置文件管理多库连接
|
||||
- 安全:JWT签名与校验,密钥长度与有效期强制校验
|
||||
|
||||
章节来源
|
||||
- [fms-api/pom.xml:32-96](file://fms-api/pom.xml#L32-L96)
|
||||
- [fms-api/src/main/resources/application.yaml:10-34](file://fms-api/src/main/resources/application.yaml#L10-L34)
|
||||
- [fms-api/config/dbconfigs/README.md:1-28](file://fms-api/config/dbconfigs/README.md#L1-L28)
|
||||
- [fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java:18-81](file://fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java#L18-L81)
|
||||
|
||||
## 架构总览
|
||||
生产环境推荐拓扑:
|
||||
- Nginx/反向代理对外暴露HTTPS入口,将静态资源请求指向CDN或本地静态目录,将/api转发至后端
|
||||
- 后端以Docker容器运行,挂载外部卷用于文件存储与配置
|
||||
- 数据库独立部署,仅对后端开放端口
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
Client["浏览器/客户端"]
|
||||
CDN["CDN(可选)"]
|
||||
Nginx["Nginx/反向代理"]
|
||||
FEStatic["前端静态资源(dist)"]
|
||||
BE["fms-api 容器"]
|
||||
DB["SQL Server"]
|
||||
OSS["对象存储(可选)"]
|
||||
Client --> |HTTPS /| Nginx
|
||||
Nginx --> |静态资源| CDN
|
||||
Nginx --> |静态资源| FEStatic
|
||||
Nginx --> |/api/*| BE
|
||||
BE --> DB
|
||||
BE --> OSS
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [fms-vue/vite.config.js:11-21](file://fms-vue/vite.config.js#L11-L21)
|
||||
- [fms-api/src/main/resources/application.yaml:1-4](file://fms-api/src/main/resources/application.yaml#L1-L4)
|
||||
- [fms-api/src/main/resources/application.yaml:27-34](file://fms-api/src/main/resources/application.yaml#L27-L34)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 后端服务(fms-api)
|
||||
- 技术栈与依赖:Spring Boot Web MVC、JDBC、Druid连接池、SQL Server JDBC驱动、JWT、Jackson、UA解析、IP定位等
|
||||
- 启动方式:Maven spring-boot:run(开发脚本),生产建议打包为可执行JAR并容器化运行
|
||||
- 配置要点:
|
||||
- 服务端口与上下文路径
|
||||
- JWT密钥与有效期
|
||||
- 数据库连接池参数
|
||||
- 文件存储类型(本地/OSS)及路径/URL前缀
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class JwtUtils {
|
||||
+init() void
|
||||
+generateToken(userId, orgId, sessionId) String
|
||||
+parseToken(token) TokenClaims
|
||||
+getOrgId(token) String
|
||||
}
|
||||
class AuthProperties {
|
||||
+jwtSecret String
|
||||
+jwtExpiration Duration
|
||||
}
|
||||
class ApplicationConfig {
|
||||
+server.port int
|
||||
+server.servlet.context-path String
|
||||
+fms.auth.jwt-secret String
|
||||
+fms.auth.jwt-expiration Duration
|
||||
+fms.database.pool.* ...
|
||||
+fms.file.storage-type String
|
||||
+fms.file.local.storage-dir String
|
||||
+fms.file.local.url-prefix String
|
||||
+fms.file.oss.g3oss-url String
|
||||
}
|
||||
JwtUtils --> AuthProperties : "读取配置"
|
||||
ApplicationConfig ..> JwtUtils : "影响鉴权行为"
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java:18-81](file://fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java#L18-L81)
|
||||
- [fms-api/src/main/resources/application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
|
||||
章节来源
|
||||
- [fms-api/pom.xml:29-96](file://fms-api/pom.xml#L29-L96)
|
||||
- [fms-api/src/main/resources/application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
- [fms-api/start.cmd:1-8](file://fms-api/start.cmd#L1-L8)
|
||||
|
||||
### 前端应用(fms-vue)
|
||||
- 构建与预览:vite build生成dist静态资源;vite preview本地预览
|
||||
- 开发代理:开发时将/api请求代理到后端8088端口
|
||||
- 发布产物:dist目录包含HTML、JS、CSS等资源,适合放置于Nginx或CDN
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start(["开始"]) --> Build["执行 vite build"]
|
||||
Build --> Dist["产出 dist 静态资源"]
|
||||
Dist --> Deploy["部署至 Nginx/CDN"]
|
||||
Deploy --> End(["完成"])
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [fms-vue/package.json:6-19](file://fms-vue/package.json#L6-L19)
|
||||
- [fms-vue/vite.config.js:11-21](file://fms-vue/vite.config.js#L11-L21)
|
||||
|
||||
章节来源
|
||||
- [fms-vue/package.json:6-19](file://fms-vue/package.json#L6-L19)
|
||||
- [fms-vue/vite.config.js:1-25](file://fms-vue/vite.config.js#L1-L25)
|
||||
|
||||
### 数据库与多租户配置
|
||||
- 多组织数据库:每个组织一个properties文件,命名规则与示例见文档
|
||||
- 连接信息:url、username、password、driver
|
||||
- 开发兼容:旧版SQL Server需TLS兼容参数
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A["选择组织ID"] --> B{"是否存在对应 .properties ?"}
|
||||
B --> |是| C["加载连接参数"]
|
||||
B --> |否| D["报错/回退"]
|
||||
C --> E["建立数据库连接"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [fms-api/config/dbconfigs/README.md:1-28](file://fms-api/config/dbconfigs/README.md#L1-L28)
|
||||
- [fms-api/config/dbconfigs/G3HD.properties:1-5](file://fms-api/config/dbconfigs/G3HD.properties#L1-L5)
|
||||
- [fms-api/config/dbconfigs/G3HY2025.properties:1-5](file://fms-api/config/dbconfigs/G3HY2025.properties#L1-L5)
|
||||
|
||||
章节来源
|
||||
- [fms-api/config/dbconfigs/README.md:1-28](file://fms-api/config/dbconfigs/README.md#L1-L28)
|
||||
- [fms-api/config/dbconfigs/G3HD.properties:1-5](file://fms-api/config/dbconfigs/G3HD.properties#L1-L5)
|
||||
- [fms-api/config/dbconfigs/G3HY2025.properties:1-5](file://fms-api/config/dbconfigs/G3HY2025.properties#L1-L5)
|
||||
|
||||
### 登录鉴权流程(JWT)
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant C as "客户端"
|
||||
participant S as "fms-api"
|
||||
participant J as "JwtUtils"
|
||||
C->>S : "POST /api/auth/login (账号/密码)"
|
||||
S->>S : "验证凭据"
|
||||
S->>J : "generateToken(userId, orgId, sessionId)"
|
||||
J-->>S : "返回JWT字符串"
|
||||
S-->>C : "返回{token}"
|
||||
C->>S : "后续请求携带 Authorization : Bearer <token>"
|
||||
S->>J : "parseToken(token)"
|
||||
J-->>S : "解析出userId/orgId/sessionId"
|
||||
S-->>C : "业务响应"
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java:45-66](file://fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java#L45-L66)
|
||||
- [fms-api/src/main/resources/application.yaml:10-13](file://fms-api/src/main/resources/application.yaml#L10-L13)
|
||||
|
||||
章节来源
|
||||
- [fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java:18-81](file://fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java#L18-L81)
|
||||
- [fms-api/src/main/resources/application.yaml:10-13](file://fms-api/src/main/resources/application.yaml#L10-L13)
|
||||
|
||||
## 依赖关系分析
|
||||
- 后端依赖:Spring Boot、JDBC、Druid、SQL Server驱动、JWT、Jackson、UA Parser、IP2Region
|
||||
- 前端依赖:Vue 3、Vue Router、Pinia、Axios、Dayjs、UI组件库等
|
||||
- 运行时依赖:JDK 21、Node.js(构建期)、Nginx/CDN(生产)
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
FE["fms-vue"] --> |"构建产物"| DIST["dist 静态资源"]
|
||||
DIST --> |"托管"| WEB["Nginx/CDN"]
|
||||
WEB --> |"HTTP /api/*"| BE["fms-api"]
|
||||
BE --> |"JDBC"| DB["SQL Server"]
|
||||
BE --> |"可选"| OSS["对象存储"]
|
||||
```
|
||||
|
||||
图表来源
|
||||
- [fms-vue/package.json:21-45](file://fms-vue/package.json#L21-L45)
|
||||
- [fms-api/pom.xml:32-96](file://fms-api/pom.xml#L32-L96)
|
||||
|
||||
章节来源
|
||||
- [fms-vue/package.json:21-45](file://fms-vue/package.json#L21-L45)
|
||||
- [fms-api/pom.xml:32-96](file://fms-api/pom.xml#L32-L96)
|
||||
|
||||
## 性能考虑
|
||||
- 连接池调优:根据并发与延迟调整初始大小、最小空闲、最大活跃、等待超时、空闲检测间隔等
|
||||
- 静态资源优化:启用Gzip/Brotli压缩、长缓存(带版本哈希)、按需懒加载路由与组件
|
||||
- CDN与缓存:静态资源上CDN,设置合理的Cache-Control与ETag;API层避免过度缓存敏感数据
|
||||
- 数据库:索引优化、慢查询治理、连接池上限与超时合理配置
|
||||
- 容器资源:限制CPU/内存,预留堆外内存给JVM与连接池
|
||||
|
||||
[本节为通用指导,不直接分析具体文件]
|
||||
|
||||
## 故障排查指南
|
||||
- 启动失败
|
||||
- 检查JDK版本与环境变量(参考开发启动脚本)
|
||||
- 确认端口占用与上下文路径
|
||||
- 鉴权异常
|
||||
- 校验JWT密钥长度与有效期配置
|
||||
- 检查令牌是否过期或缺失必要声明
|
||||
- 数据库连接问题
|
||||
- 核对组织数据库配置文件格式与连通性
|
||||
- 关注连接池耗尽与超时
|
||||
- 文件上传/访问
|
||||
- 本地存储:确认目录存在且可写,URL前缀正确
|
||||
- OSS:确认地址与权限
|
||||
|
||||
章节来源
|
||||
- [fms-api/start.cmd:1-8](file://fms-api/start.cmd#L1-L8)
|
||||
- [fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java:28-42](file://fms-api/src/main/java/cn/g3soft/fmsapi/utils/JwtUtils.java#L28-L42)
|
||||
- [fms-api/config/dbconfigs/README.md:1-28](file://fms-api/config/dbconfigs/README.md#L1-L28)
|
||||
- [fms-api/src/main/resources/application.yaml:27-34](file://fms-api/src/main/resources/application.yaml#L27-L34)
|
||||
|
||||
## 结论
|
||||
FMS采用前后端分离架构,后端以Spring Boot提供服务,前端以Vite构建静态资源。生产部署建议通过反向代理统一入口,结合CDN加速静态资源,数据库独立部署并按组织隔离。配合合理的连接池、缓存与监控策略,可获得稳定高效的运行体验。
|
||||
|
||||
[本节为总结性内容,不直接分析具体文件]
|
||||
|
||||
## 附录
|
||||
|
||||
### 生产部署方案(Docker化)
|
||||
- 镜像构建
|
||||
- 后端:基于JDK 21基础镜像,复制打包后的JAR,暴露端口8088
|
||||
- 前端:基于Nginx镜像,复制dist目录,配置静态资源与反向代理
|
||||
- 环境变量与配置
|
||||
- 后端:通过环境变量注入JWT密钥、数据库连接池参数、文件存储配置
|
||||
- 前端:通过Nginx环境变量或构建时替换API基址
|
||||
- 数据持久化
|
||||
- 挂载文件存储目录(本地模式)
|
||||
- 数据库与对象存储独立部署
|
||||
- 网络与安全
|
||||
- 仅开放443端口,内部端口不暴露
|
||||
- 启用HTTPS,配置强加密套件与HSTS
|
||||
- 限制跨域与源白名单
|
||||
|
||||
[本节为通用指导,不直接分析具体文件]
|
||||
|
||||
### 服务器环境要求
|
||||
- 后端:JDK 21,建议4核8GB起(视并发与负载调整)
|
||||
- 前端:构建阶段需要Node.js(版本与包管理器依pnpm-lock为准)
|
||||
- 数据库:SQL Server(版本与TLS策略需与驱动匹配)
|
||||
- 存储:本地磁盘或对象存储(按配置)
|
||||
|
||||
章节来源
|
||||
- [fms-api/pom.xml:29-31](file://fms-api/pom.xml#L29-L31)
|
||||
- [fms-api/config/dbconfigs/README.md:18-28](file://fms-api/config/dbconfigs/README.md#L18-L28)
|
||||
|
||||
### 前后端构建流程与发布策略
|
||||
- 前端
|
||||
- 开发:vite dev,自动代理/api到后端
|
||||
- 构建:vite build,产出dist
|
||||
- 发布:将dist部署至Nginx或CDN,配置缓存头与压缩
|
||||
- 后端
|
||||
- 构建:mvn package(Spring Boot Maven插件)
|
||||
- 运行:java -jar 或容器运行
|
||||
- 配置:application.yaml与组织数据库配置文件
|
||||
|
||||
章节来源
|
||||
- [fms-vue/package.json:6-19](file://fms-vue/package.json#L6-L19)
|
||||
- [fms-vue/vite.config.js:11-21](file://fms-vue/vite.config.js#L11-L21)
|
||||
- [fms-api/pom.xml:98-105](file://fms-api/pom.xml#L98-L105)
|
||||
- [fms-api/src/main/resources/application.yaml:1-34](file://fms-api/src/main/resources/application.yaml#L1-L34)
|
||||
|
||||
### 静态资源优化、CDN与缓存策略
|
||||
- 启用Gzip/Brotli压缩
|
||||
- 为静态资源设置长期缓存(带内容哈希)
|
||||
- 使用CDN分发静态资源,配置边缘缓存与回源策略
|
||||
- API响应按需缓存,敏感数据不缓存
|
||||
|
||||
[本节为通用指导,不直接分析具体文件]
|
||||
|
||||
### 监控与日志收集
|
||||
- 应用性能监控
|
||||
- 接入APM(如SkyWalking/Pinpoint)采集JVM指标、接口耗时、错误率
|
||||
- 日志收集
|
||||
- 应用日志:统一输出JSON格式,集中收集(ELK/Loki)
|
||||
- 访问日志:Nginx访问日志结构化,便于审计与分析
|
||||
- 告警机制
|
||||
- 基于指标阈值(CPU/内存/错误率/慢查询)配置告警
|
||||
- 关键链路失败即时通知
|
||||
|
||||
[本节为通用指导,不直接分析具体文件]
|
||||
|
||||
### 数据库备份恢复与数据迁移
|
||||
- 备份策略
|
||||
- 全量+增量备份,异地容灾
|
||||
- 定期演练恢复流程
|
||||
- 恢复流程
|
||||
- 停机窗口评估与回滚预案
|
||||
- 校验备份完整性后恢复
|
||||
- 数据迁移
|
||||
- 使用版本化脚本与工具进行增量迁移
|
||||
- 迁移前后进行一致性校验与回滚方案
|
||||
|
||||
[本节为通用指导,不直接分析具体文件]
|
||||
|
||||
### 日常运维操作
|
||||
- 服务启停
|
||||
- 后端:systemd或容器编排管理生命周期
|
||||
- 前端:Nginx重载配置或滚动更新
|
||||
- 配置更新
|
||||
- 后端:热更新或灰度发布(注意状态与连接池)
|
||||
- 前端:静态资源版本升级,CDN刷新
|
||||
- 故障排查
|
||||
- 查看应用日志、访问日志、数据库慢查询
|
||||
- 检查连接池、磁盘空间、证书有效期
|
||||
|
||||
[本节为通用指导,不直接分析具体文件]
|
||||
|
||||
### 性能调优与安全加固
|
||||
- 性能调优
|
||||
- JVM参数优化(堆大小、GC策略)
|
||||
- 连接池与线程池容量调优
|
||||
- 静态资源压缩与缓存
|
||||
- 安全加固
|
||||
- HTTPS强制与强加密套件
|
||||
- JWT密钥轮换与最小权限原则
|
||||
- 输入校验、防注入、限流与防重放
|
||||
- 敏感配置外置与加密存储
|
||||
|
||||
[本节为通用指导,不直接分析具体文件]
|
||||
Reference in new issue
Block a user