SSD Nodes Learn 8GB 記憶體 — 每年 $66
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-01

BookStack、Wiki.js、Outline 自架 wiki 怎麼選

比較 BookStack、Wiki.js 與 Outline 的安裝負擔、編輯器、登入方式與搜尋功能,並說明哪個適合單人管理員或團隊使用。

應執行哪一個自架 wiki

自架 wiki 會將團隊的文件集中在您控管的伺服器上,並提供單一可搜尋的位置。BookStack、Wiki.js 和 Outline 都能完成這項工作。它們最大的差異,在於首次載入頁面前需要組裝多少元件,以及哪些使用者可以登入。

BookStack 最容易部署,且對結構的要求最明確。Wiki.js 在同一個頁面樹狀結構中,提供最廣泛的編輯器選擇。Outline 的寫作體驗在三者中最佳;在連接外部身分識別提供者之前,它不允許任何人登入。

以下內容均整理自各專案的官方文件與已發布的設定檔。這是功能比較,不是效能基準測試。版本號碼與需求均標註日期,因為這三個專案都持續更新。

結構才是真正的選擇

BookStack 固定了內容的結構。頁面位於書籍中,書籍可以包含章節,而書架則將書籍分組。您無法自行建立第 5 個層級。這項限制就是產品的核心:新作者知道頁面應放在哪裡,因為它只有一個可放置的位置。代價是,不符合此結構的內容也必須套用這個結構。

Wiki.js 使用類似磁碟資料夾的路徑樹。ops/backup/restic 的頁面可以放在您指定的位置,深度也由您決定。沒有限制可阻止兩個人將相同主題歸檔到不同分支,因此 Wiki.js 執行個體需要由一個人負責管理樹狀結構。

Outline 使用集合,文件則可巢狀於其他文件中。移動文件只需使用滑鼠拖曳。三者之中,它的彈性最高,因此也最容易逐漸失去一致性。

BookStack:最精簡安裝

BookStack 是由 MySQL 支援的 PHP 應用程式。截至 2026 年 7 月,文件列出的需求為 PHP 8.2 或更新版本,以及 MySQL 8.0 或 MariaDB 10.6 或更新版本。如果從原始碼安裝,還需要 Composer 2.2 或更新版本。目前的發行版本系列為 26.05。

專案會針對每個 Ubuntu 發行版本提供一個安裝指令碼。24.04 指令碼會替你安裝 Apache、MySQL 8.0 和 PHP 8.3。

wget https://codeberg.org/bookstack/devops/raw/branch/main/scripts/installation-ubuntu-24.04.sh
chmod a+x installation-ubuntu-24.04.sh
sudo ./installation-ubuntu-24.04.sh

執行前,請先閱讀該指令碼中的警告。文件指出,該指令碼「僅適用於全新的作業系統,會安裝 Apache、MySQL 8.0 和 PHP 8.3,並可能覆寫機器上現有的 Web 設定」。如果伺服器目前已在 port 80 回應要求,該指令碼會接管該連接埠並改寫 Apache 設定。此時請改用容器,或在 Ubuntu 24.04 上的 現有 LAMP 堆疊上手動安裝 BookStack

容器方式使用 LinuxServer.io 映像檔,這是 BookStack 文件所指向的選項。BookStack 需要工作階段加密金鑰,沒有金鑰就不會提供頁面,因此請先產生金鑰。

docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey

將輸出的值複製到 APP_KEY,然後建立服務:

services:
  bookstack:
    image: lscr.io/linuxserver/bookstack:latest
    container_name: bookstack
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Etc/UTC
      - APP_URL=https://wiki.example.com
      - APP_KEY=paste_the_generated_key_here
      - DB_HOST=bookstack_db
      - DB_PORT=3306
      - DB_USERNAME=bookstack
      - DB_PASSWORD=change_me
      - DB_DATABASE=bookstackapp
    volumes:
      - ./config:/config
    ports:
      - 6875:80
    restart: unless-stopped

APP_URL 必須符合讀者實際輸入的位址,包括配置和任何連接埠。將它設為 http://localhost,然後透過 HTTPS 提供網站。否則產生的連結和重新導向會指向錯誤的主機,讀者會看到不斷重新導向回自身的登入頁面。如果你不熟悉 compose 檔案,請先閱讀 VPS 上的 Docker Compose 基礎,再進行本教學。

