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

部署开源流程图架构图软件drawio

ccwgpt 2025-03-12 13:05 87 浏览 0 评论

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



相关推荐

如何使用PIL生成验证码?(pi验证教程)

web项目中遇到使用验证码的情况有很多,进行介绍下使用PIL生成验证码的方法。安装开始安装PIL的过程确实麻烦各种问题层出不绝,不过不断深入后就没有这方面的困扰了:windows安装:直接安装Pil...

Python必学!3步解锁asyncio异步编程 性能直接狂飙10倍!

还在用传统同步代码被IO阻塞卡到崩溃?别当“代码苦行僧”了!Python的asyncio模块堪称异步编程的“开挂神器”,处理高并发任务就像开了涡轮增压!不管是网络爬虫、API接口开发还是文件批量处理,...

Tornado6+APScheduler/Celery打造并发异步动态定时任务轮询服务

定时任务的典型落地场景在各行业中都很普遍,比如支付系统中,支付过程中因为网络或者其他因素导致出现掉单、卡单的情况,账单变成了“单边账”,这种情况对于支付用户来说,毫无疑问是灾难级别的体验,明明自己付了...

Python学习怎么入门?附真实学习方法

Python技术在企业中应用的越来越广泛,因此企业对于Python方面专业人才的需求也越来越大,那对于之前对Python没有任何了解和接触的人而言,想要从零开始学习并不是一件容易的事情,接下来小U就为...

PySpider框架的使用(pyspider 教程)

PysiderPysider是一个国人用Python编写的、带有强大的WebUI的网络爬虫系统,它支持多种数据库、任务监控、项目管理、结果查看、URL去重等强大的功能。安装pip3inst...

大学计算机专业 学习Python学习路线图(最新版)

这是我刚开始学习python时的一套学习路线,从入门到上手。(不敢说精通,哈哈~)希望对大家有帮助哈~大家需要高清得完整python学习路线可以【文末有获取方式】【文末有获取方式】一、Python入门...

阿里巴巴打造的400集Python视频合集免费学起来,学完万物皆可爬

第一阶段Python入门章节1:Python入门章节2:编程基本概念章节3:序列章节4:控制语句章节5:函数章节6:面向对象编程第二阶段Python深入与提高章节1:异常处理章节2:游戏开发-坦克大...

Nginx Gunicorn在服务器中分别起什么作用

大部分人在gunicorn前面部署一层nginx的时候也的确没有想过为什么,他们只是觉得这样显得他们比较专业,而且幻想着加了一层nginx反向代理之后性能会有提升,恕我直言,请你们带上脑子,一个单纯的...

Python培训怎么学?Python基础技术总结!值得一看

Python培训如今越来越被更多人所接受,相比自学参加Python培训的好处也是显而易见,但Python毕竟属于后端编程开发的主流语言,其知识机构还是比较庞大的,那Python培训怎么学?以及Pyth...

使用Tornado部署Flask项目(tornado async)

Tornado不仅仅是一个WEB框架,也可以是一个WEB服务器。在Tornado中我们可以使用wsgi模块下的WSGIContainer类运行其他WSGI应用如:Fask,Bottle,Djang...

Python Web框架哪个好用?(python3 web框架)

  问:PythonWeb框架哪个好用?  答:  1.Django  Django是Python世界中最出名、最成熟的Web框架。Django功能全面,各模块之间结合紧密,(不讲其他的)Djang...

Vue3.0+Tornado6.1发布订阅模式打造异步非阻塞实时=通信聊天系统

“表达欲”是人类成长史上的强大“源动力”,恩格斯早就直截了当地指出,处在蒙昧时代即低级阶段的人类,“以果实、坚果、根作为食物;音节清晰的语言的产生是这一时期的主要成就”。而在网络时代人们的表达欲往往更...

Python开源项目合集(第三方平台)(python第三方开发工具)

wechat-python-sdk-wechat-python-sdk微信公众平台Python开发包http://wechat-python-sdk.readthedocs.org/,非官方...

IT界10倍高效学习法!用这种方式,一年学完清华大学四年的课程

有没有在某一个瞬间,让你放弃学编程刚开始学python时,我找了几十本国内外的python编程书籍学习后,我还是似懂非懂,那些书里面到处都是抽象的概念,复杂的逻辑,这样的书,对于专业开发者来说,在平常...

如何将Python算法模型注册成Spark UDF函数实现全景模型部署

背景Background对于算法业务团队来说,将训练好的模型部署成服务的业务场景是非常常见的。通常会应用于三个场景:部署到流式程序里,比如风控需要通过流式处理来实时监控。部署到批任务中部署成API服...

取消回复欢迎 发表评论: