使用 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 tiddlywiki@5.1.19
     
    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 tiddlywiki@5.1.19 --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

    command
    

    作為一個有追求的折騰控,我們當然要避免這樣的情況,太不環保了。

    那麼我們來解決這個問題吧。

    編寫進階版本的容器鏡像

    下面是新的 Dockerfile

    FROM node:11.9.0-alpine
    MAINTAINER soulteary@gmail.com
     
    RUN npm install -g tiddlywiki@5.1.19
     
    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 已經運行起來了。

    使用 Docker 搭建你的Wiki(TiddlyWiki)
    使用 Docker 搭建你的Wiki(TiddlyWiki)

    點擊右側的“齒輪”可以進入設置頁面,除了常規操作之外,還能夠配置插件、語言包、主題等。

    接下來我們以配置 TiddlyWiki 為中文為例,打開設置皮膚的插件標籤頁,點擊開插件後,選擇語言包分類,找到中文語言包後,點擊“安裝”按鈕。

    使用 Docker 搭建你的Wiki(TiddlyWiki)
    使用 Docker 搭建你的Wiki(TiddlyWiki)

    下載完畢之後,頁面頂部會多出一條黃色的提示,依次點擊提示條中的“保存”和“刷新”按鈕。

    使用 Docker 搭建你的Wiki(TiddlyWiki)
    使用 Docker 搭建你的Wiki(TiddlyWiki)

    然後回到配置皮膚的首頁,向下滾動頁面,找到語言配置項,選擇中文,稍等 1、2秒後,語言包便配置生效了。

    使用 Docker 搭建你的Wiki(TiddlyWiki)
    使用 Docker 搭建你的Wiki(TiddlyWiki)

    其他插件的下載配置也類似,回到首頁,我們可以看到界面右側的工具欄已經變成中文。

    而文章內容使用什麼語言書寫,便會顯示什麼內容,如果你想做多語言站點,可以摸索一下,TiddlyWiki 同樣支持。

    使用 Docker 搭建你的Wiki(TiddlyWiki)
    使用 Docker 搭建你的Wiki(TiddlyWiki)

    接下來便可以開始正式編寫Wiki之旅了,點擊工具欄齒輪旁邊的“+”號,可以創建新文章,而點擊頁面中已存在內容的鋼筆圖標,則可以對已存在的內容進行修改。

    使用 Docker 搭建你的Wiki(TiddlyWiki)
    使用 Docker 搭建你的Wiki(TiddlyWiki)

    更多內容大家可以自行探索。

    最後

    如果你對本文聊到的 Docker 、Traefik 、Compose 還不是很熟悉,歡迎閲讀我的以往文章,補全對上述技術的認識,希望我的文章可以對你有幫助。

    接下來我會繼續介紹幾種不同的 Wiki 系統的安裝配置、魔改,如果你也在考慮如何維護一套讓自己用起來舒服的知識管理工具,可以繼續關注,下回再見。

    — EOF