百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

部署开源流程图架构图软件drawio(开源流程管理框架)

csdh11 2025-03-20 13:48 13 浏览

drawio是github上面一款开源的产品,可以用于画流程图、架构图、原型图等等,因为其有着丰富的图标资源,被很多人所喜欢。

官网:https://www.drawio.com/

github主页:
https://github.com/jgraph/drawio-desktop

在github主页的
https://github.com/jgraph/drawio-desktop/releases这个页面里,可以下载到跨多个平台的二进制安装包

本文可以看作是一个docker的练习。我们将通过dockerfile的方式,拉取github上面的代码,直接构建出属于自己的drawio镜像,再使用该镜像运行自己的容器来使用drawio。

1、拉取github代码到本地

demouser@demohosts:~$ git clone https://github.com/jgraph/drawio.git
正克隆到 'drawio'...
remote: Enumerating objects: 58612, done.
remote: Counting objects: 100% (563/563), done.
remote: Compressing objects: 100% (400/400), done.
remote: Total 58612 (delta 225), reused 464 (delta 151), pack-reused 58049 (from 1)
接收对象中: 100% (58612/58612), 1.51 GiB | 17.23 MiB/s, 完成.
处理 delta 中: 100% (36123/36123), 完成.
正在更新文件: 100% (3393/3393), 完成.

安装ant和openjdk1.8.0。进入到目录中,编译项目为war,

demouser@demohosts:~$ sudo apt install ant openjdk-8-jdk
demouser@demohosts:~$ cd drawio/etc/build/ && ant war
Buildfile: /home/demouser/drawio/etc/build/build.xml

merge:
   [jscomp] Compiling 1 file(s) with 112 extern(s)
   [jscomp] 0 error(s), 0 warning(s)
   [delete] Deleting directory /home/demouser/drawio/build

