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