Files
workspace/code/fms/.qoder/repowiki/zh/content/部署运维/部署运维.md
T
2026-08-23 21:02:41 +08:00

15 KiB
Raw Blame History

部署运维

**本文引用的文件** - [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)

目录

  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,生产构建为静态资源
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

图表来源

章节来源

核心组件

  • 后端服务:基于Spring Boot Web MVC,内置Tomcat,暴露REST接口;使用Druid连接池与SQL Server JDBC驱动;JWT鉴权;支持本地或OSS文件存储
  • 前端应用:Vue 3 + Vite,开发模式代理/api到后端;生产模式输出静态资源供Web服务器或CDN托管
  • 数据库:SQL Server,按组织隔离的配置文件管理多库连接
  • 安全:JWT签名与校验,密钥长度与有效期强制校验

章节来源

架构总览

生产环境推荐拓扑:

  • Nginx/反向代理对外暴露HTTPS入口,将静态资源请求指向CDN或本地静态目录,将/api转发至后端
  • 后端以Docker容器运行,挂载外部卷用于文件存储与配置
  • 数据库独立部署,仅对后端开放端口
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-api)

  • 技术栈与依赖:Spring Boot Web MVC、JDBC、Druid连接池、SQL Server JDBC驱动、JWT、Jackson、UA解析、IP定位等
  • 启动方式:Maven spring-boot:run(开发脚本),生产建议打包为可执行JAR并容器化运行
  • 配置要点:
    • 服务端口与上下文路径
    • JWT密钥与有效期
    • 数据库连接池参数
    • 文件存储类型(本地/OSS)及路径/URL前缀
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-vue)

  • 构建与预览:vite build生成dist静态资源;vite preview本地预览
  • 开发代理:开发时将/api请求代理到后端8088端口
  • 发布产物:dist目录包含HTML、JS、CSS等资源,适合放置于Nginx或CDN
flowchart TD
Start(["开始"]) --> Build["执行 vite build"]
Build --> Dist["产出 dist 静态资源"]
Dist --> Deploy["部署至 Nginx/CDN"]
Deploy --> End(["完成"])

图表来源

章节来源

数据库与多租户配置

  • 多组织数据库:每个组织一个properties文件,命名规则与示例见文档
  • 连接信息:url、username、password、driver
  • 开发兼容:旧版SQL Server需TLS兼容参数
flowchart TD
A["选择组织ID"] --> B{"是否存在对应 .properties ?"}
B --> |是| C["加载连接参数"]
B --> |否| D["报错/回退"]
C --> E["建立数据库连接"]

图表来源

章节来源

登录鉴权流程(JWT)

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 : "业务响应"

图表来源

章节来源

依赖关系分析

  • 后端依赖: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(生产)
graph LR
FE["fms-vue"] --> |"构建产物"| DIST["dist 静态资源"]
DIST --> |"托管"| WEB["Nginx/CDN"]
WEB --> |"HTTP /api/*"| BE["fms-api"]
BE --> |"JDBC"| DB["SQL Server"]
BE --> |"可选"| OSS["对象存储"]

图表来源

章节来源

性能考虑

  • 连接池调优:根据并发与延迟调整初始大小、最小空闲、最大活跃、等待超时、空闲检测间隔等
  • 静态资源优化:启用Gzip/Brotli压缩、长缓存(带版本哈希)、按需懒加载路由与组件
  • CDN与缓存:静态资源上CDN,设置合理的Cache-Control与ETag;API层避免过度缓存敏感数据
  • 数据库:索引优化、慢查询治理、连接池上限与超时合理配置
  • 容器资源:限制CPU/内存,预留堆外内存给JVM与连接池

[本节为通用指导,不直接分析具体文件]

故障排查指南

  • 启动失败
    • 检查JDK版本与环境变量(参考开发启动脚本)
    • 确认端口占用与上下文路径
  • 鉴权异常
    • 校验JWT密钥长度与有效期配置
    • 检查令牌是否过期或缺失必要声明
  • 数据库连接问题
    • 核对组织数据库配置文件格式与连通性
    • 关注连接池耗尽与超时
  • 文件上传/访问
    • 本地存储:确认目录存在且可写,URL前缀正确
    • OSS:确认地址与权限

章节来源

结论

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策略需与驱动匹配)
  • 存储:本地磁盘或对象存储(按配置)

章节来源

前后端构建流程与发布策略

  • 前端
    • 开发:vite dev,自动代理/api到后端
    • 构建:vite build,产出dist
    • 发布:将dist部署至Nginx或CDN,配置缓存头与压缩
  • 后端
    • 构建:mvn package(Spring Boot Maven插件)
    • 运行:java -jar 或容器运行
    • 配置:application.yaml与组织数据库配置文件

章节来源

静态资源优化、CDN与缓存策略

  • 启用Gzip/Brotli压缩
  • 为静态资源设置长期缓存(带内容哈希)
  • 使用CDN分发静态资源,配置边缘缓存与回源策略
  • API响应按需缓存,敏感数据不缓存

[本节为通用指导,不直接分析具体文件]

监控与日志收集

  • 应用性能监控
    • 接入APM(如SkyWalking/Pinpoint)采集JVM指标、接口耗时、错误率
  • 日志收集
    • 应用日志:统一输出JSON格式,集中收集(ELK/Loki)
    • 访问日志:Nginx访问日志结构化,便于审计与分析
  • 告警机制
    • 基于指标阈值(CPU/内存/错误率/慢查询)配置告警
    • 关键链路失败即时通知

[本节为通用指导,不直接分析具体文件]

数据库备份恢复与数据迁移

  • 备份策略
    • 全量+增量备份,异地容灾
    • 定期演练恢复流程
  • 恢复流程
    • 停机窗口评估与回滚预案
    • 校验备份完整性后恢复
  • 数据迁移
    • 使用版本化脚本与工具进行增量迁移
    • 迁移前后进行一致性校验与回滚方案

[本节为通用指导,不直接分析具体文件]

日常运维操作

  • 服务启停
    • 后端:systemd或容器编排管理生命周期
    • 前端:Nginx重载配置或滚动更新
  • 配置更新
    • 后端:热更新或灰度发布(注意状态与连接池)
    • 前端:静态资源版本升级,CDN刷新
  • 故障排查
    • 查看应用日志、访问日志、数据库慢查询
    • 检查连接池、磁盘空间、证书有效期

[本节为通用指导,不直接分析具体文件]

性能调优与安全加固

  • 性能调优
    • JVM参数优化(堆大小、GC策略)
    • 连接池与线程池容量调优
    • 静态资源压缩与缓存
  • 安全加固
    • HTTPS强制与强加密套件
    • JWT密钥轮换与最小权限原则
    • 输入校验、防注入、限流与防重放
    • 敏感配置外置与加密存储

[本节为通用指导,不直接分析具体文件]