app:
     [copy] Copying 1 file to /home/demouser/drawio/etc/build
     [copy] Copying 1 file to /home/demouser/drawio/etc/build
   [jscomp] Compiling 10 file(s) with 112 extern(s)
   [jscomp] 0 error(s), 0 warning(s)
   [jscomp] Compiling 60 file(s) with 112 extern(s)
   [jscomp] 0 error(s), 0 warning(s)
   [jscomp] Compiling 5 file(s) with 112 extern(s)
   [jscomp] ../../src/main/webapp/js/jscolor/jscolor.js:434:3: WARNING - [JSC_SUSPICIOUS_LEFT_OPERAND_OF_LOGICAL_OPERATOR] Left operand of || operator is always falsy.
   [jscomp]   434|                      h<0 h='0)' h>6 && (h=6);
   [jscomp]                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/jscolor/jscolor.js:435:3: WARNING - [JSC_SUSPICIOUS_LEFT_OPERAND_OF_LOGICAL_OPERATOR] Left operand of || operator is always falsy.
   [jscomp]   435|                      s<0 s='0)' s>1 && (s=1);
   [jscomp]                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/jscolor/jscolor.js:436:3: WARNING - [JSC_SUSPICIOUS_LEFT_OPERAND_OF_LOGICAL_OPERATOR] Left operand of || operator is always falsy.
   [jscomp]   436|                      v<0 v='0)' v>1 && (v=1);
   [jscomp]                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/jscolor/jscolor.js:447:3: WARNING - [JSC_SUSPICIOUS_LEFT_OPERAND_OF_LOGICAL_OPERATOR] Left operand of || operator is always falsy.
   [jscomp]   447|                      r<0 r='0)' r>1 && (r=1);
   [jscomp]                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/jscolor/jscolor.js:448:3: WARNING - [JSC_SUSPICIOUS_LEFT_OPERAND_OF_LOGICAL_OPERATOR] Left operand of || operator is always falsy.
   [jscomp]   448|                      g<0 g='0)' g>1 && (g=1);
   [jscomp]                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/jscolor/jscolor.js:449:3: WARNING - [JSC_SUSPICIOUS_LEFT_OPERAND_OF_LOGICAL_OPERATOR] Left operand of || operator is always falsy.
   [jscomp]   449|                      b<0 b='0)' b>1 && (b=1);
   [jscomp]                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] 0 error(s), 6 warning(s)
   [jscomp] Compiling 1 file(s) with 112 extern(s)
   [jscomp] 0 error(s), 0 warning(s)
   [jscomp] Compiling 17 file(s) with 112 extern(s)
   [jscomp] ../../src/main/webapp/js/diagramly/Editor.js:208:2: WARNING - [JSC_USELESS_CODE] Suspicious code. This code lacks side-effects. Is there a bug?
   [jscomp]   208|              Editor.enableServiceWorker && navigator.serviceWorker;
   [jscomp]                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/diagramly/Editor.js:208:42: WARNING - [JSC_USELESS_CODE] Suspicious code. The result of the 'getprop' operator is not being used.
   [jscomp]   208|              Editor.enableServiceWorker && navigator.serviceWorker;
   [jscomp]                                                             ^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/diagramly/EditorUi.js:6948:8: WARNING - [JSC_USELESS_CODE] Suspicious code. The result of the 'eq' operator is not being used.
   [jscomp]   6948|             else (linkSelect.parentNode == null)
   [jscomp]                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] 0 error(s), 3 warning(s)
   [jscomp] Compiling 1 file(s) with 112 extern(s)
   [jscomp] 0 error(s), 0 warning(s)
   [delete] Deleting: /home/demouser/drawio/src/main/webapp/js/extensions.min.js
   [delete] Deleting: /home/demouser/drawio/etc/build/.tmp0.js
   [delete] Deleting: /home/demouser/drawio/etc/build/.tmp0.min.js
   [delete] Deleting: /home/demouser/drawio/etc/build/.tmp1.js
   [delete] Deleting: /home/demouser/drawio/etc/build/.tmp2.js
   [delete] Deleting: /home/demouser/drawio/etc/build/.tmp2.min.js
   [delete] Deleting: /home/demouser/drawio/etc/build/.tmp3.js
   [delete] Deleting: /home/demouser/drawio/etc/build/.tmp1.xml
   [delete] Deleting: /home/demouser/drawio/etc/build/.tmp2.xml
   [jscomp] Compiling 27 file(s) with 112 extern(s)
   [jscomp] ../../src/main/webapp/js/diagramly/Editor.js:208:2: WARNING - [JSC_USELESS_CODE] Suspicious code. This code lacks side-effects. Is there a bug?
   [jscomp]   208|              Editor.enableServiceWorker && navigator.serviceWorker;
   [jscomp]                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/diagramly/Editor.js:208:42: WARNING - [JSC_USELESS_CODE] Suspicious code. The result of the 'getprop' operator is not being used.
   [jscomp]   208|              Editor.enableServiceWorker && navigator.serviceWorker;
   [jscomp]                                                             ^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/diagramly/EditorUi.js:6948:8: WARNING - [JSC_USELESS_CODE] Suspicious code. The result of the 'eq' operator is not being used.
   [jscomp]   6948|             else (linkSelect.parentNode == null)
   [jscomp]                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] 0 error(s), 3 warning(s)
   [jscomp] Compiling 6 file(s) with 112 extern(s)
   [jscomp] ../../src/main/webapp/js/diagramly/vsdx/importer.js:718:24: WARNING - [JSC_USELESS_CODE] Suspicious code. This code lacks side-effects. Is there a bug?
   [jscomp]   718|                         if (layer.Lock == 1)
   [jscomp]                                ^^^^^^^^^^^^^^^^^^^^
   [jscomp]   719|                         {
   [jscomp]        ^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp]   720|                             //layerCell.setStyle("locked=1;");
   [jscomp]        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp]   721|                         }
   [jscomp]        ^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/diagramly/vsdx/importer.js:1277:7: WARNING - [JSC_USELESS_CODE] Suspicious code. This code lacks side-effects. Is there a bug?
   [jscomp]   1277|                                                     if (rows[i] instanceof com.mxgraph.io.vsdx.geometry.NURBSTo)
   [jscomp]                                                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp]   1278|                                                     {
   [jscomp]         ^^^^^^^^
   [jscomp] ...
   [jscomp]   1280|                                                             //var str = rows[i].handle({}, edgeShape);
   [jscomp]         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp]   1281|                                                     }
   [jscomp]         ^^^^^^^^
   [jscomp] 
   [jscomp] 0 error(s), 2 warning(s)
   [delete] Deleting: /home/demouser/drawio/src/main/webapp/js/orgchart.min.js
   [jscomp] Compiling 1 file(s) with 112 extern(s)
   [jscomp] 0 error(s), 0 warning(s)
   [delete] Deleting: /home/demouser/drawio/etc/build/.tmp3.js
   [delete] Deleting: /home/demouser/drawio/etc/build/.tmp1.js
   [jscomp] Compiling 51 file(s) with 112 extern(s)
   [jscomp] ../../src/main/webapp/js/diagramly/Editor.js:208:2: WARNING - [JSC_USELESS_CODE] Suspicious code. This code lacks side-effects. Is there a bug?
   [jscomp]   208|              Editor.enableServiceWorker && navigator.serviceWorker;
   [jscomp]                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/diagramly/Editor.js:208:42: WARNING - [JSC_USELESS_CODE] Suspicious code. The result of the 'getprop' operator is not being used.
   [jscomp]   208|              Editor.enableServiceWorker && navigator.serviceWorker;
   [jscomp]                                                             ^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] ../../src/main/webapp/js/diagramly/EditorUi.js:6948:8: WARNING - [JSC_USELESS_CODE] Suspicious code. The result of the 'eq' operator is not being used.
   [jscomp]   6948|             else (linkSelect.parentNode == null)
   [jscomp]                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   [jscomp] 
   [jscomp] 0 error(s), 3 warning(s)
   [delete] Deleting: /home/demouser/drawio/etc/build/Graph-Stylesheet.js
   [delete] Deleting: /home/demouser/drawio/etc/build/Graph-Resources.js
   [delete] Deleting: /home/demouser/drawio/etc/build/grapheditor.min.js
   [delete] Deleting: /home/demouser/drawio/etc/build/sidebar.min.js
   [delete] Deleting: /home/demouser/drawio/etc/build/client.min.js
   [delete] Deleting: /home/demouser/drawio/etc/build/.tmp1.js

