现代化微服务开发环境:基于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 Compose 1.29.0+ 2.17.0+
内存 4GB 8GB+
磁盘空间 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. 重新部署服务

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

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