啟動服務,並確認應用程式能回應,而不只確認容器正在執行:

docker compose up -d
docker compose ps
curl -sI http://127.0.0.1:6875/login

200 OK 表示 PHP 應用程式已啟動並連上資料庫。500 幾乎總是表示 APP_KEY 為空,或資料庫認證資訊不相符;docker compose logs bookstack 會列出是哪一種情況。

Wiki.js:一棵內容樹,多種編輯器

Wiki.js 是 Node.js 應用程式。官方文件中的 Docker 設定會搭配 PostgreSQL,但此軟體也支援 MySQL、MariaDB、MSSQL 和 SQLite。以下是該專案自有 Docker 頁面中的 compose 檔案:

services:
  db:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: wiki
      POSTGRES_PASSWORD: wikijsrocks
      POSTGRES_USER: wikijs
    logging:
      driver: none
    restart: unless-stopped
    volumes:
      - db-data:/var/lib/postgresql/data
  wiki:
    image: ghcr.io/requarks/wiki:2
    depends_on:
      - db
    init: true
    environment:
      DB_TYPE: postgres
      DB_HOST: db
      DB_PORT: 5432
      DB_USER: wikijs
      DB_PASS: wikijsrocks
      DB_NAME: wiki
    restart: unless-stopped
    ports:
      - "80:3000"
volumes:
  db-data:

執行前,請一併變更 POSTGRES_PASSWORDDB_PASS,因為它們是同一組認證資訊,而且範例值已公開。此處刻意將標籤固定為 ghcr.io/requarks/wiki:2。文件不建議使用 latest,因為主要版本升級會在執行中的執行個體變更資料庫結構。

應執行版本 2。截至 2026 年 7 月,最新的版本 2 發行版是 2.5.314,於 2026 年 5 月發布。版本 3 已存在,其文件本身寫道:「此網站供 Wiki.js 3.0 的不穩定 beta 發行版使用。請勿將其安裝於正式環境。」請將 :3 標籤視為預覽版本。

首次載入時,Wiki.js 會引導您完成瀏覽器內設定,並建立管理員帳戶。在完成設定前,任何能連線至該連接埠的人都會看到此精靈。因此,請先將服務置於反向代理和 TLS(傳輸層安全性)後方,再開啟防火牆。當伺服器託管的不只這項服務時,使用專屬主機名稱的 wiki 很適合搭配 在多個 Docker 應用程式前方配置 Traefik

編輯器選擇是使用者選用 Wiki.js 的原因。單一執行個體可以並列存放 Markdown 頁面、視覺化編輯器頁面、原始 HTML 頁面和 AsciiDoc 頁面。若您要匯入不想轉換格式的舊內容,這項功能會很有幫助。但這也可能讓同一個 wiki 出現四種內部格式,因此請在第一天決定預設編輯器,並記錄這項決定。

Outline:最佳編輯器,最繁重的先決條件

人們說想要一個使用感受接近商用筆記工具的產品時,通常指的就是 Outline。它是 Node.js 應用程式,截至 2026 年 7 月的目前版本為 1.9.2。其範例環境檔列出了必要項目:透過 DATABASE_URL 使用 PostgreSQL、透過 REDIS_URL 使用 Redis、2 個隨機密鑰,以及可從公用網路存取的 URL

openssl rand -hex 32
openssl rand -hex 32

執行這個命令 2 次並保留兩個值。第一個值設為 SECRET_KEY,第二個值設為 UTILS_SECRET。環境檔的核心內容如下:

NODE_ENV=production
URL=https://docs.example.com
PORT=3000
SECRET_KEY=<first openssl value>
UTILS_SECRET=<second openssl value>
DATABASE_URL=postgres://outline:change_me@postgres:5432/outline
PGSSLMODE=disable
REDIS_URL=redis://redis:6379
FILE_STORAGE=local
FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data

只有在資料庫位於同一台機器或同一個 Docker 網路時,PGSSLMODE=disable 才是正確設定。若資料庫位於其他網路,請省略此設定,否則連線會以明文傳輸。附件不再強制使用物件儲存:FILE_STORAGE=local 會將上傳檔案寫入上述目錄。該目錄必須是容器可寫入的 volume,且必須包含在備份中。若要將檔案儲存至 S3 相容的 bucket,請改用 AWS_* 的值設定 FILE_STORAGE=s3

