部署一個私有的在線繪圖服務(wù)
現(xiàn)在很多服務(wù)都已經(jīng)云端化了,瀏覽器早已不是只用來瀏覽信息的瀏覽器了。
在線繪圖
國內(nèi)最常用的就是 ProcessOn 了,功能很全,就是免費額度有點少。
國外最知名的就是 Draw.io 了,基本上就是免費的,常常集成在各種服務(wù)里。就是速度有點慢,不,是非常慢。
Draw.io 現(xiàn)在改名了,叫 diagrams.net。最關(guān)鍵的是,它還是開源的!
部署一個 Draw.io
Draw.io 是基于mxGraph library[1]構(gòu)建的,后端用 Java 實現(xiàn)了簡單的文件導(dǎo)出和處理功能,畫圖的功能都是通過 JavaScript 在瀏覽器的,所以是完全可以用靜態(tài)頁面的方式來托管一個不需要文件處理和鑒權(quán)的繪圖站點。
有興趣請移步至該項目:
- https://github.com/jgraph/drawio
要完整部署該項目需要用 ant 來編譯 war,并用 tomcat 托管。但是,我不想用 ant 去編譯也不想和 Tom 貓發(fā)生什么關(guān)系,所以我要對這個開源項目進(jìn)行閹割。
- 去除所有國外的在線服務(wù),比如 Google Drive,OneDrive等等
- 避免跳轉(zhuǎn)到 Draw.io 官網(wǎng)
- 去除后端服務(wù),只要能在瀏覽器繪圖并緩存,能保存為本地文件
來來來,folk 一下這個項目開干,新項目地址:
- https://github.com/tobyqin/drawio-local。
- # 第一步,干掉Java,只保留Web應(yīng)用
- mv -r src/main/webapp /temp/webapp
- rm -rf *
- mv -r /tmp/webapp .
- # 第二步,去掉在線服務(wù)
- code js/PreConfig.js
- # 配置 local='1'
- # 參考 https://desk.draw.io/support/solutions/articles/16000042546-what-url-parameters-are-supported-
- # 第三步,修改錯誤的資源引用,用Chrome的開發(fā)者工具
- # 第四步,加一些黑科技到 index.html 來hack外部跳轉(zhuǎn),不展開說明
萬事具備,用一行代碼在本地托管:
- python3 -m http.server 8000
OK 啦,干凈清爽的感覺就是那么好。
改一下 README.md 就推送了吧。好像我只花了幾分鐘,其實我調(diào)試了幾小時,開發(fā)為什么總估時間不準(zhǔn)呢?奇怪。
部署到 Docker
沒有容器化的服務(wù)是沒有靈魂的服務(wù),那么我們就給它加點靈魂。加靈魂需要一個 Dockerfile,這樣寫:
- FROM frolvlad/alpine-python3:latest
- RUN mkdir /app
- WORKDIR /app
- RUN pip3 install flask
- ADD . /app/
- EXPOSE 5000
- CMD python3 app.py
這個靈魂是有講究的,為什么這么說呢?
1.用的是 apline 的基礎(chǔ)鏡像,這個是開源界最常用的基礎(chǔ)鏡像,因為它及其的小,一般只有幾 MB 或者幾十 MB。對應(yīng)的 apline 鏡像還有 node,java,go 版的,應(yīng)有盡有。
2.先安裝flask后copy應(yīng)用,因為flask安裝后這個layer就不變了,但是app每次打包都會不一樣。
為啥要加個flask啊?因為我想在它訪問后端報錯時可以更友好一點,人性化和用戶體驗,Understand?
- @app.route('/not-support', methods=['GET', 'POST'])
- def not_support():
- return "Sorry, this action is not supported."
好啦,打包鏡像走起。
- docker build -t tobyqin/drawio-local:latest .
讓這個靈魂跑起來。
- docker run -it --rm -p 5000:5000 tobyqin/drawio-local
訪問本地5000端口,一點毛病都沒有,注意 --rm在調(diào)試時很有用,它可以幫你自動清理退出的容器。
讓我們來發(fā)布這個靈魂到全世界。
- docker login
- docker push tobyqin/drawio-local
咦?這個靈魂好像有點重啊,完全推不動嘛。用Poratiner查看一下里面到底有什么東西。
鏡像總共才4M,應(yīng)用居然接近100M,要給靈魂減減肥了。在根目錄加個 .dockerignore 文件,把不想打包的文件統(tǒng)統(tǒng)寫在里面。
- .git
- .DS_Store
- .vscode
- *.md
- ...
321再來一遍靈魂序曲,嗯,有內(nèi)味了。
拿來主義
我想你是不愿意再踩一遍我的坑了,反正這個東西做一遍就行了,拿去用吧。
1. 靜態(tài)托管
直接到https://github.com/tobyqin/drawio-local 下載zip解壓后丟到nginx或者iis即可,順手給項目加個星唄。
2. Docker部署
一句命令即可。
- docker run --name="drawio-local" --restart always -p 5000:5000 tobyqin/drawio-local
3. 薅我羊毛
這個服務(wù)我已經(jīng)部署到了我的主機,免費用,隨便用,但不保證它的速度和生命延續(xù)。
- https://draw.pytips.cn
就這樣,Peace。
References
[1] mxGraph library: https://github.com/jgraph/mxgraph