You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

23 KiB

部署指南

**本文引用的文件** - [pom.xml](file://pom.xml) - [crm-app/pom.xml](file://crm-app/pom.xml) - [crm-auth/pom.xml](file://crm-auth/pom.xml) - [crm-base/pom.xml](file://crm-base/pom.xml) - [crm-file/pom.xml](file://crm-file/pom.xml) - [Dockerfile](file://Dockerfile) - [docker-compose.yml](file://docker-compose.yml) - [.dockerignore](file://.dockerignore) - [settings.xml](file://settings.xml) - [crm-app/src/main/java/com/crm/app/CrmAppApplication.java](file://crm-app/src/main/java/com/crm/app/CrmAppApplication.java) - [crm-app/src/main/resources/application.yml](file://crm-app/src/main/resources/application.yml) - [crm-app/src/main/resources/application-verify.yml](file://crm-app/src/main/resources/application-verify.yml) - [crm-auth/src/main/java/com/crm/auth/AuthApplication.java](file://crm-auth/src/main/java/com/crm/auth/AuthApplication.java) - [crm-auth/src/main/resources/application.yml](file://crm-auth/src/main/resources/application.yml) - [crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java](file://crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java) - [crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java](file://crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java) - [crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java](file://crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java) - [crm-auth/src/main/java/com/crm/auth/security/TokenService.java](file://crm-auth/src/main/java/com/crm/auth/security/TokenService.java) - [crm-base/src/main/java/com/crm/base/config/RedisConfig.java](file://crm-base/src/main/java/com/crm/base/config/RedisConfig.java) - [crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java](file://crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java) - [crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java](file://crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java) - [crm-base/src/main/java/com/crm/base/config/CorsConfig.java](file://crm-base/src/main/java/com/crm/base/config/CorsConfig.java) - [crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java](file://crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java) - [crm-file/src/main/java/com/crm/file/config/FileProperties.java](file://crm-file/src/main/java/com/crm/file/config/FileProperties.java) - [crm-file/src/main/java/com/crm/file/config/MinioConfig.java](file://crm-file/src/main/java/com/crm/file/config/MinioConfig.java) - [crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java](file://crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java)

更新摘要

所做更改

  • 新增完整的Docker容器化部署支持章节
  • 添加docker-compose一键部署配置说明
  • 更新配置文件管理部分,包含verify环境配置
  • 增强Docker镜像构建和优化说明
  • 添加容器编排和服务依赖管理指导

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能与容量规划
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本指南面向运维与交付团队,提供CRM后端系统的完整部署与运维手册。内容覆盖:

  • 环境准备与依赖服务安装(MySQL、Redis、MinIO)
  • 多模块构建与打包
  • 新增 Docker容器化部署(含docker-compose一键启动)
  • Kubernetes集群部署
  • 传统服务器部署
  • 配置文件管理、数据库初始化与服务启动顺序
  • 生产优化、监控告警、日志收集
  • 备份恢复策略
  • 负载均衡、SSL证书与域名绑定

目标:确保系统在生产环境中稳定、可靠、可观测、可回滚地运行。

项目结构

本项目为多模块Spring Boot应用,包含以下关键模块:

  • crm-base:公共基础能力(安全、数据访问、通用配置等)
  • crm-auth:认证授权与权限控制
  • crm-file:文件服务(上传、分片、预览、清理任务)
  • crm-app:应用入口与聚合配置
graph TB
subgraph "应用模块"
APP["crm-app<br/>应用入口"]
AUTH["crm-auth<br/>认证与权限"]
FILE["crm-file<br/>文件服务"]
BASE["crm-base<br/>公共基础"]
end
subgraph "外部依赖"
DB["MySQL"]
REDIS["Redis"]
MINIO["MinIO 对象存储"]
end
APP --> AUTH
APP --> FILE
AUTH --> BASE
FILE --> BASE
AUTH --> DB
AUTH --> REDIS
FILE --> DB
FILE --> REDIS
FILE --> MINIO

图表来源

  • pom.xml:1-200
  • crm-app/src/main/java/com/crm/app/CrmAppApplication.java:1-50
  • crm-auth/src/main/java/com/crm/auth/AuthApplication.java:1-50
  • crm-file/src/main/java/com/crm/file/config/MinioConfig.java:1-80

章节来源

  • pom.xml:1-200
  • crm-app/pom.xml:1-100
  • crm-auth/pom.xml:1-100
  • crm-base/pom.xml:1-100
  • crm-file/pom.xml:1-100

核心组件

  • 应用入口与装配
    • crm-app:聚合配置与统一入口
    • crm-auth:认证、鉴权、JWT、第三方登录集成
    • crm-file:文件上传、分片、预览、孤儿分片清理任务
  • 基础设施
    • MySQL:持久化用户、角色、菜单、部门、文件信息等
    • Redis:会话、缓存、分布式锁、限流等
    • MinIO:对象存储,用于文件与附件存储

章节来源

  • crm-app/src/main/java/com/crm/app/CrmAppApplication.java:1-50
  • crm-auth/src/main/java/com/crm/auth/AuthApplication.java:1-50
  • crm-base/src/main/java/com/crm/base/config/RedisConfig.java:1-80
  • crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java:1-80
  • crm-file/src/main/java/com/crm/file/config/MinioConfig.java:1-80

架构总览

下图展示典型部署拓扑:前端通过网关/反向代理接入,后端由多个服务实例组成,共享MySQL、Redis与MinIO。

graph TB
Client["客户端/浏览器"] --> Gateway["Nginx/网关"]
Gateway --> AuthSrv["crm-auth 实例 x N"]
Gateway --> FileSrv["crm-file 实例 x M"]
AuthSrv --> DB["MySQL"]
AuthSrv --> Cache["Redis"]
FileSrv --> DB
FileSrv --> Cache
FileSrv --> OSS["MinIO"]

图表来源

  • crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java:1-120
  • crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java:1-120
  • crm-file/src/main/java/com/crm/file/config/MinioConfig.java:1-80

详细组件分析

认证与权限(crm-auth)

  • 功能要点
    • JWT签发与校验、过滤器链、异常处理
    • 数据权限拦截器与表级过滤
    • 第三方登录(如钉钉)客户端与工厂
    • 初始数据加载(角色、菜单、默认用户等)
  • 关键类与职责
    • SecurityConfig:安全配置、跨域、接口文档开关
    • JwtAuthenticationFilter:请求鉴权、令牌解析
    • TokenService:令牌生成、刷新、校验
    • DataInitializer:启动时初始化基础数据
  • 启动顺序建议
    • 先完成数据库与Redis连接
    • 执行DataInitializer进行基础数据初始化
    • 再暴露HTTP端口对外提供服务
sequenceDiagram
participant C as "客户端"
participant G as "网关/Nginx"
participant A as "Auth服务"
participant F as "Jwt过滤器"
participant S as "Token服务"
participant R as "Redis"
participant D as "MySQL"
C->>G : "HTTP 请求"
G->>A : "转发到认证服务"
A->>F : "进入鉴权过滤器"
F->>S : "解析并校验JWT"
S->>R : "读取/校验会话或黑名单"
S-->>F : "返回鉴权结果"
F-->>A : "放行或拒绝"
A->>D : "业务查询(可选)"
A-->>C : "响应"

图表来源

  • crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java:1-120
  • crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java:1-120
  • crm-auth/src/main/java/com/crm/auth/security/TokenService.java:1-120
  • crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java:1-120

章节来源

  • crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java:1-120
  • crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java:1-120
  • crm-auth/src/main/java/com/crm/auth/security/TokenService.java:1-120
  • crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java:1-120

文件服务(crm-file)

  • 功能要点
    • 文件上传(支持分片)、下载、预览
    • MinIO对象存储集成
    • 定时任务清理孤儿分片
  • 关键类与职责
    • FileProperties:文件相关配置项
    • MinioConfig:MinIO客户端配置
    • OrphanChunkCleanupTask:定时清理未完成的分片
  • 依赖
    • MySQL:文件元数据
    • Redis:分片会话、临时状态
    • MinIO:实际文件存储
flowchart TD
Start(["开始"]) --> Upload["接收上传请求"]
Upload --> CheckSession{"是否存在分片会话?"}
CheckSession --> |否| Init["创建分片会话"]
CheckSession --> |是| Append["追加分片"]
Init --> Append
Append --> Complete{"是否全部分片完成?"}
Complete --> |否| Wait["等待后续分片"]
Complete --> |是| Merge["合并分片成文件"]
Merge --> SaveMeta["保存文件元数据到DB"]
SaveMeta --> Done(["结束"])
Wait --> Done

图表来源

  • crm-file/src/main/java/com/crm/file/config/FileProperties.java:1-80
  • crm-file/src/main/java/com/crm/file/config/MinioConfig.java:1-80
  • crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java:1-80

章节来源

  • crm-file/src/main/java/com/crm/file/config/FileProperties.java:1-80
  • crm-file/src/main/java/com/crm/file/config/MinioConfig.java:1-80
  • crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java:1-80

公共基础(crm-base)

  • 关键配置
    • RedisConfig:Redis连接池、序列化、超时等
    • MybatisPlusConfig:分页、SQL注入器、填充策略
    • SnowflakeProperties:分布式ID配置
    • CorsConfig:跨域配置
    • Knife4jConfig:API文档开关与路径
  • 作用
    • 为各业务模块提供统一的配置、工具与安全能力

章节来源

  • crm-base/src/main/java/com/crm/base/config/RedisConfig.java:1-80
  • crm-base/src/main/java/com/crm/base/config/MybatisPlusConfig.java:1-80
  • crm-base/src/main/java/com/crm/base/config/SnowflakeProperties.java:1-80
  • crm-base/src/main/java/com/crm/base/config/CorsConfig.java:1-80
  • crm-base/src/main/java/com/crm/base/config/Knife4jConfig.java:1-80

依赖关系分析

  • 模块内聚与耦合
    • crm-base为底层依赖,被其他模块复用
    • crm-auth与crm-file均依赖crm-base提供的安全、数据访问与工具
  • 外部依赖
    • MySQL:所有持久化数据
    • Redis:缓存、会话、分布式锁
    • MinIO:文件对象存储
  • 启动顺序
    • 数据库与中间件就绪 → 应用启动 → 数据初始化 → 暴露端口
graph LR
BASE["crm-base"] --> AUTH["crm-auth"]
BASE --> FILE["crm-file"]
AUTH --> APP["crm-app"]
FILE --> APP
AUTH --> DB["MySQL"]
AUTH --> REDIS["Redis"]
FILE --> DB
FILE --> REDIS
FILE --> MINIO["MinIO"]

图表来源

  • pom.xml:1-200
  • crm-app/pom.xml:1-100
  • crm-auth/pom.xml:1-100
  • crm-base/pom.xml:1-100
  • crm-file/pom.xml:1-100

章节来源

  • pom.xml:1-200

性能与容量规划

  • JVM与运行时
    • 根据实例规格设置堆大小、GC策略;启用JIT预热
    • 合理设置线程池、连接池参数(数据库、Redis、HTTP客户端)
  • 数据库
    • 连接池上限、慢查询阈值、索引优化
    • 读写分离与分库分表预留
  • 缓存
    • Redis内存上限、淘汰策略、热点Key保护
  • 文件服务
    • MinIO节点数与磁盘容量规划
    • 分片大小与并发上传限制
  • 水平扩展
    • 无状态服务多副本部署
    • 会话与缓存一致性保障

故障排查指南

  • 常见问题定位
    • 认证失败:检查JWT密钥、Redis连通性、过滤器链配置
    • 文件上传失败:检查MinIO连通性、分片会话、磁盘空间
    • 数据库连接异常:检查连接池、账号权限、网络ACL
  • 日志与指标
    • 应用日志:按模块与TraceId聚合
    • 中间件日志:MySQL慢查询、Redis命中率、MinIO访问日志
    • 指标采集:JVM、GC、连接池、QPS、延迟
  • 快速恢复
    • 健康检查与自动重启
    • 灰度发布与快速回滚
    • 数据快照与增量备份

章节来源

  • crm-auth/src/main/java/com/crm/auth/security/JwtAuthenticationFilter.java:1-120
  • crm-file/src/main/java/com/crm/file/task/OrphanChunkCleanupTask.java:1-80

结论

通过模块化设计与清晰的依赖边界,结合容器化与Kubernetes编排,可实现高可用、易扩展的CRM后端部署。配合完善的监控、日志与备份策略,能够保障生产环境的稳定性与可恢复性。

附录

一、环境准备与依赖服务安装

  • 操作系统与运行时
    • Linux发行版(推荐CentOS/RHEL/Ubuntu LTS)
    • JDK版本与版本锁定(参考构建脚本与依赖声明)
  • 依赖服务
    • MySQL:创建数据库与字符集、用户与权限
    • Redis:设置密码、最大内存、持久化策略
    • MinIO:创建桶、访问密钥、网络可达性

章节来源

  • crm-base/src/main/java/com/crm/base/config/RedisConfig.java:1-80
  • crm-file/src/main/java/com/crm/file/config/MinioConfig.java:1-80

二、构建与打包

  • Maven多模块构建
    • 在根目录执行构建命令,生成各模块JAR包
    • 产物位置与命名规则
  • 构建优化
    • 并行构建、跳过测试、依赖缓存

章节来源

  • pom.xml:1-200
  • crm-app/pom.xml:1-100
  • crm-auth/pom.xml:1-100
  • crm-base/pom.xml:1-100
  • crm-file/pom.xml:1-100

三、配置文件管理

  • 配置分层
    • 应用级application.yml
    • 环境级配置(dev/test/prod)
    • 新增 verify专用配置文件(application-verify.yml)
    • 外部化配置(环境变量、配置中心)
  • 关键配置项
    • 数据库连接、Redis连接、MinIO端点与凭据
    • JWT密钥、跨域、接口文档开关
    • 文件分片大小、超时、重试策略
    • 新增 verify环境下的调试接口白名单配置

章节来源

  • crm-app/src/main/resources/application.yml:1-76
  • crm-app/src/main/resources/application-verify.yml:1-13
  • crm-auth/src/main/resources/application.yml:1-200
  • crm-auth/src/main/java/com/crm/auth/config/SecurityConfig.java:1-120
  • crm-file/src/main/java/com/crm/file/config/FileProperties.java:1-80

四、数据库初始化与服务启动顺序

  • 初始化步骤
    • 建库建表、导入基础数据
    • 执行DataInitializer中的初始化逻辑
  • 启动顺序
    • 先启动依赖服务(MySQL、Redis、MinIO)
    • 再启动crm-auth与crm-file
    • 最后启动crm-app(若作为聚合入口)

章节来源

  • crm-auth/src/main/java/com/crm/auth/config/DataInitializer.java:1-120
  • crm-app/src/main/java/com/crm/app/CrmAppApplication.java:1-50
  • crm-auth/src/main/java/com/crm/auth/AuthApplication.java:1-50

五、Docker容器化部署(新增)

  • 镜像构建
    • 使用多阶段构建减小镜像体积
    • 第一阶段:Maven编译打包(基于maven:3.9-eclipse-temurin-17)
    • 第二阶段:运行环境(基于eclipse-temurin:17-jre + LibreOffice headless)
    • 包含LibreOffice headless用于Office文档缩略图生成
    • 预装中文字体支持CJK渲染
  • 容器编排
    • docker-compose.yml定义完整服务栈
    • 自动拉起MySQL、Redis、MinIO和CRM应用
    • 健康检查确保服务依赖正确启动顺序
    • 数据卷持久化存储
  • 环境变量配置
    • 通过环境变量注入中间件连接信息
    • SPRING_PROFILES_ACTIVE=verify激活验证环境
    • 数据库、Redis、MinIO连接参数配置
  • 构建优化
    • .dockerignore排除不必要的文件
    • Maven依赖缓存利用Docker层缓存
    • 阿里云Maven镜像加速依赖下载

新增 Docker部署架构图:

graph TB
subgraph "Docker Compose 服务栈"
MYSQL["MySQL 8.4.8<br/>端口: 13306"]
REDIS["Redis 7 Alpine<br/>端口: 6379"]
MINIO["MinIO<br/>控制台: 9001"]
MINIO_INIT["MinIO初始化<br/>创建bucket"]
CRM_APP["CRM应用<br/>端口: 8080<br/>verify profile"]
end
MYSQL -.健康检查.-> CRM_APP
REDIS -.健康检查.-> CRM_APP
MINIO -.健康检查.-> MINIO_INIT
MINIO_INIT -.健康检查.-> CRM_APP
subgraph "数据持久化"
MYSQL_DATA["mysql-data"]
REDIS_DATA["redis-data"]
MINIO_DATA["minio-data"]
end
MYSQL --- MYSQL_DATA
REDIS --- REDIS_DATA
MINIO --- MINIO_DATA

图表来源

  • docker-compose.yml:1-100
  • Dockerfile:1-27

章节来源

  • Dockerfile:1-27
  • docker-compose.yml:1-100
  • .dockerignore:1-14
  • settings.xml:1-14

六、Kubernetes集群部署

  • 部署清单
    • Deployment:副本数、滚动更新、探针
    • Service:ClusterIP/NodePort/LoadBalancer
    • ConfigMap/Secret:配置与敏感信息
    • Ingress:域名、TLS、路由
  • 扩缩容与弹性
    • HPA基于CPU/内存或自定义指标
  • 存储与持久化
    • 日志落盘与远端收集
    • 文件服务对接MinIO PVC或外部存储

七、传统服务器部署

  • 进程管理
    • 使用systemd或supervisor管理服务生命周期
  • 启动脚本
    • 设置JVM参数、环境变量、工作目录
  • 日志轮转
    • logrotate配置,保留策略与压缩

八、生产环境优化配置

  • JVM调优
    • 堆大小、GC选择、元空间、线程栈大小
  • 连接池与线程池
    • 数据库连接池、Redis连接池、HTTP客户端线程池
  • 缓存与限流
    • Redis缓存策略、热点Key保护、接口限流
  • 文件服务优化
    • MinIO节点横向扩展、分片大小与并发限制

九、监控告警设置

  • 指标采集
    • JVM、GC、线程、连接池、QPS、延迟
    • 中间件指标(MySQL、Redis、MinIO)
  • 告警规则
    • 错误率、延迟P99、资源水位、磁盘空间
  • 可视化
    • 仪表盘与告警通知渠道

十、日志收集方案

  • 应用日志
    • 结构化输出、TraceId贯穿、分级输出
  • 集中式收集
    • Filebeat/Fluent Bit采集 → Kafka/消息队列 → 存储与检索
  • 日志策略
    • 保留周期、脱敏、采样与压缩

十一、备份恢复策略

  • 数据库备份
    • 全量+增量、异地备份、加密与校验
  • 文件备份
    • MinIO快照、跨地域复制
  • 恢复演练
    • 定期演练恢复流程,验证RTO/RPO

十二、负载均衡、SSL证书与域名绑定

  • 负载均衡
    • Nginx/Ingress分发、健康检查、权重与灰度
  • SSL证书
    • 证书申请、自动续期、HTTPS强制
  • 域名绑定
    • DNS解析、CDN加速、WAF防护

十三、Docker部署快速开始(新增)

  • 前置条件
    • Docker Engine ≥ 20.10
    • Docker Compose ≥ 2.x
    • 至少6GB可用磁盘空间(LibreOffice镜像约1.5GB)
    • 网络连接(拉取Maven依赖和Docker镜像)
  • 一键启动
    # 首次构建并启动所有服务
    docker compose up -d --build
    
    # 查看应用日志
    docker compose logs -f crm-app
    
    # 停止并清理所有资源
    docker compose down -v
    
  • 服务访问
  • 验证环境特性
    • verify profile启用了调试token接口
    • 支持免鉴权访问缩略图接口
    • 自动创建数据库表和MinIO bucket

章节来源

  • docker-compose.yml:1-100
  • docs/deploy-verify.md:1-168
  • crm-app/src/main/resources/application-verify.yml:1-13