前言

找一个好用的画图工具真心不容易,Activiti 工作流自带的 Web 版画图工具,外表挺华丽,其实使用起来各种拧巴;Eclipse 的 Activiti 画图插件,对于相对复杂的流程也是很不友好。

环境搭建

网上有许多详细的安装配置步骤,这里就不一一赘述,只列出相关版本。




Python bpm_Python bpm


项目截图


Python bpm_django + nginx_02


Python bpm_django + nginx_03


Python bpm_activiti bpmn 安装不上_04


Python bpm_Python bpm_05


功能模块

这是一个Python版本,Java版本功能已经基本开发完毕,需要进行功能迁移。

  • 用户登录
  • 流程列表(CURD)
  • 用户注册(待实现)
  • 游客访问在线作图,可实现在线导入导出,本地缓存

创建项目

切换到工作空间,执行以下命令:

1. django-admin.py startproject bpmn
最终目录结构,省略部分代码:
1. ├─bpmn
2. │ │ settings.py
3. │ │ urls.py
4. │ │ wsgi.py
5. │ │ __init__.py
6. ├─script
7. │ uwsgi.ini
8. ├─static
9. ├─templates
10. │ bpmn.html
11. └─view
12.  │ index.py

核心代码

1. var bpmnModeler = new BpmnJS({

2.  container: '#canvas',
3.  keyboard: {

4.  bindTo: window
5.  }
6. });
7. function openDiagram() {

8.  bpmnXML='<?xml version="1.0" encoding="UTF-8"?>' +
9.  '' +
10.  ' ' +
11.  ' ' +
12.  ' ' +
13.  ' ' +
14.  ' ' +
15.  ' ' +
16.  ' ' +
17.  ' ' +
18.  ' ' +
19.  ' ' +
20.  ''; //BPMN 2.0 xml
21.  }
22.  // import diagram
23.  bpmnModeler.importXML(bpmnXML, function(err) {

24.  if (err) {

25.  return console.error('could not import BPMN 2.0 diagram', err);
26.  }
27.  });
28. }

巴拉巴拉,代码还有一吨,这里就不贴了,后面会放源码地址。

部署

服务器还是选择Linux,部署前需要做以下操作。

Django

由于之前外网没有安装 Django,需要先安装:

  1. pip install Django

sqlite

为了测试方便,这里我们选择 Django 默认自带的 sqlite 数据库:

  1. yum install sqlite*

安装成功以后需要重新配置并编译安装 Python3:

  1. # 配置编译
  2. ./configure
  3. # 编译安装
  4. make && make install

uwsgi

安装服务器 uwsgi,你可以把它想象成Java界的Tomcat

  1. pip3 install uwsgi

这里你可以直接使用项目中script文件夹中的uwsgi.ini配置,只需修改项目路径即可。

然后使用以下命令启动:

  1. uwsgi --ini uwsgi.ini

执行命令,查看是否启动成功:

1. [root@AY140216131049Z script]# ps -ef|grep uwsgi 
2. root 3040 1 0 Nov21 ? 00:00:03 uwsgi --ini uwsgi.ini
3. root 3041 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
4. root 3042 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
5. root 3043 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
6. root 3044 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
7. root 3045 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
8. root 3046 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
9. root 6606 6580 0 18:13 pts/0 00:00:00 grep --color=auto uwsgi

重启:

  1. uwsgi --reload uwsgi.pid

停止:

  1. uwsgi --stop uwsgi.pid

Nginx

最后一步,配置Nginx 转发,具体安装这里不再说明,直接上配置(HTTPS安全证书请自行申请):

1. server {

2.  listen 80;
3.  listen 443 ssl;
4.  server_name bpmn.52itstyle.vip;
5.  index index.php;
6.  #ssl on;
7.  #证书路径
8.  ssl_certificate /usr/local/openresty/nginx/cert/1961848_bpmn.52itstyle.vip.pem;
9.  #私钥路径
10.  ssl_certificate_key /usr/local/openresty/nginx/cert/1961848_bpmn.52itstyle.vip.key;
11.  #缓存有效期
12.  ssl_session_timeout 5m;
13.  #可选的加密算法,顺序很重要,越靠前的优先级越高.
14.  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
15.  #安全链接可选的加密协议
16.  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
17.  ssl_prefer_server_ciphers on;
18.  location / {

19.  include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的
20.  uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间
21.  uwsgi_pass unix:/www/bpmn/script/uwsgi.sock; # 指定uwsgi的sock文件所有动态请求就会直接丢给他
22.  }
23.  # 动静分离 Nginx 处理静态请求
24.  location /static {

25.  root /www/bpmn/;
26.  }
27.  }

演示

以下是基于 bpmn-js 开发的一个 Activiti 工作流作图管理系统,可以增删查改流程图,系统还在优化中。