使用 Docker 搭建你的Wiki(DokuWiki)

前面介紹了三款不同的 RSS 系統的快速搭建使用,接下來我將演示幾種不同的 Wiki 系統,同樣是藉助 Docker 和 Traefik 進行快速搭建,本篇是第四篇,DokuWiki。

如果你有閲讀過我之前寫的文章,那麼參考本篇文章將文章搭建起來,應該只需要3分鐘或者更少,如果你沒有看過,那麼可以點擊本文相關的文章標籤,閲讀過往的文章。

關於 DokuWiki

DokuWiki 同樣是一款開源並且支持免費使用的軟件,由 PHP 編寫,第一個提交版本在2004年,作為開源產品已經被穩定迭代了15個年頭,同樣天生跨平台,並被廣泛使用在各種知識社區內,尤其適合中小團隊和個人作為知識整理軟件使用。

記得第一份工作,在新浪雲團隊的時候,內部的 Wiki 便是基於 Doku 搭建的。

DokuWiki 和前面介紹的 MoinMoin 很類似,默認使用純文本作為數據記錄的方式,所以佔用服務器資源很低。

官方目前還在迭代,不過因為維護時間很長,迭代頻率相對比較慢,距離當下最新的版本是 2018年4月22日 ,本文基於此版本進行撰寫,感興趣的同學可以圍觀: 官方項目倉庫

話不多説,開始實戰。

使用 Compose 運行 DokuWiki

DokuWiki 同樣沒有提供官方容器鏡像,但是在 DockerHub 搜索的時候發現,Bitnami 有封裝好的鏡像 bitnami/dokuwiki ,我個人比較信任這個團隊,從2013年開始使用他們的服務到現在,一直沒有什麼大問題。

這裏圖個省事,就不進行鏡像封裝了,想學習封裝的同學可以翻閲之前的文章內容,不放心鏡像的同學,可以圍觀鏡像源代碼地址,進行安全審查: https://github.com/bitnami/bitnami-docker-dokuwiki

配合下面的配置文檔,使用 Compose 可以一鍵啟動一個使用 文本文檔 作為數據儲存的 DokuWiki ,配置很簡單,30 行代碼左右。

version: '3'
 
services:
 
  dokuwiki:
    container_name: doku.lab.io
    restart: always
    image: 'bitnami/dokuwiki:0.20180422.201901061035-r12'
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:doku.lab.io"
      - "traefik.frontend.passHostHeader=true"
      - "traefik.frontend.entryPoints=https,http"
      - "traefik.frontend.headers.SSLRedirect=true"
      - "traefik.frontend.headers.STSSeconds=315360000"
      - "traefik.frontend.headers.frameDeny=true"
      - "traefik.frontend.headers.SSLProxyHeaders=X-Forwarded-Proto:https"
      - "traefik.frontend.redirect.regex=^https?://doku.lab.io/(.*)"
      - "traefik.frontend.redirect.replacement=https://doku.lab.io/${1}"
      - "traefik.frontend.headers.customResponseHeaders=Access-Control-Allow-Origin:*"
    environment:
      - DOKUWIKI_FULL_NAME=soulteary
      - DOKUWIKI_EMAIL=soulteary@gmail.com
      - DOKUWIKI_WIKI_NAME=Wiki
      - DOKUWIKI_USERNAME=soulteary
      - DOKUWIKI_PASSWORD=soulteary
    networks:
      - traefik
    expose:
      - 80
    volumes:
      - ./data:/bitnami
 
networks:
  traefik:
    external: true

和之前不同的是,這裏演示瞭如何使用 Docker Label 定義 Traefik 的一些額外能力,比如自動掛載 ssl/tls 證書,域名重定向。

當使用 docker-compose up 將應用啟動之後,你會看到下面的日誌,耐心等待 dokuwiki successfully initialized 出現在日誌中,之後便可以通過我們配置的域名進行訪問了,本例中地址為 doku.lab.io 。(我使用 Traefik 提供服務發現,如果你不會操作,請訪問我的歷史文章,瞭解 Traefik 如何使用。)

