使用 Docker 搭建你的Wiki(TiddlyWiki)
本文使用「署名 4.0 國際 (CC BY 4.0)」許可協議,歡迎轉載、或重新修改使用,但需要註明來源。 署名 4.0 國際 (CC BY 4.0)
本文作者: 蘇洋
創建時間: 2019年02月03日 統計字數: 4384字 閱讀時間: 9分鐘閱讀 本文鏈接: https://soulteary.com/2019/02/03/build-your-own-wiki-with-docker-tiddlywiki.html
使用 Docker 搭建你的Wiki(TiddlyWiki)
前面介紹了三款不同的 RSS 系統的快速搭建使用,接下來我將演示幾種不同的 Wiki 系統,同樣是藉助 Docker 和 Traefik 進行快速搭建,本篇是第三篇,TiddlyWiki,除了講述搭建之外,簡單演示如何優化你的容器鏡像。
如果你有閱讀過我之前寫的文章,那麼參考本篇文章將文章搭建起來,應該只需要3分鐘或者更少,如果你沒有看過,那麼可以點擊本文相關的文章標籤,閱讀過往的文章。
關於 TiddlyWiki
TiddlyWiki 同樣是一款開源並且支持免費使用的軟體,由JavaScript編寫,同樣天生跨平台,被廣泛用於個人知識整理。
作者來自牛津大學,開發這個Wiki軟體許多年,憑藉軟體的一些獨特的優勢,因此有了不少鐵粉,那麼這款軟體有什麼不同於其他Wiki軟體的特點呢?
- 最新版(5.x)軟體支持兩種運行模式:
- HTML 單頁面(SPA 應用)
- Node.js (Web 應用)
- 單頁面模式幾乎不需要任何編程能力,只需要雙擊頁面文件即可立刻開始使用,存儲雲盤或U盤中可以做到隨身攜帶。
- Wiki 條目高度可定製,對於常見的公式、圖表、代碼高亮等功能支持良好。
- 提供各種常用功能插件、語言包、不同風格的主題,可以切換傳統Wiki。
- 目前提供客戶端(基於NW.js)/ 各種奇怪的運行方式(比如跑在手機里)。
下面是軟體的官方站點,以及對應的中文漢化版本。漢化版本軟體版本比較低,不過常見功能使用沒有太大變化。
- 官方演示站點
- 簡體中文站點
- 繁體中文站點
本文將使用 Node.js 模式進行 Wiki 站點的建設,一來性能更好,二來可以讓整個應用變為同構類型,二次開發效率也更高,三來,單文件版本應該不需要一篇實踐文檔。
軟體目前版本是 v5.1.19 ,自 2013年版本號從 1.x 跳躍到 5.0 後,作者已經開發了6個年頭,版本記錄見此,本文基於該穩定版本撰寫。
話不多說,開始實戰。
編寫基礎 Docker 鏡像
下面是我們的 Dockerfile :
FROM node:11.9.0-alpine
RUN npm install -g [email protected]
EXPOSE 8080
VOLUME [ "/app" ]
WORKDIR /app
CMD [ "tiddlywiki", ".", "--listen", "host=0.0.0.0" ]
使用 Docker build
命令構建鏡像,這裡我們暫定鏡像名稱為 docker.lab.com/tiddlywiki:5.1.19
。
docker build -t docker.lab.com/tiddlywiki:5.1.19 .
如果你在構建過程中覺得很慢,可以使用國內淘寶團隊維護的鏡像,將第一條 RUN
指令後的命令替換為:
RUN npm install -g [email protected] --registry=https://registry.npm.taobao.org
使用 Compose 運行 TiddlyWiki
配合下面的配置文件,使用 Compose 可以一鍵啟動一個使用 文本文件 作為數據儲存的 TiddlyWiki ,配置很簡單,20行代碼左右。
version: 3
services:
tiddly:
image: docker.lab.com/tiddlywiki:5.1.19
restart: always
labels:
- "traefik.enable=true"
- "traefik.port=8080"
- "traefik.frontend.rule=Host:tiddlywiki.lab.io"
- "traefik.frontend.entryPoints=https,http"
- "traefik.frontend.headers.customResponseHeaders=Access-Control-Allow-Origin:*"
networks:
- traefik
volumes:
- ./app:/app
expose:
- 8080
command: tiddlywiki . --init server
networks:
traefik:
external: true
不過如果直接使用這樣的配置和容器鏡像,使用起來會有一些小麻煩,我們需要執行「兩次」 docker-compose up
:
- 第一次,直接使用上面的配置文件,運行後,初始化默認的Wiki數據目錄。
- 第二次,刪除
command
指令後的內容,讓容器鏡像以默認命令執行,啟動服務。
作為一個有追求的折騰控,我們當然要避免這樣的情況,太不環保了。
那麼我們來解決這個問題吧。
編寫進階版本的容器鏡像
下面是新的 Dockerfile :
FROM node:11.9.0-alpine
MAINTAINER [email protected]
RUN npm install -g [email protected]
EXPOSE 8080
VOLUME [ "/app" ]
WORKDIR /app
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh
CMD [ "/entrypoint.sh" ]
與之前的版本相比,我們將提供一個新的「入口文件」,entrypoint.sh
文件內容如下:
#!/usr/bin/env sh
if [ ! -f "/app/tiddlywiki.info" ]; then
tiddlywiki /app --init server
fi
tiddlywiki /app --listen host=0.0.0.0
重新使用 docker build
命令構建鏡像之後,我們來修正之前的 docker-compose.yml
配置文件。
再次使用 Compose 運行 TiddlyWiki
version: 3
services:
tiddly:
image: docker.lab.com/tiddlywiki:5.1.19
restart: always
labels:
- "traefik.enable=true"
- "traefik.port=8080"
- "traefik.frontend.rule=Host:tiddlywiki.lab.io"
- "traefik.frontend.entryPoints=https,http"
- "traefik.frontend.headers.customResponseHeaders=Access-Control-Allow-Origin:*"
networks:
- traefik
volumes:
- ./app:/app
expose:
- 8080
networks:
traefik:
external: true
將配置保存為 docker-compose.yml
,然後執行 docker-compose up
啟動應用,在配置文件同級目錄將會自動創建一個名為 app
的目錄,其中將保存站點的配置文件,以及我們未來所有的 Wiki 條目數據,一切都是全自動的。
數據目錄結構如下:
app
├── tiddlers
│ ├── $__SiteTitle.tid
│ └── $__StoryList.tid
└── tiddlywiki.info
數據備份很簡單,只需要定期對該目錄進行文件備份即可,如果後面有機會,或許可以寫一篇專門用於文件備份的文章。
當使用 docker-compose up
將應用啟動之後,便可以通過我們配置的域名進行訪問了,本例中地址為 tiddlywiki.lab.io
。(我使用 Traefik 提供服務發現,如果你不會操作,請訪問我的歷史文章,了解 Traefik 如何使用。)
TiddlyWiki 概覽
打開瀏覽器,可以看到 TiddlyWiki 已經運行起來了。