当前位置: 首页 > news >正文

告别手动编译!用Docker Compose一键拉起RuoYi-flowable+MySQL+Redis全家桶

现代化微服务开发环境:基于Docker Compose的RuoYi-flowable全栈解决方案

在当今快节奏的软件开发领域,快速搭建稳定、可复用的开发环境已成为提升团队效率的关键。传统手动部署方式不仅耗时费力,还容易因环境差异导致"在我机器上能运行"的经典问题。本文将介绍如何利用Docker Compose技术,一键部署包含RuoYi-flowable工作流系统、MySQL数据库和Redis缓存的全栈开发环境,实现从零到可用的分钟级搭建。

1. 技术栈全景解析

RuoYi-flowable是基于流行开源框架组合构建的企业级工作流解决方案,其技术栈设计体现了现代Web应用的典型分层架构:

前端技术组合

  • Vue.js 2.x:轻量级渐进式前端框架
  • Element UI:企业级UI组件库
  • Axios:Promise-based HTTP客户端

后端技术组合

  • Spring Boot 2.x:快速应用开发框架
  • Spring Security:认证与授权解决方案
  • Flowable 6.5:轻量级业务流程引擎
  • MyBatis:持久层框架
  • Redis:高性能缓存数据库

基础设施层

  • Docker:容器化运行时环境
  • Docker Compose:多容器编排工具
  • MySQL 8:关系型数据库
  • Nginx:Web服务器与反向代理

这种架构设计使得系统既保持了Spring生态的稳定性,又通过Flowable实现了复杂的业务流程管理能力。而Docker技术的引入,则彻底解决了环境一致性问题。

2. 环境准备与配置

2.1 系统要求

在开始部署前,请确保开发机满足以下基本要求:

组件最低要求推荐配置
操作系统Windows 10/WSL2, macOS 10.15+, Linux kernel 4.x+Linux kernel 5.x+
Docker引擎20.10.0+23.0.0+
Docker Compose1.29.0+2.17.0+
内存4GB8GB+
磁盘空间10GB可用20GB+ SSD

提示:Windows用户建议使用WSL2后端运行Docker,可获得接近原生的性能体验

2.2 项目结构说明

下载的部署包包含以下核心文件:

RuoYi-flowable/ ├── docker-compose.yaml # 多容器编排定义文件 ├── .env # 环境变量配置文件 ├── sql/ # 数据库初始化脚本目录 │ ├── quartz.sql # 定时任务表结构 │ ├── ry_20230210.sql # 业务数据表结构 │ └── ry_config.sql # 系统配置数据 ├── nginx.conf # Nginx服务器配置 └── supervisord.conf # 进程管理配置

这种结构设计遵循了"配置即代码"的理念,所有环境定义都可以通过版本控制系统进行管理。

3. Docker Compose深度解析

3.1 服务编排设计

docker-compose.yaml文件定义了三个核心服务:

version: '3.8' services: flow-app: image: wbsu2003/flowable:v1 environment: - SPRING_DATASOURCE_URL=${SPRING_DATASOURCE_URL} - SPRING_REDIS_HOST=${REDIS_HOST} ports: - "12880:80" depends_on: - flow-mysql - flow-redis flow-mysql: image: mysql:8 environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} volumes: - mysql_data:/var/lib/mysql - ./sql:/docker-entrypoint-initdb.d flow-redis: image: redis:6.2 volumes: - redis_data:/data volumes: mysql_data: redis_data:

这种设计实现了:

  • 服务隔离:每个组件运行在独立容器中
  • 持久化存储:数据库数据通过volume持久化
  • 依赖管理:应用服务等待数据库就绪后才启动

3.2 环境变量配置

.env文件采用KEY=VALUE格式定义环境变量:

# MySQL配置 MYSQL_ROOT_PASSWORD=flowable123 MYSQL_DATABASE=flowable # Redis配置 REDIS_HOST=flow-redis REDIS_PORT=6379 # 应用配置 SPRING_DATASOURCE_URL=jdbc:mysql://flow-mysql:3306/flowable?useSSL=false

