news 2026/6/22 15:56:30

从踩坑到成功部署:我的RuoYi-flowable工作流在Docker环境下的完整避坑实录

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从踩坑到成功部署:我的RuoYi-flowable工作流在Docker环境下的完整避坑实录

从踩坑到成功部署:我的RuoYi-flowable工作流在Docker环境下的完整避坑实录

1. 环境准备与架构解析

RuoYi-flowable作为基于Spring Boot和Vue的企业级工作流解决方案,其技术栈复杂度决定了部署过程需要精细的环境配置。在开始之前,我们需要明确几个关键点:

  • 技术栈依赖:前端Node.js 12.x(高版本会导致sass编译失败)、后端Java 11、数据库MySQL 8.x
  • 容器化要求:Docker 20.10+、Docker Compose 1.29+
  • 网络拓扑:需要确保Nginx、Java应用和Redis之间的容器网络互通

典型的环境矩阵配置如下:

组件推荐版本关键配置项注意事项
Node.js12.22.12npm config set registry必须锁定版本避免sass问题
JavaOpenJDK 11JAVA_OPTS内存参数需移除prism.paint依赖
MySQL8.0.28+lower_case_table_names=1表名大小写敏感设置
Redis6.2.1最大内存限制建议配置持久化

重要提示:所有版本号必须严格匹配,这是后续所有操作的基础。我曾因使用Node 16导致整个构建过程失败,回溯排查浪费了3个小时。

2. 前端构建的深坑与解决方案

前端模块的构建是整个过程中最容易出问题的环节,主要痛点集中在:

  1. Node版本陷阱
# 错误示范(会导致sass编译失败) FROM node:16 as build-front # 正确写法(必须锁定12.x版本) FROM node:12 as build-front
  1. 依赖安装优化
# 使用淘宝镜像加速(节省约70%时间) RUN npm install --registry=https://registry.npm.taobao.org
  1. 环境变量配置
// ruoyi-ui/.env.production 关键配置 VUE_APP_BASE_API = '/prod-api' # 必须与Nginx反向代理路径一致

我曾遇到构建时内存溢出的问题,通过以下Docker参数解决:

docker build --memory 4g --cpuset-cpus 0-2 -t your-image .

3. 后端Java的依赖冲突处理

后端构建的核心难点在于处理已废弃的JDK内部API引用。具体解决方案:

  1. 修改流程图画布实现
// 原始问题文件位置: // ruoyi-flowable/src/main/java/com/ruoyi/flowable/config/MyDefaultProcessDiagramCanvas.java // 解决方案:注释掉废弃的导入 // import com.sun.prism.paint.Color; # 这行必须注释
  1. Maven构建优化
# 推荐构建命令(跳过测试且启用并行编译) mvn clean package -Dmaven.test.skip=true -T 1C
  1. JVM参数调整
# 在Dockerfile中添加: ENV JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m"

4. Docker多阶段构建实战

合理的镜像分层可以显著减小最终镜像体积(从1.2GB优化到580MB):

# 阶段1:前端构建 FROM node:12 as build-front WORKDIR /app COPY ruoyi-ui/package.json . RUN npm install COPY ruoyi-ui/. . RUN npm run build:prod # 阶段2:后端构建 FROM maven:3.6.0-jdk-11 as build-back COPY . . RUN mvn package -DskipTests # 阶段3:最终镜像 FROM openjdk:11-jre-slim COPY --from=build-front /app/dist/ /usr/share/nginx/html COPY --from=build-back /ruoyi-admin/target/ruoyi-admin.jar /app.jar

关键优化点:

  • 使用alpine基础镜像
  • 清理构建缓存
  • 合并RUN指令减少层数

5. 容器编排与进程管理

使用Supervisor管理多进程是保证服务稳定性的关键。典型配置:

[program:nginx] command=nginx -g "daemon off;" autorestart=true [program:java] command=java -jar /app.jar directory=/app environment=JAVA_OPTS="-Xmx1g"

对应的docker-compose.yml网络配置:

services: flow-app: networks: - backend-net flow-mysql: networks: - backend-net flow-redis: networks: - backend-net networks: backend-net: driver: bridge

6. 部署后的验证与调优

成功启动后需要进行以下验证:

  1. 服务健康检查
# 检查容器状态 docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" # 检查日志输出 docker logs -f flow-app
  1. 性能调优参数
# application-prod.yml 关键配置 spring: datasource: druid: initial-size: 5 max-active: 20 redis: timeout: 3000
  1. 常见问题处理
  • 数据库连接失败:检查MySQL权限和网络策略
  • 验证码不显示:确认Redis连接配置
  • 流程设计器加载异常:检查Nginx静态资源路径

7. 生产环境增强建议

对于正式环境部署,建议额外配置:

  1. 日志收集方案
# 示例:将日志挂载到宿主机 volumes: - ./logs:/app/logs
  1. 监控集成
# Prometheus监控示例 management: endpoints: web: exposure: include: health,info,metrics metrics: export: prometheus: enabled: true
  1. 备份策略
# 数据库每日备份脚本 docker exec flow-mysql sh -c 'exec mysqldump --all-databases' > backup.sql

整个部署过程中最耗时的环节是依赖下载和镜像构建。通过搭建本地Nexus镜像仓库,我将构建时间从45分钟缩短到12分钟。另一个实用技巧是在Dockerfile中使用--no-cache参数彻底重建镜像,这解决了90%的依赖缓存导致的问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/22 15:56:08

[量化]《浮点数比较的艺术:从内存布局到极致性能优化》

# 浮点数比较的艺术:从内存布局到极致性能优化> 你是否遇到过 0.1 0.2 ! 0.3 的困惑?本文从 IEEE 754 浮点数内存表示出发,深入分析浮点数比较的精度陷阱,并给出在不同场景下的高性能比较技巧——包括位运算、无分支代码、SIM…

作者头像 李华
网站建设 2026/6/13 21:44:19

用动态规划解决小店库存决策:97行Python实现自行车订货优化

1. 项目概述:用不到100行Python代码,把“每天该进多少辆自行车”变成一个可计算、可复现、可验证的数学决策问题你不是在经营一家抽象的“零售企业”,你是在管理一家真实的社区自行车店。每天下午6点,你站在货架前,看着…

作者头像 李华
网站建设 2026/6/13 17:37:59

如何用Citra模拟器在PC上完美运行任天堂3DS游戏:终极完整教程

如何用Citra模拟器在PC上完美运行任天堂3DS游戏:终极完整教程 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/gh_mirrors/cit/citra 想要在电脑上重温《精灵宝可梦》、《火焰纹章》或《动物之森》等经典3DS游戏吗&#xff1…

作者头像 李华
网站建设 2026/6/14 6:23:04

机器学习生产化落地:模型服务化与可观测性实战指南

1. 这不是“把模型跑起来”就完事的活儿——为什么第4部分专讲生产落地“From Notebook to Production: Running ML in the Real World (Part 4)”这个标题里藏着一个被太多人轻描淡写、却让无数团队在临门一脚时摔得最狠的真相:Notebook里准确率98%的模型&#xff…

作者头像 李华