Creating doku.lab.io ... done
Attaching to doku.lab.io
doku.lab.io |
doku.lab.io | Welcome to the Bitnami dokuwiki container
doku.lab.io | Subscribe to project updates by watching https://github.com/bitnami/bitnami-docker-dokuwiki
doku.lab.io | Submit issues and feature requests at https://github.com/bitnami/bitnami-docker-dokuwiki/issues
doku.lab.io |
doku.lab.io | nami    INFO  Initializing apache
doku.lab.io | apache  INFO  ==> Patching httpoxy...
doku.lab.io | apache  INFO  ==> Configuring dummy certificates...
doku.lab.io | nami    INFO  apache successfully initialized
doku.lab.io | nami    INFO  Initializing php
doku.lab.io | nami    INFO  php successfully initialized
doku.lab.io | nami    INFO  Initializing libphp
doku.lab.io | nami    INFO  libphp successfully initialized
doku.lab.io | nami    INFO  Initializing dokuwiki
doku.lab.io | dokuwik INFO  Passing wizard, please be patient
doku.lab.io | dokuwik INFO
doku.lab.io | dokuwik INFO  ########################################################################
doku.lab.io | dokuwik INFO   Installation parameters for dokuwiki:
doku.lab.io | dokuwik INFO     username: soulteary
doku.lab.io | dokuwik INFO     user fullname: soulteary
doku.lab.io | dokuwik INFO     Password: **********
doku.lab.io | dokuwik INFO     Email: soulteary@gmail.com
doku.lab.io | dokuwik INFO     Wiki Name: Wiki
doku.lab.io | dokuwik INFO   (Passwords are not shown for security reasons)
doku.lab.io | dokuwik INFO  ########################################################################
doku.lab.io | dokuwik INFO
doku.lab.io | nami    INFO  dokuwiki successfully initialized
doku.lab.io | INFO  ==> Starting dokuwiki...
doku.lab.io | [Mon Feb 11 09:11:14.374658 2019] [ssl:warn] [pid 101] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
doku.lab.io | [Mon Feb 11 09:11:14.381884 2019] [ssl:warn] [pid 101] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
doku.lab.io | [Mon Feb 11 09:11:14.447186 2019] [ssl:warn] [pid 101] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
doku.lab.io | [Mon Feb 11 09:11:14.455003 2019] [ssl:warn] [pid 101] AH01909: localhost:443:0 server certificate does NOT include an ID which matches the server name
doku.lab.io | [Mon Feb 11 09:11:14.494463 2019] [mpm_prefork:notice] [pid 101] AH00163: Apache/2.4.37 (Unix) OpenSSL/1.1.0j PHP/7.1.26 configured -- resuming normal operations
doku.lab.io | [Mon Feb 11 09:11:14.494539 2019] [core:notice] [pid 101] AH00094: Command line: 'httpd -f /bitnami/apache/conf/httpd.conf -D FOREGROUND'

在展示進程界面和常規操作之前,我們還是先説一下數據存放地址,以及未來插件要在哪裏進行存放和應用。

在上面的配置文檔 docker-compose.yml 的同級目錄會自動生成 data 目錄,在目錄內會包含用户數據、環境配置相關的內容,如下所示:

data
├── apache
│   └── conf
├── dokuwiki
│   ├── conf
│   ├── data
│   └── lib
│       ├── images
│       ├── plugins
│       └── tpl
└── php
    └── conf

如果你需要應用官方市場的插件或者主題,請放置於 data/dokuwiki/lib/plugin/ 目錄內的指定文檔夾中,和 MoinMoin 不同的是,不需要重啟容器進行,直接刷新瀏覽器頁面,插件就能夠自動加載了。

我們的 Wiki 條目數據會被存放在 data/dokuwiki/data 中,所以請定期對該位置數據進行備份保存。

DokuWiki 的常規操作

打開瀏覽器,可以看到 DokuWiki 已經運行起來了。

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

在當前頁面右側可以看到編輯菜單,點擊後可以進入編輯界面。

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

默認不使用插件,語法需要使用特殊語法 官方語法參考

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

點擊保存,第一條 Wiki 條目的更新操作就完成了。

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

再次點擊條目中的信息鏈接,可以直觀的查看到內容的變更記錄,並執行不同版本的對比,獲取更多的信息。

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

至於安裝插件、配置主題等,可以點擊頂部菜單欄 Admin ,比較直觀就不贅述了。

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

其他

如果你想要對鏈接進行優化,可以參考這裏 Pull Request 修改 data 目錄中的 Apache 配置文檔即可。

最後

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

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

— EOF