11 KiB
11 KiB
部署方案
**本文引用的文件** - [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)目录
简介
本部署方案面向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。
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"]
图表来源
章节来源
核心组件
- 后端服务:Spring Boot Web MVC + JDBC + Druid连接池 + JWT鉴权 + SQL Server驱动。
- 前端应用:Vue 3 + Vite + Pinia + Axios等。
- 数据存储:SQL Server(多机构properties配置)。
- 文件存储:本地目录或OSS(可通过配置切换)。
章节来源
架构总览
生产环境推荐拓扑:
- 入口层:Nginx对外暴露HTTPS,负责静态资源缓存、Gzip/Brotli压缩、限流、WAF(可选)和API路由。
- 应用层:fms-api以无状态方式运行,建议多实例横向扩展,配合会话共享或无状态JWT。
- 数据层:SQL Server主备或集群;文件存储建议使用对象存储(OSS)以提升可扩展性。
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 : 返回登录结果
图表来源
详细组件分析
后端构建与运行(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驱动。
章节来源
后端配置与环境变量
- 服务端口与上下文: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
- fms-api/config/dbconfigs/README.md:1-28
- fms-api/config/dbconfigs/G3HD.properties:1-5
前端构建与优化(Vite)
- 脚本命令:dev/build/preview/test/lint/fmt等。
- 开发代理:/api代理到http://127.0.0.1:8088,便于联调。
- 构建产物:vite build输出dist目录,适合Nginx托管。
- 依赖:Vue 3、Pinia、Axios、Vitest等。
章节来源
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;严格的安全策略与监控告警。
章节来源
负载均衡与高可用
- 后端多实例:同一服务多副本,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(生产静态托管与反向代理)。
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"]
图表来源
章节来源
性能与容量规划
- 服务器硬件(参考值):
- 后端: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
- fms-api/src/main/resources/application.yaml:1-34
- fms-api/config/dbconfigs/README.md:18-28
- fms-vue/vite.config.js:15-21
结论
本方案基于现有后端与前端工程,明确了生产环境的软硬件要求、构建与部署流程、容器化与编排思路、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与缓存策略。
(本节为通用实践说明,不直接引用具体代码文件)