Nginx+Django-Python+BPMN-JS整合

前言

找一個好用的畫圖工具真心不容易,Activiti 工作流自帶的 Web 版畫圖工具,外表挺華麗,其實使用起來各種擰巴;Eclipse 的 Activiti 畫圖插件,對於相對複雜的流程也是很不友好。

環境搭建

網上有許多詳細的安裝配置步驟,這裡就不一一贅述,只列出相關版本。

Nginx+Django-Python+BPMN-JS整合

項目截圖

Nginx+Django-Python+BPMN-JS整合
Nginx+Django-Python+BPMN-JS整合
Nginx+Django-Python+BPMN-JS整合
Nginx+Django-Python+BPMN-JS整合

功能模塊

這是一個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='\n' +
  9. '<definitions>\n' +/<definitions>
  10. ' <process>\n' +/<process>
  11. ' <startevent>\n' +
  12. ' \n' +
  13. ' <bpmndiagram>\n' +/<bpmndiagram>
  14. ' <bpmnplane>\n' +/<bpmnplane>
  15. ' <bpmnshape>\n' +/<bpmnshape>
  16. ' <bounds>\n' +
  17. ' \n' +
  18. ' \n' +
  19. ' \n' +
  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>
  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 工作流作圖管理系統,可以增刪查改流程圖,系統還在優化中。

遊客訪問:https://bpmn.52itstyle.vip/


分享到:


相關文章: