SSD Nodes Learn Hosting plans →
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-10-30

เปรียบเทียบ BookStack, Wiki.js และ Outline ตัวไหนดี

เปรียบเทียบ 3 ซอฟต์แวร์ทำ Wiki แบบ self-hosted วิเคราะห์ความง่ายในการติดตั้ง รูปแบบการแก้ไขเอกสาร และระบบล็อกอิน เพื่อช่วยคุณตัดสินใจเลือกเครื่องมือที่เหมาะกับทีมหรือการใช้งานส่วนตัว

คุณควรเลือกใช้งาน wiki แบบ self-hosted ตัวใด

การทำ wiki แบบ self-hosted ช่วยรวบรวมเอกสารของทีมไว้ในที่เดียวที่สามารถค้นหาได้บนเซิร์ฟเวอร์ที่คุณควบคุมเอง ทั้ง BookStack, Wiki.js และ Outline ต่างก็ทำหน้าที่นี้ได้เหมือนกัน โดยมีความแตกต่างหลักอยู่ที่ขั้นตอนการเตรียมการก่อนเริ่มใช้งานหน้าแรก และการกำหนดสิทธิ์ผู้ใช้งาน

BookStack เป็นซอฟต์แวร์ที่ติดตั้งง่ายที่สุดและมีการกำหนดโครงสร้างที่ชัดเจน Wiki.js มอบตัวเลือกโปรแกรมแก้ไขข้อความที่หลากหลายที่สุดภายใต้โครงสร้างหน้าเว็บแบบต้นไม้ ส่วน Outline มอบประสบการณ์การเขียนที่ดีที่สุดในบรรดาทั้งสามตัว แต่การตั้งค่าสำหรับการใช้งานจริงตามเอกสารจำเป็นต้องใช้ identity provider ภายนอกเพื่อสร้างพื้นที่ทำงานเริ่มต้น

เนื้อหาทั้งหมดด้านล่างนี้อ้างอิงจากเอกสารประกอบและไฟล์การตั้งค่าที่เผยแพร่โดยโครงการนั้นๆ นี่เป็นการเปรียบเทียบความสามารถ ไม่ใช่การทดสอบประสิทธิภาพ (benchmark) หมายเลขเวอร์ชันและข้อกำหนดต่างๆ มีการระบุวันที่ไว้เนื่องจากซอฟต์แวร์ทั้งสามตัวมีการอัปเดตอยู่ตลอดเวลา

โครงสร้างคือทางเลือกที่แท้จริง

BookStack กำหนดรูปแบบเนื้อหาของคุณไว้อย่างตายตัว หน้าหนึ่งหน้าจะอยู่ในหนังสือ หนังสือหนึ่งเล่มอาจมีบท และชั้นวางหนังสือจะรวบรวมหนังสือเหล่านั้นไว้ คุณไม่สามารถสร้างระดับที่ห้าขึ้นมาได้ ข้อจำกัดนี้คือจุดเด่นของผลิตภัณฑ์ ผู้เขียนหน้าใหม่จะทราบทันทีว่าควรวางหน้าเอกสารไว้ที่ใดเพราะมีเพียงที่เดียวที่สามารถวางได้ สิ่งที่ต้องแลกคือเนื้อหาที่ไม่เข้ากับรูปแบบนี้จะถูกบังคับให้ต้องปรับตัวตาม

Wiki.js ใช้โครงสร้างแบบแผนผังเส้นทาง (path tree) คล้ายกับโฟลเดอร์ในดิสก์ หน้าเอกสารที่ ops/backup/restic จะอยู่ในตำแหน่งที่คุณวางไว้ และคุณเป็นผู้กำหนดความลึกเอง ไม่มีสิ่งใดขัดขวางไม่ให้คนสองคนจัดเก็บหัวข้อเดียวกันไว้ภายใต้กิ่งก้านที่ต่างกัน ดังนั้นอินสแตนซ์ของ Wiki.js จึงจำเป็นต้องมีผู้ดูแลโครงสร้างแผนผังเพียงคนเดียว

Outline ใช้คอลเลกชันที่มีเอกสารซ้อนอยู่ในเอกสารอีกที การย้ายเอกสารทำได้โดยการลากด้วยเมาส์ นี่เป็นเครื่องมือที่มีความยืดหยุ่นมากที่สุดในทั้งสามตัว จึงเป็นเครื่องมือที่ปล่อยให้โครงสร้างกระจัดกระจายได้ง่ายที่สุดเช่นกัน

BookStack: การติดตั้งขนาดเล็กที่สุด

BookStack เป็นแอปพลิเคชัน PHP ที่ใช้ MySQL เป็นฐานข้อมูล ณ เดือนตุลาคม 2026 ข้อกำหนดที่ระบุไว้คือ PHP 8.2 หรือใหม่กว่า และ MySQL 8.0 หรือ MariaDB 10.6 หรือใหม่กว่า รวมถึง Composer 2.2 หรือใหม่กว่าหากติดตั้งจากซอร์สโค้ด รุ่นปัจจุบันคือ 26.09 ซึ่งปล่อยออกมาเมื่อวันที่ 24 กันยายน 2026 และรุ่นเสถียรล่าสุดคือ 26.09.2 ซึ่งเป็นรุ่นแก้ไขความปลอดภัยเมื่อวันที่ 20 ตุลาคม 2026 ตั้งแต่รุ่น 26.09 เป็นต้นไป จำเป็นต้องตั้งค่า APP_KEY ซึ่งขั้นตอนการติดตั้งแบบคอนเทนเนอร์ด้านล่างได้ครอบคลุมไว้แล้ว นอกจากนี้ BookStack ยังได้ประกาศแจ้งเตือนความปลอดภัยที่สำคัญของ PHP เมื่อวันที่ 21 ตุลาคม 2026: โปรดอัปเดตแพ็กเกจ PHP พื้นฐาน หรือดึงอิมเมจใหม่และสร้างคอนเทนเนอร์ขึ้นมาใหม่ด้วยอิมเมจที่ได้รับการแก้ไขแล้ว เนื่องจากเวอร์ชันของ BookStack เพียงอย่างเดียวไม่สามารถยืนยันได้ว่า PHP ได้รับการแก้ไขช่องโหว่แล้ว

โครงการรองรับสคริปต์การติดตั้งและคำแนะนำอย่างเป็นทางการสำหรับ Ubuntu LTS ที่ระบุไว้ ได้แก่ 22.04, 24.04 และ 26.04 และบางครั้งอาจเผยแพร่คำแนะนำและสคริปต์ที่ไม่ได้รับการสนับสนุนสำหรับสภาพแวดล้อมอื่น สคริปต์สำหรับ 24.04 จะติดตั้ง Apache, MySQL 8.0 และ PHP 8.3 ให้คุณ สำหรับ 26.04 ให้ใช้ installation-ubuntu-26.04.sh ในคำสั่งด้านล่างแทน ซึ่งจะติดตั้ง MySQL 8.4 และ PHP 8.5

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 และอาจเขียนทับการตั้งค่าเว็บที่มีอยู่เดิมบนเครื่อง" สคริปต์สำหรับ 24.04 จะตรวจสอบการตั้งค่า Apache และข้อมูล MySQL ที่มีอยู่ และจะยกเลิกการติดตั้งหากพบข้อมูลดังกล่าว ให้ใช้คอนเทนเนอร์แทน หรือติดตั้ง BookStack ด้วยตนเองบน LAMP stack ที่มีอยู่บน Ubuntu 24.04

วิธีการใช้คอนเทนเนอร์จะใช้อิมเมจของ LinuxServer.io ซึ่งเป็นหนึ่งในสองรูปแบบคอนเทนเนอร์ชุมชนที่เอกสารของ BookStack ระบุไว้ BookStack ต้องการคีย์เข้ารหัสเซสชันและจะไม่แสดงหน้าเว็บหากไม่มีคีย์ดังกล่าว ดังนั้นให้สร้างคีย์ก่อน

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

คัดลอกค่าที่แสดงผลไปใส่ใน APP_KEY จากนั้นจึงเขียนไฟล์ service บริการนี้ยังต้องการฐานข้อมูล MySQL หรือ MariaDB ที่มีอยู่แล้ว ให้ตั้งค่า DB_* ให้ตรงกับฐานข้อมูลนั้น เนื่องจากตัวอย่างโค้ดไม่ได้สร้างบริการฐานข้อมูลให้

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 และพอร์ต หากตั้งค่าเป็น http://localhost แล้วให้บริการไซต์ผ่าน HTTPS ลิงก์และ redirect ที่สร้างขึ้นจะชี้ไปยังโฮสต์ที่ไม่ถูกต้อง ซึ่งผู้ใช้จะเห็นเป็นหน้าล็อกอินที่วนลูปกลับมาที่เดิม หากคุณยังไม่คุ้นเคยกับไฟล์ compose ให้เริ่มจาก พื้นฐาน Docker Compose บน VPS ก่อนเริ่มขั้นตอนนี้

เปิดใช้งานและตรวจสอบว่าแอปพลิเคชันตอบสนอง ไม่ใช่แค่ตรวจสอบว่าคอนเทนเนอร์ทำงานอยู่เท่านั้น:

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

200 OK หมายความว่าแอปพลิเคชัน PHP เริ่มทำงานและเชื่อมต่อกับฐานข้อมูลได้สำเร็จ หากพบ 500 จำเป็นต้องตรวจสอบ log ข้อผิดพลาดของแอปพลิเคชันเพื่อวินิจฉัยปัญหา โดยปกติ BookStack จะเขียนข้อผิดพลาดลงในไฟล์ log แทนที่จะแสดงใน output ของคอนเทนเนอร์ ดังนั้นให้เปิด ./config/log/bookstack/laravel.log บนโฮสต์เพื่อดูสาเหตุ ส่วน docker compose logs bookstack จะแสดงข้อความเริ่มต้นของคอนเทนเนอร์ ซึ่งอาจไม่มีข้อความแสดงข้อผิดพลาดของแอปพลิเคชันรวมอยู่ด้วย

Wiki.js: โครงสร้างต้นไม้เดียว ตัวแก้ไขหลายแบบ

Wiki.js เป็นแอปพลิเคชัน Node.js การตั้งค่า Docker ตามเอกสารใช้ PostgreSQL ร่วมด้วย แต่ซอฟต์แวร์ยังรองรับ MySQL, MariaDB, MSSQL และ SQLite ด้วย นี่คือไฟล์ compose จากหน้า Docker ของโครงการ:

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_PASSWORD และ DB_PASS พร้อมกันก่อนเรียกใช้ เนื่องจากทั้งสองค่าคือข้อมูลรับรองชุดเดียวกัน และค่าตัวอย่างเป็นข้อมูลสาธารณะ การระบุ tag ไว้ที่ ghcr.io/requarks/wiki:2 มีจุดประสงค์ชัดเจน เอกสารไม่แนะนำ latest เนื่องจากการข้าม major version จะเปลี่ยน schema ของฐานข้อมูลขณะที่ instance กำลังทำงาน

ควรใช้สาย Version 2 ปัจจุบัน ณ วันที่ October 27, 2026 รุ่นล่าสุดของ Version 2 คือ 2.5.317 ซึ่งเป็นรุ่นแก้ไขข้อบกพร่องจาก October 23, 2026 และสร้าง image ใหม่พร้อมการอัปเดตความปลอดภัยล่าสุดของ Node ปัจจุบันมีการเผยแพร่ Version 2 จาก repository requarks/wiki-v2 แยกต่างหาก และ image tag :2 ยังคงติดตามรุ่นเหล่านี้อยู่ Version 3 อยู่ในสถานะ public beta เอกสารการติดตั้งระบุว่า image ของรุ่นนี้ใช้ tag 3.0.0-beta และ tag 3 กับ 3.0 แบบไม่มีส่วนต่อท้ายจะยังใช้งานไม่ได้จนกว่าช่วง beta จะสิ้นสุด ควรถือว่าเป็นรุ่น preview ไม่ใช่เป้าหมายสำหรับ production ส่วนรุ่นก่อนหน้า 2.5.316 จาก October 2, 2026 เพิ่ม utility สำหรับ export เพื่อย้ายเนื้อหาไปยัง Version 3 ในภายหลัง

เมื่อโหลดครั้งแรก Wiki.js จะแนะนำขั้นตอนการตั้งค่าผ่านเบราว์เซอร์ และสร้างบัญชี administrator ให้ จนกว่าจะตั้งค่าเสร็จ ผู้ใดก็ตามที่เข้าถึงพอร์ตได้จะเห็น wizard นี้ ดังนั้นควรวางบริการไว้หลัง reverse proxy และ TLS (transport layer security) ก่อนเปิด firewall Wiki ที่ใช้ hostname ของตนเองสามารถวางไว้หลัง Traefik ด้านหน้าของแอป Docker หลายรายการ ได้อย่างเหมาะสม เมื่อเซิร์ฟเวอร์โฮสต์บริการมากกว่าบริการนี้

เหตุผลที่ผู้ใช้เลือก Wiki.js คือมีตัวเลือก editor หลายแบบในระบบเดียว instance เดียวสามารถเก็บหน้า Markdown, หน้า visual editor, หน้า raw HTML และหน้า AsciiDoc ไว้ร่วมกันได้ วิธีนี้ช่วยเมื่อนำเข้าเนื้อหาเก่าที่อยู่ในรูปแบบซึ่งไม่ต้องการแปลง นอกจากนี้ยังอาจทำให้ wiki เดียวมี house style ถึง 4 แบบ ดังนั้นควรกำหนด editor เริ่มต้นตั้งแต่วันแรกและบันทึกการตัดสินใจนี้ไว้

โครงร่าง: โปรแกรมแก้ไขที่ดีที่สุดและข้อกำหนดเบื้องต้นที่สำคัญ

Outline คือสิ่งที่ผู้คนมักนึกถึงเมื่อต้องการเครื่องมือจดบันทึกที่มีความรู้สึกเหมือนซอฟต์แวร์เชิงพาณิชย์ มันเป็นแอปพลิเคชัน Node.js โดยรุ่นปัจจุบัน ณ วันที่ 27 ตุลาคม 2026 คือ 1.12.0 ซึ่งปล่อยออกมาเมื่อวันที่ 23 ตุลาคม 2026 รุ่นดังกล่าวได้ย้าย Docker image ไปใช้ Node เวอร์ชันที่แก้ไขช่องโหว่ของ Node ที่เพิ่งถูกเปิดเผยไปหลายรายการ ดังนั้นควรปรับปรุงการติดตั้งเวอร์ชันเก่าให้เป็นปัจจุบัน ไฟล์ตัวอย่าง environment ของมันระบุสิ่งที่จำเป็นต้องใช้ ได้แก่ PostgreSQL ผ่าน DATABASE_URL, Redis ผ่าน REDIS_URL, ค่า secret สุ่มสองค่า และ URL ที่สามารถเข้าถึงได้จากสาธารณะ

openssl rand -hex 32
openssl rand -hex 32

ให้รันคำสั่งนั้นสองครั้งและเก็บค่าทั้งสองไว้ ค่าแรกจะกลายเป็น SECRET_KEY และค่าที่สองจะเป็น UTILS_SECRET ส่วนประกอบหลักของไฟล์ environment จะมีลักษณะดังนี้:

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

PGSSLMODE=disable จะถูกต้องก็ต่อเมื่อฐานข้อมูลตั้งอยู่บนเครื่องเดียวกันหรืออยู่บน Docker network เดียวกันเท่านั้น ให้ละค่านี้ไว้หากเป็นการเชื่อมต่อฐานข้อมูลผ่านเครือข่าย มิฉะนั้นการเชื่อมต่อจะส่งผ่านโดยไม่มีการเข้ารหัส สำหรับไฟล์แนบ คุณไม่จำเป็นต้องใช้ object storage อีกต่อไป: FILE_STORAGE=local จะเขียนไฟล์ที่อัปโหลดไปยังไดเรกทอรีด้านบน ซึ่งต้องเป็น volume ที่คอนเทนเนอร์สามารถเขียนข้อมูลได้และเป็นส่วนหนึ่งของข้อมูลที่คุณสำรองไว้ หากคุณต้องการเก็บไฟล์เหล่านั้นไว้ใน bucket ที่รองรับ S3 ให้ตั้งค่า FILE_STORAGE=s3 ด้วยค่า AWS_* แทน

ส่วนนี้คือสิ่งที่ทำให้ผู้คนประหลาดใจ Outline ไม่มีระบบล็อกอินด้วยชื่อผู้ใช้และรหัสผ่านในตัว ไฟล์การตั้งค่าตัวอย่างของมันระบุว่าจำเป็นต้องใช้ข้อมูลรับรองการลงชื่อเข้าใช้จากบุคคลที่สาม: "จำเป็นต้องมีอย่างน้อยหนึ่งรายการจากรายการเหล่านี้เพื่อให้การติดตั้งใช้งานได้ มิฉะนั้นคุณจะไม่มีตัวเลือกในการลงชื่อเข้าใช้" ผู้ให้บริการที่ระบุไว้ในเอกสารประกอบ ได้แก่ Google, Slack, Microsoft Entra, Discord และเซิร์ฟเวอร์ OpenID Connect (OIDC) ทั่วไปผ่าน OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI และ OIDC_USERINFO_URI พื้นที่ทำงานที่มีอยู่เดิมยังสามารถเปิดใช้งาน passkeys และลิงก์หรือรหัสผ่านอีเมลได้ การล็อกอินด้วยอีเมลจำเป็นต้องใช้ SMTP และไม่สามารถข้ามขั้นตอน SSO สำหรับบัญชีที่เชื่อมโยงกับผู้ให้บริการ SSO ได้

ดังนั้น ต้นทุนที่แท้จริงของการตั้งค่า Outline ในระดับ production ตามเอกสารประกอบคือ Outline บวกกับ PostgreSQL บวกกับ Redis และผู้ให้บริการยืนยันตัวตน (identity provider) หากทีมของคุณลงชื่อเข้าใช้ด้วย Google Workspace หรือ Microsoft Entra อยู่แล้ว Outline จะเป็นตัวเลือกที่น่าสนใจมาก แต่ถ้าไม่ใช่ คุณจะต้องทำหน้าที่ self-host บริการอย่างเช่น Keycloak หรือ Authentik เพิ่มเติม ซึ่งถือเป็นบริการที่สองที่คุณต้องคอยแพตช์และสำรองข้อมูล ควรจัดสรรหน่วยความจำให้เหมาะสม โดยคำแนะนำของ Outline เองระบุว่าต้องใช้หน่วยความจำประมาณ 512 MB ต่อหนึ่ง web process ซึ่งกำหนดโดย WEB_CONCURRENCY นอกเหนือจากที่ต้องใช้สำหรับฐานข้อมูลและ Redis

การจัดการสิทธิ์การเข้าถึงข้อมูลของแต่ละระบบ

BookStack รองรับการใช้งานบัญชีอีเมลและรหัสผ่านภายในระบบโดยค่าเริ่มต้น และยังรองรับ LDAP, SAML2 และ OIDC เป็นทางเลือกเพิ่มเติม การกำหนดสิทธิ์จะทำผ่านบทบาท (role) และสามารถตั้งค่าสิทธิ์เฉพาะสำหรับ Shelf, Book, Chapter หรือ Page ได้ สิทธิ์ของ Book และ Chapter จะถูกสืบทอดไปยังเนื้อหาที่อยู่ภายในโดยอัตโนมัติหากไม่มีการตั้งค่าทับ ส่วนสิทธิ์ของ Shelf จะต้องคัดลอกไปยัง Book ที่เกี่ยวข้องอย่างชัดเจน

Wiki.js รองรับบัญชีผู้ใช้ภายในและมีกลยุทธ์การยืนยันตัวตนอีกจำนวนมากที่คุณสามารถเปิดใช้งานได้ในส่วนผู้ดูแลระบบ กฎการเข้าถึงหน้าเว็บจะใช้การอนุญาตหรือปฏิเสธตามรูปแบบของ path ซึ่งเป็นวิธีที่ทรงพลังแต่ผิดพลาดได้ง่าย เนื่องจากกฎที่เขียนขึ้นสำหรับ ops/* จะมีผลครอบคลุมทุกหน้าเว็บที่คุณจัดเก็บไว้ภายใต้ path นั้นโดยอัตโนมัติในอนาคต

Outline ใช้ Identity Provider ของคุณสำหรับการเป็นสมาชิกผ่าน SSO และภายใน Outline คุณสามารถควบคุมการเข้าถึงได้ตาม Collection, Document และ Group ผู้ใช้ที่ถูกลบออกจาก Identity Provider จะถูกออกจากระบบเมื่อโหลดหน้า Outline ในครั้งถัดไป หากต้องการยุติเซสชันที่มีอยู่ทันที ให้ระงับ (suspend) บัญชีผู้ใช้นั้นภายใน Outline

การทำงานของระบบค้นหาในแต่ละซอฟต์แวร์

ระบบค้นหาคือสิ่งที่ตัดสินว่าวิกิจะมีประโยชน์หรือกลายเป็นเพียงโฟลเดอร์เก็บไฟล์ที่ถูกลืม

BookStack จะค้นหาข้อมูลในฐานข้อมูลและมอบภาษาสำหรับสืบค้นที่ผู้ใช้เรียนรู้ได้ในเวลาเพียงหนึ่งนาที การใส่เครื่องหมายคำพูดให้กับวลี เช่น "london meeting" จะเป็นการค้นหาข้อความที่ตรงกันทุกประการ การใช้เครื่องหมายก้ามปูเป็นการค้นหาด้วยแท็ก เช่น [location=london] ซึ่งจับคู่ตามชื่อแท็ก ค่าของแท็ก หรือทั้งสองอย่าง โดยรองรับการเปรียบเทียบด้วย !=, >= และ like ส่วนการใช้เครื่องหมายปีกกาจะเป็นการกรองข้อมูลจาก metadata ดังเช่น {created_after:2016-12-30} ทั้งคำค้นหาแบบตรงตัว แท็ก หรือตัวกรอง สามารถปฏิเสธเงื่อนไขได้โดยการใส่ - ไว้หน้าคำนั้นๆ BookStack มีการจำกัดจำนวนคำค้นหาในแต่ละประเภทต่อหนึ่งการสืบค้น ดังนั้นคำค้นหาที่ยาวเกินไปจะถูกตัดออกแทนที่จะประมวลผลทั้งหมด

Wiki.js ออกแบบระบบค้นหาให้เป็นโมดูลที่ถอดเปลี่ยนได้ โดยเอนจินที่รองรับตามเอกสารประกอบ ได้แก่ เอนจินฐานข้อมูลพื้นฐาน, เอนจิน PostgreSQL, Elasticsearch, Algolia, AWS CloudSearch และ Azure Search สำหรับเอนจินพื้นฐานจะจับคู่เฉพาะชื่อเรื่อง คำอธิบาย และ path เท่านั้น ไม่รวมถึงเนื้อหาภายในหน้า หากคุณใช้งาน PostgreSQL ควรเปลี่ยนไปใช้เอนจิน PostgreSQL ในหน้าผู้ดูแลระบบ เพราะจะใช้ดัชนี full text ของฐานข้อมูลโดยตรงแทนการจับคู่แบบธรรมดา ส่วน Elasticsearch เหมาะสำหรับวิกิที่มีขนาดใหญ่จนคุณยอมรับภาระในการดูแลและอัปเดตแพตช์ให้กับบริการค้นหาแยกต่างหากได้

Outline ใช้ดัชนี full text ของ PostgreSQL ในการค้นหา ระบบค้นหาด้วยคำหลักที่มีมาให้ในตัวไม่จำเป็นต้องใช้บริการค้นหาแยกต่างหาก สำหรับวิกิของทีมที่มีจำนวนเอกสารหลักพันต้นๆ นี่คือตัวเลือกที่ใช้แรงในการดูแลรักษาน้อยที่สุดในบรรดาทั้งสามซอฟต์แวร์

ตัวเลือกที่เหมาะสมสำหรับคุณ

เลือก BookStack หากคุณต้องการให้ wiki ใช้งานได้ภายในบ่ายวันนี้ และต้องการเน้นการจัดการเนื้อหามากกว่าการวางโครงสร้าง ระบบนี้มีส่วนประกอบน้อยที่สุด คือแอปพลิเคชัน PHP หนึ่งตัวและฐานข้อมูล MySQL หนึ่งตัว เหมาะสำหรับคู่มือการทำงานภายใน (runbooks) และเอกสารสำหรับลูกค้า รวมถึงทีมที่ผู้เขียนส่วนใหญ่ไม่ใช่ทีมวิศวกร นอกจากนี้ยังเป็นระบบที่สำรองข้อมูลได้ง่ายที่สุดในบรรดาสามตัวเลือก เนื่องจากสถานะของระบบประกอบด้วยการดัมพ์ฐานข้อมูลหนึ่งไฟล์รวมกับไฟล์ที่อัปโหลดและไฟล์การตั้งค่า .env ซึ่งรวมถึง APP_KEY ด้วย

เลือก Wiki.js หากคุณต้องการตัวแก้ไขเฉพาะทางหรือกลยุทธ์การยืนยันตัวตนที่ระบบอื่นไม่มีให้ หรือหากคุณกำลังนำเข้าเนื้อหา Markdown หรือ AsciiDoc จำนวนมากและต้องการรักษาโครงสร้าง path เดิมไว้ โปรดยอมรับว่าคุณกำลังใช้งาน stack ที่หนักกว่า และควรล็อกเวอร์ชันหลัก (major version) ไว้

เลือก Outline หากคุณภาพของการเขียนเป็นสิ่งสำคัญที่สุด wiki นี้มีไว้สำหรับทีมมากกว่าสาธารณะ และคุณมีผู้ให้บริการยืนยันตัวตน (identity provider) อยู่แล้ว ระบบจะตอบแทนการตั้งค่าดังกล่าวด้วยตัวแก้ไขที่ผู้ใช้งานจะรู้สึกสนุกกับการใช้งานจริง อย่าเลือกใช้ระบบนี้เป็นแอปพลิเคชันแรกที่คุณทำ self-host

หากไม่มีตัวเลือกใดในสามตัวนี้ที่เหมาะสม สาเหตุส่วนใหญ่มักเกิดจากประเภทของเนื้อหาที่ไม่ตรงกัน ใบแจ้งหนี้และสัญญาที่สแกนมาควรจัดเก็บใน ระบบจัดการเอกสารอย่าง Paperless-ngx แทนที่จะเก็บใน wiki และการฝืนนำไปใส่ใน wiki คือสาเหตุที่ทำให้ wiki จำนวนมากถูกทิ้งร้างในที่สุด อีกกรณีที่พบบ่อยคือการต้องการพื้นที่ทำงาน (workspace) แทนที่จะเป็น wiki ซึ่งมีทั้งเอกสาร ตาราง และกระดานไวท์บอร์ดบนผืนผ้าใบเดียวกัน ซึ่งในกรณีนี้ พื้นที่ทำงานแบบ self-hosted อย่าง AFFiNE จะเหมาะสมกว่าทั้งสามตัวเลือกข้างต้น สำหรับมุมมองที่กว้างขึ้นเกี่ยวกับสิ่งที่ควรนำมาติดตั้งบนเซิร์ฟเวอร์ของคุณ โปรดดู รายการแนะนำสำหรับการทำ self-hosting ประจำปี 2026

การจัดสรรขนาดและการสำรองข้อมูล

ทั้งสามแอปพลิเคชันสามารถทำงานบน VPS ขนาดเล็กได้ โดยเกณฑ์ขั้นต่ำที่ใช้งานได้จริงจะแตกต่างกันไปตามสิ่งที่ทำงานอยู่เบื้องหลัง BookStack ประกอบด้วยกระบวนการแอปพลิเคชันหนึ่งรายการและ MySQL ส่วน Wiki.js ประกอบด้วยกระบวนการ Node และ PostgreSQL สำหรับ Outline ประกอบด้วยกระบวนการ Node, PostgreSQL และ Redis โดยมักจะมีระบบยืนยันตัวตนทำงานควบคู่กันไปด้วย ซึ่งเป็นเหตุผลว่าทำไม Outline จึงเป็นแอปพลิเคชันที่ต้องการหน่วยความจำมากกว่าแอปอื่น

ให้สำรองข้อมูลฐานข้อมูลและไฟล์ที่อัปโหลดไว้ด้วยกัน และทดสอบกู้คืนข้อมูลทั้งสองส่วนลงในอินสแตนซ์ทดลองอย่างน้อยหนึ่งครั้งก่อนที่จะพึ่งพาการสำรองข้อมูลนั้น การสำรองข้อมูลวิกิที่ไม่มีใครเคยทดสอบกู้คืนถือเป็นเพียงการคาดเดาเท่านั้น สำหรับ BookStack หมายถึงการสำรอง mysqldump ร่วมกับ volume /config สำหรับ Wiki.js และ Outline หมายถึงการสำรอง pg_dump ร่วมกับ volume ข้อมูล และสำหรับ Outline ต้องรวมถึงสิ่งที่อยู่ใน FILE_STORAGE_LOCAL_ROOT_DIR ด้วย

FAQ

Wiki แบบ self-hosted ตัวใดติดตั้งง่ายที่สุด?

BookStack เป็นแอปพลิเคชัน PHP เดี่ยวที่ใช้ฐานข้อมูล MySQL โดยทางโครงการมีสคริปต์ติดตั้งสำหรับ Ubuntu 24.04 ที่ช่วยตั้งค่า Apache, MySQL 8.0 และ PHP 8.3 ให้เสร็จสิ้นในการรันครั้งเดียว สำหรับ container image นั้นจำเป็นต้องมี APP_KEY, APP_URL และข้อมูลการเข้าถึงฐานข้อมูลที่มีอยู่เดิม ส่วน Wiki.js ต้องใช้ Node runtime และเซิร์ฟเวอร์ PostgreSQL เพิ่มเติม และ Outline ต้องการ Redis รวมถึงผู้ให้บริการยืนยันตัวตนภายนอกสำหรับการตั้งค่าเริ่มต้นตามเอกสารแนะนำ

ฉันสามารถใช้ Outline โดยไม่ผ่าน Google หรือผู้ให้บริการ SSO อื่นได้หรือไม่?

การตั้งค่าสำหรับการใช้งานจริงตามเอกสารกำหนดให้ต้องมีผู้ให้บริการเพื่อสร้าง workspace เริ่มต้น Outline ไม่มีระบบล็อกอินด้วยชื่อผู้ใช้และรหัสผ่านภายในตัว ตัวอย่างการตั้งค่าระบุว่าจำเป็นต้องมีผู้ให้บริการล็อกอินภายนอกอย่างน้อยหนึ่งราย มิฉะนั้นคุณจะไม่มีช่องทางการล็อกอินเลย คุณสามารถใช้ Google, Slack, Microsoft Entra, Discord หรือเซิร์ฟเวอร์ OpenID Connect ทั่วไป เช่น Keycloak หรือ Authentik ที่ติดตั้งเองได้ สำหรับ workspace ที่มีอยู่แล้ว สามารถเปิดใช้งาน passkeys หรือลิงก์และรหัสผ่านอีเมลได้ โดยต้องใช้ SMTP สำหรับการล็อกอินผ่านอีเมล ส่วนบัญชีที่ผูกกับ SSO จะยังคงต้องใช้ผู้ให้บริการรายเดิม

ฉันควรติดตั้ง Wiki.js 3 หรือ Wiki.js 2?

ควรใช้เวอร์ชัน 2 ณ วันที่ 27 ตุลาคม 2026 เวอร์ชัน 2 ล่าสุดคือ 2.5.317 ซึ่งปล่อยออกมาเมื่อวันที่ 23 ตุลาคม 2026 ส่วนเวอร์ชัน 3 ยังคงเป็นรุ่นเบต้าที่ใช้ tag เป็น 3.0.0-beta คุณควรล็อกเวอร์ชันของ image ไว้ที่ ghcr.io/requarks/wiki:2 แทนที่จะใช้ latest เนื่องจากการเปลี่ยนเวอร์ชันหลักจะส่งผลต่อโครงสร้างฐานข้อมูลของ instance ที่กำลังทำงานอยู่

ตัวใดมีระบบค้นหาที่ดีที่สุด?

แต่ละตัวมีจุดเด่นต่างกัน BookStack มีภาษาสำหรับสืบค้น (query language) ที่รองรับวลีที่แม่นยำ, การกรองด้วย tag เช่น [location=london] และการกรองด้วย metadata เช่น {created_after:2016-12-30} โดยสามารถใช้ - นำหน้าคำเพื่อปฏิเสธเงื่อนไขได้ ระบบค้นหาด้วยคำหลักของ Outline ไม่จำเป็นต้องใช้บริการค้นหาแยกต่างหาก ส่วน Wiki.js ปรับแต่งได้มากที่สุดเพราะคุณสามารถเลือก engine เองได้ โดย engine แบบ PostgreSQL สามารถค้นหาเนื้อหาภายในหน้าเพจได้ซึ่ง engine พื้นฐานทำไม่ได้

ฉันสามารถย้ายเนื้อหาจากตัวหนึ่งไปอีกตัวหนึ่งในภายหลังได้หรือไม่?

ทำได้บางส่วนและคุณควรเตรียมใจสำหรับการทำงานด้วยตนเอง ทั้งสามตัวรองรับการส่งออกเป็น Markdown แต่ระบบนำเข้าของ BookStack รองรับเฉพาะรูปแบบ Portable ZIP ของตนเองเท่านั้น ดังนั้นการใช้เพียงไฟล์ Markdown จึงไม่สามารถนำเข้าสู่ BookStack ได้โดยตรง โครงสร้างข้อมูลมักจะไม่คงเดิม: หนังสือและบทของ BookStack ไม่มีรูปแบบที่เทียบเท่าในเอกสารแบบซ้อนกันของ Outline และ path ของ Wiki.js ก็ไม่สามารถจับคู่กับลำดับชั้นที่ตายตัวของ BookStack ได้ สิ่งที่มักจะสูญหายคือไฟล์แนบ, สิทธิ์การเข้าถึง และประวัติการแก้ไขหน้าเพจ ดังนั้นควรทดลองส่งออกตัวอย่างข้อมูลและตรวจสอบผลลัพธ์ก่อนตัดสินใจย้ายข้อมูลจริง

บทความนี้มีประโยชน์หรือไม่

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