环境变量的使用使得配置与代码分离,可以轻松适应不同部署环境而无需修改容器镜像。

4. 系统部署与验证

4.1 一键启动命令

在包含docker-compose.yaml的目录中执行:

# 启动所有服务(后台模式) docker-compose up -d # 查看服务状态 docker-compose ps # 查看应用日志 docker-compose logs -f flow-app

系统启动后会自动执行以下流程:

  1. 拉取所需的Docker镜像(首次运行)
  2. 启动MySQL容器并初始化数据库
  3. 启动Redis容器
  4. 启动应用容器并连接数据库

4.2 系统访问与验证

服务启动完成后,通过浏览器访问:

http://localhost:12880

使用默认凭证登录:

  • 用户名:admin
  • 密码:admin123

成功登录后,您将看到RuoYi-flowable的主控制台,可以开始工作流的设计与管理。

注意:首次访问时系统可能仍在初始化,若遇到连接问题请稍后重试或检查容器日志

5. 高级配置与优化

5.1 性能调优建议

对于生产环境部署,建议调整以下参数:

MySQL配置优化

[mysqld] innodb_buffer_pool_size=1G innodb_log_file_size=256M max_connections=200

JVM参数调整

# 在docker-compose.yaml中为flow-app服务添加 environment: - JAVA_OPTS=-Xms1g -Xmx2g -XX:+UseG1GC

5.2 自定义工作流设计

RuoYi-flowable内置了Flowable Modeler,可通过以下步骤设计业务流程:

  1. 登录系统后进入"工作流"->"模型管理"
  2. 点击"新建模型"创建BPMN流程图
  3. 使用拖拽方式设计流程节点
  4. 设置各节点的审批人与表单
  5. 部署模型到流程引擎

典型请假审批流程示例:

<bpmn2:process id="leaveProcess" name="请假流程"> <bpmn2:startEvent id="startEvent"/> <bpmn2:userTask id="deptLeaderAudit" name="部门领导审批"/> <bpmn2:exclusiveGateway id="exclusiveGateway"/> <bpmn2:userTask id="hrAudit" name="HR备案"/> <bpmn2:endEvent id="endEvent"/> </bpmn2:process>

6. 日常运维管理

6.1 常用运维命令

# 停止所有服务(保留数据) docker-compose stop # 重启特定服务 docker-compose restart flow-app # 完全移除所有容器和网络(保留数据卷) docker-compose down # 完全清理(包括数据卷) docker-compose down -v # 备份MySQL数据 docker exec flow-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > backup.sql

6.2 日志收集与分析

建议配置集中式日志收集:

# 查看实时日志 docker-compose logs -f # 导出日志到文件 docker-compose logs > ruoyi-flowable.log # 使用ELK栈收集日志(docker-compose扩展) version: '3.8' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.0 logstash: image: docker.elastic.co/logstash/logstash:7.17.0 kibana: image: docker.elastic.co/kibana/kibana:7.17.0

7. 故障排查指南

7.1 常见问题解决

应用启动失败

  1. 检查数据库连接:
    docker exec -it flow-mysql mysql -uroot -p
  2. 验证Redis连通性:
    docker exec -it flow-redis redis-cli ping

流程设计器无法访问

  1. 检查Nginx配置:
    docker exec -it flow-app cat /etc/nginx/nginx.conf
  2. 重启前端服务:
    docker exec -it flow-app nginx -s reload

7.2 性能监控方案

建议部署监控系统跟踪关键指标:

# 使用cAdvisor监控容器资源 docker run -d \ --name=cadvisor \ --volume=/:/rootfs:ro \ --volume=/var/run:/var/run:ro \ --volume=/sys:/sys:ro \ --volume=/var/lib/docker/:/var/lib/docker:ro \ --publish=8080:8080 \ --detach=true \ gcr.io/cadvisor/cadvisor:v0.47.0

访问http://localhost:8080即可查看容器级别的CPU、内存、网络等监控数据。