接下來是容易令人意外的部分。Outline 沒有內建的使用者名稱和密碼登入功能。其範例設定明確指出必須設定第三方登入憑證:「要讓安裝正常運作,以下至少需要設定其中 1 項,否則將沒有登入選項」。文件列出的提供者包括 Google、Slack、Microsoft Entra、Discord,以及任何通用的 OpenID Connect (OIDC) 伺服器,設定方式分別為 OIDC_CLIENT_IDOIDC_CLIENT_SECRETOIDC_AUTH_URIOIDC_TOKEN_URIOIDC_USERINFO_URI

因此,Outline 的實際成本是 Outline 加上 PostgreSQL、Redis 和身分識別提供者。如果團隊已使用 Google Workspace 或 Microsoft Entra 登入,最後一項只需 10 分鐘即可完成,Outline 便非常具吸引力。若不是,您還需要自行代管 Keycloak 或 Authentik 等服務,這會增加另一個需要修補和備份的服務。請據此規劃記憶體:Outline 的建議值約為每個 Web 程序 512 MB,由 WEB_CONCURRENCY 設定,此外還需計入資料庫和 Redis 的用量。

各者如何處理內容讀取權限

BookStack 預設提供本機電子郵件和密碼帳戶,也支援 LDAP、SAML2 和 OIDC 作為替代方案。您可以按角色設定權限,也可以在單一 shelf、book、chapter 或 page 上覆寫權限。由於階層結構固定,權限會以可預期的方式向下繼承。