javac:
    [mkdir] Created dir: /home/demouser/drawio/src/main/webapp/WEB-INF/classes
    [javac] Compiling 25 source files to /home/demouser/drawio/src/main/webapp/WEB-INF/classes
    [javac] 注: 某些输入文件使用了未经检查或不安全的操作。
    [javac] 注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。
     [copy] Copying 1 file to /home/demouser/drawio/src/main/webapp/WEB-INF/classes

war:
      [zip] Building zip: /home/demouser/drawio/build/draw.war

BUILD SUCCESSFUL
Total time: 1 minute 4 seconds

2、创建Dockerfile

先进入到上面项目构建后存有war文件的目录中

cd /home/$USER/drawio/build/

利用ubuntu的镜像自己封装tomcat,并把上面war文件也复制到镜像中,dockerfile的内容如下:

# 使用Ubuntu镜像作为基础镜像
FROM ubuntu:latest
 
# 安装Java环境
RUN apt-get update && \
    apt-get install -y openjdk-8-jdk curl && \
    rm -rf /var/lib/apt/lists/*
 
# 设置环境变量
ENV CATALINA_HOME /usr/local/tomcat
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
 
# 下载并解压Tomcat到容器中
RUN mkdir /usr/local/tomcat && \
    curl -SL https://downloads.apache.org/tomcat/tomcat-9/v9.0.95/bin/apache-tomcat-9.0.95.tar.gz | tar -xz -C /usr/local/tomcat --strip-components=1
 
# 设置Tomcat的环境变量
ENV CATALINA_HOME /usr/local/tomcat
ENV CATALINA_BASE /usr/local/tomcat
ENV CATALINA_TMPDIR /usr/local/tomcat/temp
ENV JRE_HOME /usr/lib/jvm/java-8-openjdk-amd64/jre

# 将drawio构建包的war包复制到tomcat中
COPY draw.war /usr/local/tomcat/webapps

# 暴露8080端口
EXPOSE 8080
 
# 启动Tomcat服务器
CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]

3、 构建自己的镜像文件

demouser@demohosts:~/drawio/build$ docker build -t drawio:latest .DEPRECATED: The legacy builder is deprecated and will be removed in a future release.
            Install the buildx component to build images with BuildKit:
            https://docs.docker.com/go/buildx/

Sending build context to Docker daemon     54MB
Step 1/12 : FROM ubuntu:latest
 ---> 61b2756d6fa9
Step 2/12 : RUN apt-get update &&     apt-get install -y openjdk-8-jdk curl &&     rm -rf /var/lib/apt/lists/*
 ---> Using cache
 ---> be9505e58075
Step 3/12 : ENV CATALINA_HOME /usr/local/tomcat
 ---> Using cache
 ---> c0d94dd92a17
Step 4/12 : ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64
 ---> Using cache
 ---> 988fc8f6b0ec
Step 5/12 : RUN mkdir /usr/local/tomcat &&     curl -SL https://downloads.apache.org/tomcat/tomcat-9/v9.0.95/bin/apache-tomcat-9.0.95.tar.gz | tar -xz -C /usr/local/tomcat --strip-components=1
 ---> Running in 843d3a62ab3c
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 12.1M  100 12.1M    0     0  3616k      0  0:00:03  0:00:03 --:--:-- 3616k
Removing intermediate container 843d3a62ab3c
 ---> 0a75087190f8
Step 6/12 : ENV CATALINA_HOME /usr/local/tomcat
 ---> Running in e1b368691118
Removing intermediate container e1b368691118
 ---> 044955945bcd
Step 7/12 : ENV CATALINA_BASE /usr/local/tomcat
 ---> Running in 52a3b9b3e12e
Removing intermediate container 52a3b9b3e12e
 ---> 8510133983b8
Step 8/12 : ENV CATALINA_TMPDIR /usr/local/tomcat/temp
 ---> Running in 7ce5e32c6ac2
Removing intermediate container 7ce5e32c6ac2
 ---> 58d17a1e1143
Step 9/12 : ENV JRE_HOME /usr/lib/jvm/java-8-openjdk-amd64/jre
 ---> Running in 8affaa816c9c
Removing intermediate container 8affaa816c9c
 ---> c969ed96132c
Step 10/12 : COPY draw.war /usr/local/tomcat/webapps
 ---> b10d935b31b1
Step 11/12 : EXPOSE 8080
 ---> Running in a8a70f1f5cf0
Removing intermediate container a8a70f1f5cf0
 ---> 58473e503fdb
Step 12/12 : CMD ["/usr/local/tomcat/bin/catalina.sh", "run"]
 ---> Running in f96bb0218aed
Removing intermediate container f96bb0218aed
 ---> 7a26098bf116
Successfully built 7a26098bf116
Successfully tagged drawio:latest

4、运行镜像创建自己的容器

demouser@demohosts:~/drawio/build$ docker run -d -p 8080:8080 --name drawio drawio:latest
96ec152414bca10a4824274b7a09be13d7106f6ee2b8cff000d1272a4dc643bc

5、验证部署

通过在浏览器中输入 http://服务器IP:8080/draw 就可以访问得到咱们自己的私有化drawio服务了。

使用过程中可以将你的图存在google drive、dropbox、onedrive、github、gitlab或者device(本地设备)中。这里我演示以本地设备为例打开一个对话


6、结尾

在其项目的github页面中,提供了更为方便的二进制安装和官方可以用官方封装好的镜像来进行部署。无论使用哪种方式进行部署,都是可以的,看您自己的需求而已。



相关推荐

NUS邵林团队发布DexSinGrasp基于强化学习实现物体分离与抓取统一

本文的作者均来自新加坡国立大学LinSLab。本文的共同第一作者为新加坡国立大学实习生许立昕和博士生刘子轩,主要研究方向为机器人学习和灵巧操纵,其余作者分别为硕士生桂哲玮、实习生郭京翔、江泽宇以及...

「PLC进阶」如何通过编写SCL语言程序实现物料分拣?

01、前言SCL作为IEC61131-3编程语言的一种,由于其高级语言的特性,特别适合复杂运算、复杂数学函数应用的场合。本文以FactoryIO软件中的物料分拣案例作为硬件基础,介绍如何通过SCL来实...

zk源码—5.请求的处理过程一(http1.1请求方法)

大纲1.服务器的请求处理链...

自己动手从0开始实现一个分布式 RPC 框架

前言为什么要自己写一个RPC框架,我觉得从个人成长上说,如果一个程序员能清楚的了解RPC框架所具备的要素,掌握RPC框架中涉及的服务注册发现、负载均衡、序列化协议、RPC通信协议、Socket通信、异...

MLSys’25 | 极低内存消耗:用SGD的内存成本实现AdamW的优化性能

AIxiv专栏是机器之心发布学术、技术内容的栏目。过去数年,机器之心AIxiv专栏接收报道了2000多篇内容,覆盖全球各大高校与企业的顶级实验室,有效促进了学术交流与传播。如果您有优秀的工作想要分享,...

线程池误用导致系统假死(线程池会自动销毁吗)

背景介绍在项目中,为了提高系统性能使用了RxJava实现异步方案,其中异步线程池是自建的。但是当QPS稍微增大之后却发现系统假死、无响应和返回,调用方出现大量超时现象。但是通过监控发现,系统线程数正常...

大型乘用车工厂布局规划(六大乘用车基地)

乘用车工厂的布局规划直接影响生产效率、物流成本、安全性和未来扩展能力。合理的布局应确保生产流程顺畅、物流高效、资源优化,并符合现代化智能制造和绿色工厂的要求。以下是详细的工厂布局规划要点:1.工厂布...

西门子 S7-200 SMART PLC 连接Factory IO的方法

有很多同学不清楚如何西门子200smart如何连接FactoryIO,本教程为您提供了如何使用西门子S7-200SMARTPLC连接FactoryIO的说明。设置PC和PLC之间的...

西门子博图高级仿真软件的应用(西门子博途软件仿真)

1.博图高级仿真软件(S7-PLCSIMAdvancedV2.0)S7-PLCSIMAdvancedV2.0包含大量仿真功能,通过创建虚拟控制器对S7-1500和ET200SP控制器进行仿真...

PLC编程必踩的6大坑——请对号入座,评论区见

一、缺乏整体规划:面条式代码问题实例:某快递分拣线项目初期未做流程图设计,工程师直接开始编写传送带控制程序。后期增加质检模块时发现I/O地址冲突,电机启停逻辑与传感器信号出现3处死循环,导致项目延期2...

统信UOS无需开发者模式安装软件包
统信UOS无需开发者模式安装软件包

原文链接:统信UOS无需开发者模式安装软件包...

2025-05-05 14:55 csdh11

100个Java工具类之76:数据指纹DigestUtils

为了提高数据安全性,保证数据的完整性和真实性,DigestUtils应运而生。正确恰当地使用DigestUtils的加密算法,可以实现数据的脱敏,防止数据泄露或篡改。...

麒麟KYLINIOS软件仓库搭建02-软件仓库添加新的软件包

#秋日生活打卡季#原文链接:...

Java常用工具类技术文档(java中工具类的作用)

一、概述Java工具类(UtilityClasses)是封装了通用功能的静态方法集合,能够简化代码、提高开发效率。本文整理Java原生及常用第三方库(如ApacheCommons、GoogleG...

软路由的用法(自动追剧配置)(软路由教学)

本内容来源于@什么值得买APP,观点仅代表作者本人|作者:值友98958248861环境和需求...