8. 扩展与集成

8.1 与企业现有系统集成

RuoYi-flowable提供多种集成方式:

REST API集成

// Spring Boot示例代码 @RestController @RequestMapping("/api/workflow") public class WorkflowController { @Autowired private RuntimeService runtimeService; @PostMapping("/start") public String startProcess(@RequestBody Map<String, Object> variables) { return runtimeService.startProcessInstanceByKey( "leaveProcess", variables).getId(); } }

消息队列集成(以RabbitMQ为例):

# 在docker-compose.yaml中添加 services: rabbitmq: image: rabbitmq:3-management ports: - "15672:15672"

8.2 自定义开发扩展

如需二次开发,建议采用以下工作流:

  1. 克隆源码仓库:
    git clone https://gitee.com/tony2y/RuoYi-flowable.git
  2. 修改代码后重新构建镜像:
    docker build -t custom/flowable:latest .
  3. 更新docker-compose.yaml中的镜像引用
  4. 重新部署服务

这种基于容器化的开发模式确保了开发、测试、生产环境的高度一致性。

http://www.cnnetsun.cn/news/2821274.html

相关文章:

  • 如何快速配置GlosSI:3步实现全局Steam输入和系统级控制器支持
  • 用Python+OpenCV玩转Apriltag:从打印到姿态估计的保姆级实战(附完整代码)
  • Plotly实现印度数字体系(Lac/Cr)数据可视化
  • Fortnite-External-Cheat-2026常见问题解答:从安装失败到功能失效的全面解决方案
  • PyTorch超参优化实战:用Optuna实现高效、可复现的贝叶斯搜索
  • Kallax迁移系统完全指南:数据库版本控制的正确姿势
  • 机器学习模型生产化部署:Kubernetes+ONNX服务化实战
  • Unity游戏翻译终极指南:XUnity.AutoTranslator完全使用教程
  • 三分钟完成黑苹果配置:OpCore-Simplify让PC变Mac不再是梦
  • VC6平台下可直接运行的算符优先法C语言计算器工程包(含源码、编译结果与调试文件)
  • OpenCore Legacy Patcher终极指南:5步让旧Mac显卡重获新生并优化系统性能
  • Data-Centric AI:数据驱动的AI工程化范式转型
  • 别只当查看器用!Meshlab隐藏的‘清洁与修复’滤镜实战:处理3D打印坏模型
  • MGF概率放大镜:用矩生成函数解析数据分布本质
  • PT玩家进阶:如何用IYUU Plus实现qBittorrent到Transmission的‘无感’转种与批量辅种
  • 千问 LeetCode 3077. K 个不相交子数组的最大能量值 Go实现
  • ADS2017链路预算进阶:手把手教你搞定多端口元件(如双工器、耦合器)的增益与噪声系数仿真
  • 新能源车企的零部件技术参数详解(17):转向系统技术参数
  • 告别复杂矩阵求逆:用Python手把手实现LMMSE信道估计(附QPSK/16QAM代码)
  • Android启动安全实战:手把手教你用avbtool给dtbo.img镜像签名(附完整命令)
  • 别再傻傻分不清!C/C++里int、long、long long在不同平台到底占几个字节?
  • Claude Code 100个真实案例 - 用AI自动生成Swagger API文档(告别手写文档的痛苦)
  • 山东大学软件学院项目实训进展记录8
  • AI基建狂潮下的财务危机:从Oracle裁员看技术转型的资产负债表真相
  • 计算机网络(3) -- socket网络通信
  • 手把手教你用C语言实现SM4国密算法(仅需stdio.h,附完整可运行代码)
  • 三、Vue3 模板语法
  • 【Java 入门 Day10】多态|java整活天花板,一个父类变量拿捏全子类,抽象玩法全解析开篇前言(下)
  • 保姆级避坑指南:SAP SPRO中给公司代码分配采购组织,新手最容易搞混的几点
  • 创维E900V21C救砖记:从TTL跑码异常到飞线修复,手把手教你排查硬件短路