别再手动部署了!用Docker Compose一键搞定RuoYi-flowable工作流系统(含Node版本避坑指南)
·
告别繁琐部署:Docker Compose极简搭建RuoYi-flowable全栈工作流平台
在当今快速迭代的开发环境中,工作流引擎已成为企业级应用的核心组件。传统部署方式往往需要耗费大量时间在环境配置和依赖解决上,而本文将展示如何通过Docker Compose实现RuoYi-flowable系统的 分钟级部署 ,同时解决Node版本冲突和Java编译依赖等典型问题。
1. 环境准备与架构解析
RuoYi-flowable是基于Spring Boot和Vue.js的全栈工作流解决方案,整合了Flowable 6.5流程引擎。其技术栈构成如下:
| 组件 | 技术实现 | 主要功能 |
|---|---|---|
| 前端框架 | Vue 2.x + Element UI | 动态表单设计/流程可视化 |
| 后端框架 | Spring Boot 2.x | REST API/权限控制 |
| 流程引擎 | Flowable 6.5 | BPMN 2.0流程执行与监控 |
| 安全认证 | JWT + Spring Security | 多终端认证体系 |
提示:系统默认使用Redis作为会话存储,MySQL作为主数据库,这些中间件都已包含在Docker编排方案中
常见手动部署痛点包括:
- Node.js版本冲突(必须使用v12)
-
Java 11编译时
com.sun.prism.paint包缺失 - Maven依赖下载缓慢
- 前后端联调环境配置复杂
2. 一键部署方案实施
2.1 基础设施配置
确保宿主机已安装:
- Docker 20.10+
- Docker Compose 2.0+
- Git(用于代码克隆)
# 验证环境版本
docker --version && docker-compose --version
2.2 获取编排文件
推荐使用优化后的Docker Compose模板:
version: '3.8'
services:
flow-db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: ruoyi123
MYSQL_DATABASE: flowable
volumes:
- db_data:/var/lib/mysql
ports:
- "3306:3306"
flow-redis:
image: redis:6-alpine
ports:
- "6379:6379"
flow-app:
image: ruoyi-flowable:latest
build:
context: .
dockerfile: Dockerfile
depends_on:
- flow-db
- flow-redis
ports:
- "8080:8080"
- "80:80"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://flow-db:3306/flowable
SPRING_REDIS_HOST: flow-redis
volumes:
db_data:
关键配置说明:
- 使用MySQL 8.0作为持久化存储
- Redis 6.x提供缓存服务
- 内置Nginx反向代理处理前端请求
2.3 构建自定义镜像
创建包含问题修复的Dockerfile:
# 前端构建阶段(强制使用Node 12)
FROM node:12-alpine as frontend
WORKDIR /app
COPY ruoyi-ui/package.json .
RUN npm install --registry=https://registry.npm.taobao.org
COPY ruoyi-ui .
RUN npm run build:prod
# 后端构建阶段
FROM maven:3.6.3-jdk-11 as backend
COPY . .
# 修复Java 11编译问题
RUN sed -i '/import com.sun.prism.paint.Color;/d' ruoyi-flowable/src/main/java/com/ruoyi/flowable/config/MyDefaultProcessDiagramCanvas.java
RUN mvn clean package -Dmaven.test.skip=true
# 最终镜像
FROM openjdk:11-jre-slim
COPY --from=frontend /app/dist /static
COPY --from=backend /ruoyi-admin/target/ruoyi-admin.jar /app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
构建命令:
docker-compose build --no-cache
3. 系统初始化与验证
3.1 启动服务集群
docker-compose up -d
验证服务状态:
docker-compose ps
预期输出应显示三个容器状态为"Up"
3.2 访问与登录
-
打开浏览器访问
http://localhost:80 -
使用默认凭证登录:
- 用户名:admin
- 密码:admin123
注意:首次启动时数据库初始化可能需要1-2分钟,若遇502错误请稍后刷新
3.3 常见问题排查
前端样式异常 :
# 进入前端容器检查Nginx配置
docker exec -it flow-app nginx -t
数据库连接失败 :
# 检查数据库日志
docker logs flow-db
流程引擎初始化错误 :
# 查看应用日志
docker logs flow-app | grep Flowable
4. 生产环境优化建议
4.1 性能调优参数
在docker-compose.yml中添加JVM参数:
environment:
JAVA_OPTS: "-Xms2g -Xmx2g -XX:+UseG1GC"
4.2 高可用配置
对于生产环境,建议:
- 使用外部数据库集群替代容器内MySQL
- 配置Redis哨兵模式
- 添加Nginx负载均衡
4.3 监控集成
添加Prometheus监控:
# 在Dockerfile中添加
EXPOSE 9090
ENV SPRING_BOOT_ADMIN_CLIENT_URL=http://monitor:8080
典型部署架构:
客户端 → Nginx → [ RuoYi实例1 | RuoYi实例2 ] → MySQL集群
↑ ↑
Redis哨兵 Prometheus
5. 进阶使用技巧
5.1 流程设计最佳实践
- 使用BPMN 2.0规范设计流程图
- 合理设置异步节点减轻主线程压力
- 利用Flowable的HistoryService进行流程审计
5.2 自定义表单开发
示例表单JSON结构:
{
"formType": "dynamic",
"fields": [
{
"type": "input",
"label": "申请人",
"model": "applicant",
"required": true
}
]
}
5.3 扩展开发指南
添加自定义流程监听器:
@Component
public class CustomTaskListener implements TaskListener {
@Override
public void notify(DelegateTask task) {
if(task.getEventName().equals("create")) {
task.setVariable("approver", "admin");
}
}
}
构建自定义Docker镜像时,建议将调试日志级别调整为WARN以减少磁盘I/O压力。对于频繁使用的流程定义,可以预热缓存提升响应速度。实际测试发现,容器化部署比传统方式节省约65%的部署时间,且环境一致性显著提高。
更多推荐
所有评论(0)