前言
找一個(gè)好用的畫圖工具真心不容易菌湃,Activiti 工作流自帶的 Web 版畫圖工具芯肤,外表挺華麗巷折,其實(shí)使用起來各種擰巴;Eclipse 的 Activiti 畫圖插件纷妆,對于相對復(fù)雜的流程也是很不友好盔几。
環(huán)境搭建
網(wǎng)上有許多詳細(xì)的安裝配置步驟,這里就不一一贅述掩幢,只列出相關(guān)版本逊拍。
軟件 | 版本 | 功能 | 地址 |
---|---|---|---|
Python | 3.7.1 | 腳本語言 | https://www.python.org/ |
Django | 2.1.3 | Web框架 | https://www.djangoproject.com/ |
PyCharm | 2018.2.4 | 可視化開發(fā)工具 | http://www.jetbrains.com/pycharm/ |
BPMN-JS | 3.2.2 | BPMN前端插件 | https://github.com/bpmn-io/bpmn-js |
項(xiàng)目截圖
項(xiàng)目開發(fā)
功能模塊
這是一個(gè)Python版本,Java版本功能已經(jīng)基本開發(fā)完畢际邻,需要進(jìn)行功能遷移芯丧。
- 用戶登錄
- 流程列表(CURD)
- 用戶注冊(待實(shí)現(xiàn))
- 游客訪問在線作圖,可實(shí)現(xiàn)在線導(dǎo)入導(dǎo)出世曾,本地緩存
創(chuàng)建項(xiàng)目
切換到工作空間缨恒,執(zhí)行以下命令:
django-admin.py startproject bpmn
最終目錄結(jié)構(gòu),省略部分代碼:
├─bpmn
│ │ settings.py
│ │ urls.py
│ │ wsgi.py
│ │ __init__.py
├─script
│ uwsgi.ini
├─static
├─templates
│ bpmn.html
└─view
│ index.py
核心代碼
var bpmnModeler = new BpmnJS({
container: '#canvas',
keyboard: {
bindTo: window
}
});
function openDiagram() {
bpmnXML='<?xml version="1.0" encoding="UTF-8"?>\n' +
'<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="sample-diagram" targetNamespace="http://bpmn.io/schema/bpmn">\n' +
' <bpmn2:process id="Process_1">\n' +
' <bpmn2:startEvent id="StartEvent_1"/>\n' +
' </bpmn2:process>\n' +
' <bpmndi:BPMNDiagram id="BPMNDiagram_1">\n' +
' <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_1">\n' +
' <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">\n' +
' <dc:Bounds height="36.0" width="36.0" x="412.0" y="240.0"/>\n' +
' </bpmndi:BPMNShape>\n' +
' </bpmndi:BPMNPlane>\n' +
' </bpmndi:BPMNDiagram>\n' +
'</bpmn2:definitions>'; //BPMN 2.0 xml
}
// import diagram
bpmnModeler.importXML(bpmnXML, function(err) {
if (err) {
return console.error('could not import BPMN 2.0 diagram', err);
}
});
}
巴拉巴拉轮听,代碼還有一噸骗露,這里就不貼了,后面會放源碼地址血巍。
部署
服務(wù)器還是選擇Linux萧锉,部署前需要做以下操作。
Django
由于之前外網(wǎng)沒有安裝 Django述寡,需要先安裝:
pip install Django
sqlite
為了測試方便柿隙,這里我們選擇 Django 默認(rèn)自帶的 sqlite 數(shù)據(jù)庫:
yum install sqlite*
安裝成功以后需要重新配置并編譯安裝 Python3:
# 配置編譯
./configure
# 編譯安裝
make && make install
uwsgi
安裝服務(wù)器 uwsgi叶洞,你可以把它想象成Java界的Tomcat
pip3 install uwsgi
這里你可以直接使用項(xiàng)目中script文件夾中的uwsgi.ini配置,只需修改項(xiàng)目路徑即可禀崖。
然后使用以下命令啟動(dòng):
uwsgi --ini uwsgi.ini
執(zhí)行命令衩辟,查看是否啟動(dòng)成功:
[root@AY140216131049Z script]# ps -ef|grep uwsgi
root 3040 1 0 Nov21 ? 00:00:03 uwsgi --ini uwsgi.ini
root 3041 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
root 3042 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
root 3043 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
root 3044 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
root 3045 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
root 3046 3040 0 Nov21 ? 00:00:00 uwsgi --ini uwsgi.ini
root 6606 6580 0 18:13 pts/0 00:00:00 grep --color=auto uwsgi
重啟:
uwsgi --reload uwsgi.pid
停止:
uwsgi --stop uwsgi.pid
Nginx
最后一步,配置Nginx 轉(zhuǎn)發(fā)波附,具體安裝這里不再說明艺晴,直接上配置(HTTPS安全證書請自行申請):
server {
listen 80;
listen 443 ssl;
server_name bpmn.52itstyle.vip;
index index.php;
#ssl on;
#證書路徑
ssl_certificate /usr/local/openresty/nginx/cert/1961848_bpmn.52itstyle.vip.pem;
#私鑰路徑
ssl_certificate_key /usr/local/openresty/nginx/cert/1961848_bpmn.52itstyle.vip.key;
#緩存有效期
ssl_session_timeout 5m;
#可選的加密算法,順序很重要,越靠前的優(yōu)先級越高.
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#安全鏈接可選的加密協(xié)議
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
location / {
include uwsgi_params; # 導(dǎo)入一個(gè)Nginx模塊他是用來和uWSGI進(jìn)行通訊的
uwsgi_connect_timeout 30; # 設(shè)置連接uWSGI超時(shí)時(shí)間
uwsgi_pass unix:/www/bpmn/script/uwsgi.sock; # 指定uwsgi的sock文件所有動(dòng)態(tài)請求就會直接丟給他
}
# 動(dòng)靜分離 Nginx 處理靜態(tài)請求
location /static {
root /www/bpmn/;
}
}
演示
以下是基于 bpmn-js 開發(fā)的一個(gè) Activiti 工作流作圖管理系統(tǒng),可以增刪查改流程圖掸屡,系統(tǒng)還在優(yōu)化中财饥。
游客訪問:https://bpmn.52itstyle.vip/