Wiki.js 同樣提供本機帳戶,並加入一長串可在管理區域啟用的策略。其頁面規則會依路徑模式授予或拒絕存取權限。這項功能強大,但也容易設定錯誤,因為針對 ops/* 撰寫的規則,之後您將頁面歸檔至該路徑下時,會無聲涵蓋所有頁面。

Outline 完全將這項工作交由外部系統處理。成員資格依循您的身分識別提供者,您則可在 Outline 中依 collection 和 group 控制存取權限。人員離開公司後,不會在 Outline 留下本機帳戶;如果身分識別提供者已是您用來撤銷存取權限的系統,這項特性便具有實際優勢。

各者的搜尋運作方式

搜尋功能決定了 wiki 是否真正實用,或只是成為被遺忘檔案的資料夾。

BookStack 會搜尋資料庫,並提供讀者可在 1 分鐘內學會的查詢語言。使用引號指定片語,例如 "london meeting",可要求完全符合該字串。方括號可搜尋標籤:[location=london] 可依標籤名稱、值或兩者比對,支援 !=>=like 等比較運算子。大括號可依中繼資料篩選,例如 {created_after:2016-12-30}。任何完全符合、標籤或篩選條件,都可在前面加上 - 予以排除。BookStack 限制單一查詢可包含的各類條件數量,因此過長的查詢會被截短,而不會直接執行。

Wiki.js 將搜尋視為可插拔模組。文件列出的引擎包括基本資料庫引擎、PostgreSQL 引擎、Elasticsearch、Algolia、AWS CloudSearch 和 Azure Search。基本引擎適合只有數百個頁面的 wiki。如果您使用 PostgreSQL,請在管理區域切換至 PostgreSQL 引擎,因為它會使用資料庫自身的全文索引,而不是簡單比對。只有在 wiki 的規模大到足以接受執行及修補第二個搜尋服務時,才應使用 Elasticsearch。

Outline 會搜尋 PostgreSQL 全文索引。它沒有可選擇或調整的引擎,也會搜尋上傳文件內的文字。對於只有數千份文件的團隊 wiki,這三者之中它所需的維護工作最少。如果搜尋速度日後不敷使用,也沒有可調整的設定。

哪一個適合您

如果您希望今天下午就讓 wiki 運作,且寧願討論內容而不是結構,請選擇 BookStack。它需要的元件最少:一個 PHP 應用程式和一個 MySQL 資料庫。它適合內部操作手冊和客戶文件,也適合大多數作者不是工程師的團隊。三者之中,它也最容易備份,因為完整狀態只包含一份資料庫傾印和 uploads 目錄。

如果您需要其他選項沒有提供的特定編輯器或驗證策略,或者要匯入大量既有的 Markdown 或 AsciiDoc,並希望保留路徑結構,請選擇 Wiki.js。請接受您必須執行較為複雜的堆疊,並固定 major version tag。

如果寫作品質最重要、wiki 是供團隊而非公開使用,且您已經有 identity provider,請選擇 Outline。這樣的配置能提供使用者真正喜歡的編輯器。不要把它選作第一個自行代管的應用程式。

如果三者都不適合,通常是內容類型不相符。掃描的發票和合約應放在 例如 Paperless-ngx 的文件管理系統,而不是 wiki 中;許多 wiki 最後遭到棄用,原因就是有人強行將這類內容放入其中。如要更全面了解哪些項目值得放在自己的伺服器上,請參閱 2026 年自行代管候選清單

資源規模與備份

這 3 個系統都能安裝在小型 VPS 上,但實際最低需求取決於各自背後執行的元件。BookStack 只需要 1 個應用程式程序和 MySQL。Wiki.js 需要 1 個 Node 程序和 PostgreSQL。Outline 需要 1 個 Node 程序、PostgreSQL 和 Redis,通常還會搭配身分識別提供者,因此需要額外配置記憶體。

請同時備份資料庫和上傳檔案,並在依賴該備份前,先將兩者還原至一次性測試執行個體。從未還原過的 wiki 備份並不可靠。對 BookStack 而言,這表示 mysqldump/config volume。對 Wiki.js 和 Outline 而言,這表示 pg_dump 和資料 volume;對 Outline 來說,還包括位於 FILE_STORAGE_LOCAL_ROOT_DIR 中的所有內容。

FAQ

哪個自行託管的 wiki 最容易安裝?

BookStack。它是單一 PHP 應用程式,搭配 MySQL 資料庫。該專案提供適用於 Ubuntu 24.04 的安裝指令碼,可一次設定 Apache、MySQL 8.0 和 PHP 8.3。容器映像只需要 APP_KEY 和資料庫認證資訊。Wiki.js 還需要 Node 執行環境和 PostgreSQL 伺服器;Outline 在此基礎上還需要 Redis 和外部身分識別提供者。

我可以不使用 Google 或其他 SSO 提供者來使用 Outline 嗎?

不行。Outline 沒有本機使用者名稱和密碼登入功能。其範例設定明確指出,至少需要一個第三方登入提供者,否則完全沒有登入選項。您可以使用 Google、Slack、Microsoft Entra、Discord,或任何通用的 OpenID Connect 伺服器,例如自行託管的 Keycloak 或 Authentik。執行該提供者是執行 Outline 的成本之一。

我應該安裝 Wiki.js 3 還是 Wiki.js 2?

Version 2。截至 2026 年 7 月,最新的 version 2 版本是 2.5.314,於 2026 年 5 月發布;version 3 文件明確表示該版本是不穩定的 beta,不應安裝於 production 環境。請將映像固定為 ghcr.io/requarks/wiki:2,而不要使用 latest,因為主要版本變更會修改執行中執行個體的資料庫結構。

哪一個的搜尋功能最好?

它們各有優勢。BookStack 提供查詢語言,支援精確片語、如 [location=london] 的標籤篩選,以及如 {created_after:2016-12-30} 的中繼資料篩選;任何這些條件前面加上 - 都可以反向排除。Outline 不需要設定,且能搜尋上傳檔案內的文字。Wiki.js 的可調整性最高,因為您可以選擇搜尋引擎;當 wiki 超過數百個頁面後,值得立即切換至 PostgreSQL 引擎。

之後可以將內容從一個系統移轉到另一個系統嗎?

部分可以,但應預期需要手動處理。三者都能匯出和匯入 Markdown,因此頁面文字通常可以保留。結構無法完整保留:BookStack 的書籍和章節在 Outline 的巢狀文件中沒有對應項目,而 Wiki.js 路徑也無法對應至 BookStack 的固定階層。附件、權限和頁面歷程最可能遺失,因此在確定進行移轉前,請先匯出範例並檢查這些內容。

#bookstack#wikijs#outline#wiki#self-hosting#knowledge-base