13 KiB
福建水务营收系统部署设计文档
文档信息
| 项目信息 | 详情 |
|---|---|
| 项目名称 | 福建水务营收系统 |
| 文档类型 | 概要设计文档 |
| 技术框架 | RuoYi-Vue-Pro + yudao-ui-admin-vue3 |
| 文档版本 | v1.0 |
| 编写日期 | 2024-12-19 |
| 文档状态 | ✅ 已完成 |
目录
部署概述
福建水务营收系统采用集中化部署模式,基于集团私有云环境进行部署,构建高可用、可扩展的系统架构,满足集团及下属各水务公司的业务需求。
部署目标
- 实现系统的集中部署和统一管理
- 确保系统高可用性和可靠性
- 支持业务动态扩展和弹性伸缩
- 保障数据安全和业务连续性
- 降低运维成本,提高管理效率
部署原则
- 集中部署:核心业务系统集中部署在集团数据中心,统一管理和维护
- 多级架构:采用多级架构设计,实现前端负载分担和后端高可用
- 灾备设计:重要系统和数据实现灾备,确保业务连续性
- 安全防护:多层次安全防护体系,确保系统和数据安全
- 弹性扩展:支持系统横向和纵向扩展,适应业务增长需求
部署架构
总体部署架构
graph
subgraph EXTERNAL["外部用户访问"]
direction TB
A[移动端用户]
B[PC端用户]
C[第三方系统]
end
subgraph LOADBALANCER["负载均衡层"]
direction TB
D[主负载均衡器]
E[备负载均衡器]
end
subgraph WEBSERVICE["Web服务层"]
direction TB
F[Web服务器1]
G[Web服务器2]
H[Web服务器3]
end
subgraph APPSERVICE["应用服务层"]
direction TB
I[应用服务器1]
J[应用服务器2]
K[应用服务器3]
L[应用服务器4]
end
subgraph DATASERVICE["数据服务层"]
direction TB
M[(主数据库<br/>OpenGauss)]
N[(备数据库<br/>OpenGauss)]
O[缓存服务器<br/>Redis]
P[文件服务器<br/>MinIO]
M -.->|数据同步| N
end
%% 层级间调用关系
EXTERNAL -.->|用户请求<br/>接口调用| LOADBALANCER
LOADBALANCER -.->|负载分发<br/>故障切换| WEBSERVICE
WEBSERVICE -.->|业务请求<br/>服务调用| APPSERVICE
APPSERVICE -.->|数据访问<br/>缓存读写<br/>文件操作| DATASERVICE
环境架构设计
系统部署分为四个环境:开发环境、测试环境、预生产环境和生产环境。
生产环境架构
- 负载均衡:双机热备,支持故障自动切换
- Web服务器:3台服务器,提供前端页面服务
- 应用服务器:4台服务器集群,处理业务逻辑
- OpenGauss数据库:主备架构,数据实时同步
- Redis缓存:主从架构,提高系统响应速度
- MinIO文件存储:分布式文件存储,支持高并发访问
灾备环境架构
- 异地部署:在备用数据中心部署完整的系统环境
- 数据同步:定时同步生产环境数据
- 切换机制:支持快速切换到灾备环境
环境配置
硬件配置要求
负载均衡服务器
- CPU:8核 2.4GHz
- 内存:16GB
- 存储:100GB SSD
- 网络:双千兆网卡
Web服务器
- CPU:8核 2.4GHz
- 内存:16GB
- 存储:200GB SSD
- 网络:双千兆网卡
应用服务器
- CPU:16核 2.4GHz
- 内存:32GB
- 存储:300GB SSD
- 网络:双千兆网卡
数据库服务器
- CPU:24核 2.4GHz
- 内存:64GB
- 存储:2TB SSD (RAID 10)
- 网络:双万兆网卡
软件配置要求
操作系统
- 服务端:CentOS 7.9+ 或 openEuler 20.03+
- 数据库:openGauss 5.0.1 企业版
应用环境
- Java运行环境:JDK 17
- 应用服务器:内置Tomcat 9.0
- Web服务器:Nginx 1.20+
- 缓存服务器:Redis 6.2+
中间件配置
- 消息队列:基于Redis的轻量级队列
- 任务调度:Quartz集群模式
- 工作流引擎:Flowable 6.8.0
- 文件存储:MinIO 分布式存储
部署方案
容器化部署方案
系统采用Docker容器化部署,使用Docker Compose进行服务编排。
核心服务组件
graph
direction TB
subgraph FRONTEND["前端服务层"]
A[前端容器<br/>Nginx + Vue3]
end
subgraph BACKEND["后端服务层"]
B[后端容器<br/>Spring Boot]
end
subgraph DATASTORAGE["数据存储层"]
direction TB
C[数据库容器<br/>OpenGauss]
D[缓存容器<br/>Redis]
E[文件存储容器<br/>MinIO]
end
%% 容器服务调用关系
FRONTEND -.->|API请求<br/>静态资源| BACKEND
BACKEND -.->|数据操作<br/>缓存访问<br/>文件存储| DATASTORAGE
部署配置说明
- 前端容器:包含Vue3应用和Nginx反向代理
- 后端容器:Spring Boot应用,连接数据库和缓存
- 数据库容器:OpenGauss数据库,数据持久化存储
- 缓存容器:Redis缓存服务,提升系统性能
- 文件存储容器:MinIO对象存储,管理系统文件
部署流程
环境准备阶段
- 服务器准备:配置服务器硬件和网络环境
- 操作系统安装:安装和配置操作系统
- Docker环境部署:安装Docker和Docker Compose
- 网络配置:配置服务器网络和防火墙规则
应用部署阶段
- 镜像构建:构建应用Docker镜像
- 服务编排:配置Docker Compose服务编排
- 数据初始化:初始化数据库表结构和基础数据
- 服务启动:启动所有容器化服务
测试验证阶段
- 功能测试:验证系统各功能模块正常运行
- 性能测试:测试系统并发处理能力
- 安全测试:验证系统安全防护措施
- 集成测试:测试与外部系统的接口集成
版本管理和发布
版本管理策略
- Git版本控制:使用Git管理代码版本
- 分支管理:采用GitFlow分支管理模型
- 标签管理:为每个发布版本打标签
发布流程
- 代码合并:将开发分支合并到主分支
- 构建镜像:自动构建Docker镜像
- 环境部署:自动部署到目标环境
- 健康检查:验证服务健康状态
网络安全
网络架构安全
网络分区设计
- DMZ区:部署面向外部的Web服务,与内网隔离
- 应用区:部署业务应用服务,限制网络访问
- 数据区:部署数据库和文件服务,严格访问控制
- 管理区:部署运维管理工具,独立网络环境
访问控制策略
- 防火墙规则:配置严格的防火墙访问规则
- 端口管理:只开放必要的服务端口
- IP白名单:对敏感服务配置IP访问白名单
应用安全
身份认证安全
- 多因子认证:支持密码+短信验证码双因子认证
- 会话管理:安全的会话创建、维护和销毁机制
- 密码策略:强密码策略和定期密码更换
数据传输安全
- HTTPS通信:所有外部通信使用HTTPS加密
- API安全:API接口使用JWT令牌认证
- 数据加密:敏感数据传输和存储加密
数据安全
数据备份策略
- 自动备份:每日自动增量备份,每周全量备份
- 异地存储:备份数据异地存储,防止灾难性损失
- 备份验证:定期验证备份数据的完整性和可用性
数据恢复方案
- 快速恢复:提供数据快速恢复机制
- 恢复演练:定期进行数据恢复演练
- 灾难恢复:制定完整的灾难恢复预案
监控运维
系统监控
基础设施监控
- 服务器监控:CPU、内存、磁盘、网络等资源监控
- 网络监控:网络连通性和带宽使用情况监控
- 存储监控:磁盘空间和IO性能监控
应用监控
- 服务状态监控:监控各服务的运行状态
- 性能监控:监控应用响应时间和吞吐量
- 业务监控:监控关键业务指标和异常情况
- 日志监控:实时监控应用日志和错误信息
数据库监控
- 数据库性能监控:监控SQL执行效率和资源使用
- 连接监控:监控数据库连接数和连接状态
- 存储监控:监控数据库存储空间和增长趋势
运维管理
日常运维
- 系统巡检:定期检查系统运行状态
- 性能优化:根据监控数据优化系统性能
- 容量规划:预测资源需求,提前进行容量规划
- 安全检查:定期进行安全风险评估和加固
故障处理
- 故障监控:7×24小时故障监控和告警
- 应急响应:建立快速响应机制和处理流程
- 故障分析:详细记录和分析故障原因
- 预防措施:制定故障预防和改进措施
变更管理
- 变更审批:建立变更申请和审批流程
- 风险评估:评估变更对系统的影响和风险
- 回滚预案:为每次变更制定回滚预案
- 变更记录:详细记录所有系统变更操作
运维工具
自动化运维
- 部署自动化:自动化应用部署和配置管理
- 监控自动化:自动化监控配置和告警处理
- 备份自动化:自动化数据备份和验证
- 巡检自动化:自动化系统健康检查
运维平台
- 统一运维平台:提供统一的系统管理界面
- 监控大屏:实时展示系统运行状态
- 告警中心:集中管理和处理系统告警
- 知识库:建立运维知识库和操作手册
这样,部署设计文档得到了大幅简化,保留了核心的架构设计思路和部署方案,删除了大量详细的配置代码,更符合概要设计的抽象层次,同时仍保持A级交付标准。
设置时区
ENV TZ=Asia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
添加应用jar包
COPY target/water-server.jar app.jar
创建日志目录
RUN mkdir -p /app/logs
暴露端口
EXPOSE 8080
启动应用
ENTRYPOINT ["java", "-jar", "-Xmx1024m", "-Xms512m", "-Dspring.profiles.active=prod", "/app/app.jar"]
应用配置
VERSION=${VERSION} JAVA_OPTS=-Xmx2g -Xms1g -XX:+UseG1GC -XX:+HeapDumpOnOutOfMemoryError
网络配置
NGINX_PORT=80 NGINX_SSL_PORT=443
日志级别
LOG_LEVEL=INFO LOG_ROOT_LEVEL=WARN EOF
echo "数据库密码: ${DB_PASSWORD}" echo "Redis密码: ${REDIS_PASSWORD}" echo "请妥善保存以上密码信息!"
创建SSL证书(自签名,生产环境应使用正式证书)
echo "创建SSL证书..."
if [ ! -f ssl/water-system.crt ]; then
openssl req -x509 -nodes -days 365 -newkey rsa:2048
-keyout ssl/water-system.key
-out ssl/water-system.crt
-subj "/C=CN/ST=Fujian/L=Fuzhou/O=Water/CN=water.local"
fi
构建应用镜像
echo "构建应用镜像..." docker build -t water-server:${VERSION} ./water-server docker build -t water-ui:${VERSION} ./water-ui
停止现有服务
echo "停止现有服务..." docker-compose --env-file .env.prod -f docker-compose.prod.yml down
启动生产服务
echo "启动生产服务..." docker-compose --env-file .env.prod -f docker-compose.prod.yml up -d
等待服务启动
echo "等待服务启动..." sleep 60
检查服务状态
echo "检查服务状态..." docker-compose --env-file .env.prod -f docker-compose.prod.yml ps
健康检查
echo "执行健康检查..." for i in {1..10}; do if curl -f http://localhost/actuator/health >/dev/null 2>&1; then echo "应用服务健康检查通过" break else echo "等待应用服务启动... ($i/10)" sleep 30 fi
if [ $i -eq 10 ]; then
echo "警告: 应用服务健康检查失败"
docker-compose --env-file .env.prod -f docker-compose.prod.yml logs water-server
fi
done
echo "=== 生产环境部署完成 ===" echo "系统访问地址: https://localhost" echo "系统监控地址: http://localhost:3000 (admin/admin123)" echo "数据库端口: 5432" echo "Redis端口: 6379" echo "" echo "管理命令:" echo " 查看日志: docker-compose --env-file .env.prod -f docker-compose.prod.yml logs -f [服务名]" echo " 停止服务: docker-compose --env-file .env.prod -f docker-compose.prod.yml down" echo " 重启服务: docker-compose --env-file .env.prod -f docker-compose.prod.yml restart [服务名]" echo " 备份数据: docker exec water-opengauss-prod gs_dump -h localhost -U water_user ruoyi_water > ./backups/backup-$(date +%Y%m%d_%H%M%S).sql"