从踩坑到成功部署我的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.28lower_case_table_names1表名大小写敏感设置Redis6.2.1最大内存限制建议配置持久化重要提示所有版本号必须严格匹配这是后续所有操作的基础。我曾因使用Node 16导致整个构建过程失败回溯排查浪费了3个小时。2. 前端构建的深坑与解决方案前端模块的构建是整个过程中最容易出问题的环节主要痛点集中在Node版本陷阱# 错误示范会导致sass编译失败 FROM node:16 as build-front # 正确写法必须锁定12.x版本 FROM node:12 as build-front依赖安装优化# 使用淘宝镜像加速节省约70%时间 RUN npm install --registryhttps://registry.npm.taobao.org环境变量配置// 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引用。具体解决方案修改流程图画布实现// 原始问题文件位置 // ruoyi-flowable/src/main/java/com/ruoyi/flowable/config/MyDefaultProcessDiagramCanvas.java // 解决方案注释掉废弃的导入 // import com.sun.prism.paint.Color; # 这行必须注释Maven构建优化# 推荐构建命令跳过测试且启用并行编译 mvn clean package -Dmaven.test.skiptrue -T 1CJVM参数调整# 在Dockerfile中添加 ENV JAVA_OPTS-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize512m4. 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 --frombuild-front /app/dist/ /usr/share/nginx/html COPY --frombuild-back /ruoyi-admin/target/ruoyi-admin.jar /app.jar关键优化点使用alpine基础镜像清理构建缓存合并RUN指令减少层数5. 容器编排与进程管理使用Supervisor管理多进程是保证服务稳定性的关键。典型配置[program:nginx] commandnginx -g daemon off; autorestarttrue [program:java] commandjava -jar /app.jar directory/app environmentJAVA_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: bridge6. 部署后的验证与调优成功启动后需要进行以下验证服务健康检查# 检查容器状态 docker ps --format table {{.Names}}\t{{.Status}}\t{{.Ports}} # 检查日志输出 docker logs -f flow-app性能调优参数# application-prod.yml 关键配置 spring: datasource: druid: initial-size: 5 max-active: 20 redis: timeout: 3000常见问题处理数据库连接失败检查MySQL权限和网络策略验证码不显示确认Redis连接配置流程设计器加载异常检查Nginx静态资源路径7. 生产环境增强建议对于正式环境部署建议额外配置日志收集方案# 示例将日志挂载到宿主机 volumes: - ./logs:/app/logs监控集成# Prometheus监控示例 management: endpoints: web: exposure: include: health,info,metrics metrics: export: prometheus: enabled: true备份策略# 数据库每日备份脚本 docker exec flow-mysql sh -c exec mysqldump --all-databases backup.sql整个部署过程中最耗时的环节是依赖下载和镜像构建。通过搭建本地Nexus镜像仓库我将构建时间从45分钟缩短到12分钟。另一个实用技巧是在Dockerfile中使用--no-cache参数彻底重建镜像这解决了90%的依赖缓存导致的问题。
从踩坑到成功部署:我的RuoYi-flowable工作流在Docker环境下的完整避坑实录
发布时间:2026/6/8 6:27:48
从踩坑到成功部署我的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.28lower_case_table_names1表名大小写敏感设置Redis6.2.1最大内存限制建议配置持久化重要提示所有版本号必须严格匹配这是后续所有操作的基础。我曾因使用Node 16导致整个构建过程失败回溯排查浪费了3个小时。2. 前端构建的深坑与解决方案前端模块的构建是整个过程中最容易出问题的环节主要痛点集中在Node版本陷阱# 错误示范会导致sass编译失败 FROM node:16 as build-front # 正确写法必须锁定12.x版本 FROM node:12 as build-front依赖安装优化# 使用淘宝镜像加速节省约70%时间 RUN npm install --registryhttps://registry.npm.taobao.org环境变量配置// 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引用。具体解决方案修改流程图画布实现// 原始问题文件位置 // ruoyi-flowable/src/main/java/com/ruoyi/flowable/config/MyDefaultProcessDiagramCanvas.java // 解决方案注释掉废弃的导入 // import com.sun.prism.paint.Color; # 这行必须注释Maven构建优化# 推荐构建命令跳过测试且启用并行编译 mvn clean package -Dmaven.test.skiptrue -T 1CJVM参数调整# 在Dockerfile中添加 ENV JAVA_OPTS-Xms1024m -Xmx2048m -XX:MaxMetaspaceSize512m4. 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 --frombuild-front /app/dist/ /usr/share/nginx/html COPY --frombuild-back /ruoyi-admin/target/ruoyi-admin.jar /app.jar关键优化点使用alpine基础镜像清理构建缓存合并RUN指令减少层数5. 容器编排与进程管理使用Supervisor管理多进程是保证服务稳定性的关键。典型配置[program:nginx] commandnginx -g daemon off; autorestarttrue [program:java] commandjava -jar /app.jar directory/app environmentJAVA_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: bridge6. 部署后的验证与调优成功启动后需要进行以下验证服务健康检查# 检查容器状态 docker ps --format table {{.Names}}\t{{.Status}}\t{{.Ports}} # 检查日志输出 docker logs -f flow-app性能调优参数# application-prod.yml 关键配置 spring: datasource: druid: initial-size: 5 max-active: 20 redis: timeout: 3000常见问题处理数据库连接失败检查MySQL权限和网络策略验证码不显示确认Redis连接配置流程设计器加载异常检查Nginx静态资源路径7. 生产环境增强建议对于正式环境部署建议额外配置日志收集方案# 示例将日志挂载到宿主机 volumes: - ./logs:/app/logs监控集成# Prometheus监控示例 management: endpoints: web: exposure: include: health,info,metrics metrics: export: prometheus: enabled: true备份策略# 数据库每日备份脚本 docker exec flow-mysql sh -c exec mysqldump --all-databases backup.sql整个部署过程中最耗时的环节是依赖下载和镜像构建。通过搭建本地Nexus镜像仓库我将构建时间从45分钟缩短到12分钟。另一个实用技巧是在Dockerfile中使用--no-cache参数彻底重建镜像这解决了90%的依赖缓存导致的问题。