SSD Nodes Learn Hosting plans →
指南 Matt Connor作者: Matt Connor · 已更新 2026-08-13

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

比較 BookStack、Wiki.js 與 Outline 的部署重量、編輯方式、登入選項與搜尋,並指出適合單人管理者及團隊的選擇。

應該執行哪個自架 wiki

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

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

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

結構才是真正的選擇

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

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

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

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

執行前請先閱讀該腳本中的警告。文件明確指出,此腳本「ONLY FOR A FRESH OS,會安裝 Apache、MySQL 8.0 和 PHP 8.3,並可能 OVERWRITE 該機器上現有的網頁服務設定」。如果伺服器目前已在 port 80 上提供服務,腳本會接管該埠並重寫 Apache 設定。這種情況應改用容器,或在 Ubuntu 24.04 上現有的 LAMP stack 之上手動安裝 BookStack。

容器方式使用 LinuxServer.io image,這也是 BookStack 文件建議的選項。BookStack 需要 session encryption key,沒有該金鑰就不會提供頁面,因此請先產生金鑰。

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 必須符合讀者實際輸入的位址,包括 scheme 和任何 port。請將它設為 http://localhost,然後透過 HTTPS 提供網站;否則產生的連結和重新導向會指向錯誤的主機,讀者會看到不斷重新導回自身的登入頁面。如果你不熟悉 compose files,請先閱讀 VPS 上的 Docker Compose 基礎,再進行本節操作。

啟動服務,並確認應用程式確實有回應,而不只是確認 container 正在執行:

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,因為主要版本升級會在執行中的執行個體變更資料庫結構。

應使用 Version 2 系列。截至 2026 年 7 月,最新的 Version 2 版本是 2.5.314,於 2026 年 5 月發布。Version 3 已存在,但其官方文件明確寫道:「此網站提供的是 Wiki.js 3.0 的不穩定 beta 版本。請勿將其安裝在 production 環境中。」請將 :3 標籤視為預覽版本。

首次載入時,Wiki.js 會引導你在瀏覽器中完成設定,並建立 administrator 帳號。在完成設定前,任何能連線到該連接埠的人都會看到設定精靈。因此,在開放防火牆前,請先將服務置於 reverse proxy 和 TLS(transport layer security)後方。當伺服器執行的服務不只這一項時,將 wiki 設定在獨立的主機名稱上,搭配 讓 Traefik 位於多個 Docker 應用程式前方 是自然的做法。

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

Outline:最佳編輯器,也是前置條件最繁重的選擇

人們通常所說的「想要用起來像商用筆記工具」,指的就是 Outline。它是 Node.js 應用程式,截至 2026 年 7 月的目前版本為 1.9.2。其範例環境檔列出了必要項目:透過 DATABASE_URL 使用 PostgreSQL、透過 REDIS_URL 使用 Redis、兩組隨機 secret,以及可從公開網路存取的 URL

openssl rand -hex 32
openssl rand -hex 32

執行兩次並保留兩個值。第一個值會成為 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 network 時,PGSSLMODE=disable 才是正確設定。若資料庫是透過網路連線,請省略此項,否則連線內容會以明文傳輸。附件不再強制要求使用 object storage:FILE_STORAGE=local 會將上傳檔案寫入上述目錄。該目錄必須是容器可寫入的 volume,且必須納入備份範圍。若要將檔案存放在相容 S3 的 bucket 中,請改用 AWS_* 的值設定 FILE_STORAGE=s3

接下來是容易讓人意外的部分。Outline 沒有內建的 username 和 password 登入功能。其範例設定明確表示必須提供第三方登入憑證:「至少需要下列其中一項,安裝才能正常運作,否則將沒有任何登入選項」。文件列出的 provider 包括 Google、Slack、Microsoft Entra、Discord,以及任何通用的 OpenID Connect (OIDC) server,可透過 OIDC_CLIENT_IDOIDC_CLIENT_SECRETOIDC_AUTH_URIOIDC_TOKEN_URIOIDC_USERINFO_URI 設定。

因此,Outline 的實際成本是 Outline 加上 PostgreSQL、Redis 與 identity provider。如果團隊已經使用 Google Workspace 或 Microsoft Entra 登入,最後一項只需 10 分鐘即可完成,Outline 就會非常有吸引力。若不是,還需要自行代管例如 Keycloak 或 Authentik 的服務,這代表又多了一個需要修補與備份的服務。請據此規劃記憶體:Outline 的建議值約為每個 web process 512 MB,由 WEB_CONCURRENCY 設定;這還不包含資料庫與 Redis 的需求。

各者如何處理讀取權限

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

Wiki.js 同樣提供本機帳號,並加入一長串可在管理區啟用的驗證策略。其 page 規則會依路徑模式授予或拒絕存取權。這項功能雖然強大,也很容易設定錯誤,因為針對 ops/* 撰寫的規則,之後會無聲涵蓋你歸檔到該路徑下的每個 page。

Outline 完全交由外部系統處理這項問題。成員資格會依循你的 identity provider,而你可在 Outline 內依 collection 和 group 控制存取權。人員離開公司後,不會留下本機帳號;如果 identity provider 本來就是你用來取消佈建帳號的系統,這項優勢相當實際。

各平台的搜尋方式

搜尋功能決定 wiki 是值得使用的知識庫,還是被遺忘檔案的集合。

BookStack 會搜尋資料庫,並提供讀者只需幾分鐘即可學會的查詢語法。以 "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,正是許多 wiki 最後遭到棄用的原因。另一種常見的不匹配,是你需要的其實是 workspace,而不是 wiki;你希望在同一個畫布上使用文件、表格與白板,這時 自架的 AFFiNE workspace 比上述三者更適合。若要更全面了解還有哪些服務值得部署在自己的伺服器上,請參閱 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。截至 July 2026,最新的 version 2 版本是 2.5.314,發布於 May 2026。Version 3 文件明確指出,該版本是 unstable beta,不應安裝在 production 環境。請將映像固定為 ghcr.io/requarks/wiki:2,不要使用 latest,因為 major version 變更會在執行中的 instance 修改 database schema。

哪一個的搜尋功能最好?

三者各有優勢。BookStack 提供讀者查詢語言,支援精確片語、[location=london] 等標籤篩選,以及 {created_after:2016-12-30} 等 metadata 篩選;任何這些條件前面都可以加上 - 來排除。Outline 不需要設定,並且會搜尋上傳檔案中的文字。Wiki.js 的可調整性最高,因為你可以選擇搜尋引擎;當 wiki 超過數百個頁面後,值得立即改用 PostgreSQL 引擎。

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

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

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