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

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

wptr33 2025-04-05 23:31 28 浏览

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页面中,提供了更为方便的二进制安装和官方可以用官方封装好的镜像来进行部署。无论使用哪种方式进行部署,都是可以的,看您自己的需求而已。



相关推荐

redis的八种使用场景

前言:redis是我们工作开发中,经常要打交道的,下面对redis的使用场景做总结介绍也是对redis举报的功能做梳理。缓存Redis最常见的用途是作为缓存,用于加速应用程序的响应速度。...

基于Redis的3种分布式ID生成策略

在分布式系统设计中,全局唯一ID是一个基础而关键的组件。随着业务规模扩大和系统架构向微服务演进,传统的单机自增ID已无法满足需求。高并发、高可用的分布式ID生成方案成为构建可靠分布式系统的必要条件。R...

基于OpenWrt系统路由器的模式切换与网页设计

摘要:目前商用WiFi路由器已应用到多个领域,商家通过给用户提供一个稳定免费WiFi热点达到吸引客户、提升服务的目标。传统路由器自带的Luci界面提供了工厂模式的Web界面,用户可通过该界面配置路...

这篇文章教你看明白 nginx-ingress 控制器

主机nginx一般nginx做主机反向代理(网关)有以下配置...

如何用redis实现注册中心

一句话总结使用Redis实现注册中心:服务注册...

爱可可老师24小时热门分享(2020.5.10)

No1.看自己以前写的代码是种什么体验?No2.DooM-chip!国外网友SylvainLefebvre自制的无CPU、无操作码、无指令计数器...No3.我认为CS学位可以更好,如...

Apportable:拯救程序员,IOS一秒变安卓

摘要:还在为了跨平台使用cocos2d-x吗,拯救objc程序员的奇葩来了,ApportableSDK:FreeAndroidsupportforcocos2d-iPhone。App...

JAVA实现超买超卖方案汇总,那个最适合你,一篇文章彻底讲透

以下是几种Java实现超买超卖问题的核心解决方案及代码示例,针对高并发场景下的库存扣减问题:方案一:Redis原子操作+Lua脚本(推荐)//使用Redis+Lua保证原子性publicbo...

3月26日更新 快速施法自动施法可独立设置

2016年3月26日DOTA2有一个79.6MB的更新主要是针对自动施法和快速施法的调整本来内容不多不少朋友都有自动施法和快速施法的困扰英文更新日志一些视觉BUG修复就不翻译了主要翻译自动施...

Redis 是如何提供服务的

在刚刚接触Redis的时候,最想要知道的是一个’setnameJhon’命令到达Redis服务器的时候,它是如何返回’OK’的?里面命令处理的流程如何,具体细节怎么样?你一定有问过自己...

lua _G、_VERSION使用

到这里我们已经把lua基础库中的函数介绍完了,除了函数外基础库中还有两个常量,一个是_G,另一个是_VERSION。_G是基础库本身,指向自己,这个变量很有意思,可以无限引用自己,最后得到的还是自己,...

China&#39;s top diplomat to chair third China-Pacific Island countries foreign ministers&#39; meeting

BEIJING,May21(Xinhua)--ChineseForeignMinisterWangYi,alsoamemberofthePoliticalBureau...

移动工作交流工具Lua推出Insights数据分析产品

Lua是一个适用于各种职业人士的移动交流平台,它在今天推出了一项叫做Insights的全新功能。Insights是一个数据平台,客户可以在上面实时看到员工之间的交流情况,并分析这些情况对公司发展的影响...

Redis 7新武器:用Redis Stack实现向量搜索的极限压测

当传统关系型数据库还在为向量相似度搜索的性能挣扎时,Redis7的RedisStack...

Nginx/OpenResty详解,Nginx Lua编程,重定向与内部子请求

重定向与内部子请求Nginx的rewrite指令不仅可以在Nginx内部的server、location之间进行跳转,还可以进行外部链接的重定向。通过ngx_lua模块的Lua函数除了能实现Nginx...