上周有网友留言需要工作流相关的系统,今天介绍的这个就支持自定义的表单,可能未必是他想要的,但也许有其他人需要呢?反正都已经折腾完了😊
老苏已经尽量简化了安装,你只要下载一个 zip
文件,上传到群晖并解压,再执行一条命令就可以完成全部的安装,中途不需要修改任何东西,应该够简单了吧😊
什么是 RuoYi-flowable ?
RuoYi-flowable
是基 RuoYi-vue 4.x
+ flowable 6.5
开发的工作流管理软件。
- 前端采用
Vue
、Element UI
。
- 后端采用
Spring Boot
、Spring Security
、Redis
& Jwt
。
- 权限认证使用
Jwt
,支持多终端认证系统。
- 支持加载动态权限菜单,多方式轻松权限控制。
- 高效率开发,使用代码生成器可以一键生成前后端代码。
官方提供了演示地址:http://139.155.16.243/
什么是 RuoYi-Vue ?
RuoYi-Vue
是基于 SpringBoot
、Spring Security
、Jwt
、Vue
的前后端分离的后台管理系统。
感觉国内有不少系统是基于这套框架二次开发的
什么是 Flowable ?
Flowable
是面向开发人员、系统管理员和业务用户的紧凑高效的工作流和业务流程管理 ( BPM
) 平台。是用 Java
编写的闪电般快速、久经考验的 BPMN 2
流程引擎。
构建镜像
如果你不想自己构建,可以跳过,直接阅读下一章节
这个镜像在构建时遇到几个坑,简单做个记录:
前端用到了 node-sass
、 node-gyp
之类的,node
版本高于 12
会编不过
后端用到了已经删除的 com.sun.prism.paint
,会导致 ruoyi-flowable
编译失败,需修改 /root/RuoYi-flowable/ruoyi-flowable/src/main/java/com/ruoyi/flowable/config/MyDefaultProcessDiagramCanvas.java
,将 import com.sun.prism.paint.Color;
注释掉
不然编译的时候 ruoyi-flowable
模块会 build
失败
1 2 3 4 5 6 7 8
| [INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ ruoyi-flowable --- [INFO] Changes detected - recompiling the module! [INFO] Compiling 38 source files to /ruoyi-flowable/target/classes [INFO] ------------------------------------------------------------- [ERROR] COMPILATION ERROR : [INFO] ------------------------------------------------------------- [ERROR] /ruoyi-flowable/src/main/java/com/ruoyi/flowable/config/MyDefaultProcessDiagramCanvas.java:[3,27] package com.sun.prism.paint does not exist [INFO] 1 error
|
编译成功是全部都显示 SUCCESS
至于注释后会有什么影响,老苏毕竟不是程序员,也没有太多的精力去测试、验证,所以没法确定,毕竟只是体验用的,你非要放生产环境我也没办法🤷♀️🤷♀️🤷♀️
如果正好您是 Java
程序员,请指正一下😁
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
FROM node:12 as build-front LABEL maintainer=laosu<wbsu2003@gmail.com>
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.0-jdk-11-slim AS build_end COPY . ./ RUN mvn clean package -Dmaven.test.skip=true
FROM openjdk:11-jre-slim RUN sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list \ && apt-get clean \ && apt-get update \ && apt-get install -y supervisor nginx
COPY --from=build_end ./nginx.conf /etc/nginx/nginx.conf
COPY --from=build_end ./supervisord.conf /etc/supervisord.conf
COPY --from=build-front /app/dist/ /usr/share/nginx/html
COPY --from=build_end /ruoyi-admin/target/ruoyi-admin.jar /usr/local/lib/ruoyi-admin.jar
EXPOSE 80
ENTRYPOINT ["supervisord","-c","/etc/supervisord.conf"]
|
nginx
设置文件 nginx.conf
用的是 RuoYi
官方的,老苏就改了 root
的路径
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
| worker_processes 1;
events { worker_connections 1024; }
http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65;
server { listen 80; server_name localhost; charset utf-8;
location / { root /usr/share/nginx/html; try_files $uri $uri/ /index.html; index index.html index.htm; } location /prod-api/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header REMOTE-HOST $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://localhost:8080/; }
error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
|
supervisord.conf
文件是新增用来控制进程的,前端是运行在 nginx
上的静态页面,后端 ruoyi-admin.jar
基于 jar
包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| [include] files = /etc/supervisor/conf.d/*.conf
[program:frontend] priority=2 command=nginx -g "daemon off;" autostart=true autorestart=true startretries=3 startsecs=1 user=root
[program:backend] priority=1 directory=/usr/local/lib/ command=java -jar ruoyi-admin.jar autostart=true autorestart=true startretries=3 startsecs=1 user=root [supervisord] nodaemon=true logfile=/tmp/supervisord.log pidfile=/tmp/supervisord.pid loglevel=debug logfile_maxbytes=10MB
[supervisorctl]
|
docker-compose.yaml
是用来一键启动的,和构建无关
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| version: '3.6' services: flow-app: container_name: flow-app environment: - SPRING_DATASOURCE_DRUID_MASTER_URL=$SPRING_DATASOURCE_URL - SPRING_DATASOURCE_DRUID_MASTER_USERNAME=$MYSQL_ROOT_NAME - SPRING_DATASOURCE_DRUID_MASTER_PASSWORD=$MYSQL_ROOT_PASSWORD - SPRING_REDIS_DATABASE=0 - SPRING_REDIS_HOST=$REDIS_HOST - SPRING_REDIS_PORT=$REDIS_PORT - SPRING_REDIS_PASSWORD=$REDIS_PASSWORD - RUOYI_PROFILE=/home/ruoyi/uploadPath image: "wbsu2003/flowable:v1" ports: - 12880:80 restart: always
flow-redis: container_name: flow-redis image: redis:6.2.1 ports: - 12888:6379 volumes: - redis_data:/data
flow-mysql: container_name: flow-mysql image: mysql:8 restart: always environment: - MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD - MYSQL_DATABASE=$MYSQL_DATABASE ports: - 12806:3306 volumes: - mysql_data:/var/lib/mysql - ./sql:/docker-entrypoint-initdb.d:ro command: --default-authentication-plugin=mysql_native_password --lower_case_table_names=1
volumes: mysql_data: nginx_log: redis_data:
|
.env
文件只配置了 mysql
和 redis
1 2 3 4 5 6 7
| MYSQL_DATABASE=flowable MYSQL_ROOT_NAME=root MYSQL_ROOT_PASSWORD=flowable SPRING_DATASOURCE_URL=jdbc:p6spy:mysql://192.168.0.197:12806/flowable?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=false&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true REDIS_HOST=flow-redis REDIS_PASSWORD= REDIS_PORT=6379
|
构建镜像和容器运行的基本命令如下👇
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| git clone https://gitee.com/tony2y/RuoYi-flowable.git
cd RuoYi-flowable
docker build -t wbsu2003/flowable:v1 .
docker-compose up -d
docker-compose stop
docker-compose restart
docker-compose down
|
安装运行
- 在群晖
docker
目录中新建子目录 flowable
- 下载 https://github.com/wbsu2003/Dockerfile/raw/main/RuoYi-flowable/flowable.zip文件,如果
github
抽风了,可以从镜像站点下载 https://hub.fastgit.org/wbsu2003/Dockerfile/raw/main/RuoYi-flowable/flowable.zip
- 将
flowable.zip
上传到 flowable
目录再解压
尽量不要在电脑上先解压再上传,因为 .env
默认是看不到的,需要打开显示隐藏文件(Mac
上是 Cmd + Shift + .
),要避免拷贝文件丢失导致一键启动出错
__MACOSX
和 flowable.zip
可以删掉,不删也无所谓的
老苏尽量将端口改成了一般软件可能不会用到的端口,这样大家就不需要处理 docker-compose.yaml
文件了,而 .env
里全部用了容器名称,所以也不需要进行修改
老苏一般会把 .env
先重命名为 .env.txt
,编辑完之后再改回 .env
接下来就可以用 SSH
客户端登录到群晖,在 flowable
目录中执行一键启动
老苏常用的SSH
客户端主要是 Finalshell
和 PuTTY
1 2 3 4 5
| cd /volume2/docker/flowable
docker-compose up -d
|
第一次执行会有拉取镜像的动作
如果你最终看到 3
个容器都是 done
,表示创建成功!
在 docker
容器中能看到👇下面 3
个容器正在运行,开始资源占用还是有点高的
flow-app
的日志中开始会看到👇下面的内容,表示服务已经开始启动了
但只有看到下面👇这个才表示服务启动成功了
只要容器不会停止,中间的报错信息可以不用理会
前后差不多用了 3
分多钟,启动成功后资源占用会下降
如果你没修改端口,在浏览器中输入 http://群晖IP:12880
,会先看到资源加载
接下来就能看到登录界面
默认的账号:tony,密码:123456,系统自动已经填好了
如果看到下面这种错误或者验证码不出来,说明服务还没完成正常启动,而日志中的错误应该是数据库尚未初始化完成
登录成功后的主界面
至于怎么使用,老苏没有头绪,只知道可以配置表单
也可以设计流程
建议去看官方的文档,或者直接去加作者的 QQ
群
参考文档
RuoYi-flowable: 基RuoYi-vue + flowable 6.5 的工作流管理 ~
地址:https://gitee.com/tony2y/RuoYi-flowable
flowable · 语雀
地址:https://www.yuque.com/u1024153/icipor
环境部署 | RuoYi
地址:http://doc.ruoyi.vip/ruoyi-vue/document/hjbs.html
关于java: package sun.misc does not exist问题的解决方案_CHINA_CNN的博客-CSDN博客
地址:https://blog.csdn.net/CHINA_CNN/article/details/108894471
Fatal Error: Unable to find package java.lang in classpath or bootclasspath - 代码先锋网
地址:https://www.codeleading.com/article/78565102295/