เปรียบเทียบ BookStack, Wiki.js และ Outline ตัวไหนดี
เปรียบเทียบ 3 ซอฟต์แวร์ทำ Wiki แบบ self-hosted วิเคราะห์ความง่ายในการติดตั้ง รูปแบบการแก้ไขเอกสาร และระบบล็อกอิน เพื่อช่วยคุณตัดสินใจเลือกเครื่องมือที่เหมาะกับทีมหรือการใช้งานส่วนตัว
คุณควรเลือกใช้งาน self-hosted wiki ตัวใด
การทำ self-hosted wiki ช่วยรวบรวมเอกสารของทีมไว้ในที่เดียวที่ค้นหาได้บนเซิร์ฟเวอร์ที่คุณควบคุมเอง โดย BookStack, Wiki.js และ Outline ต่างก็ทำหน้าที่นี้ได้เหมือนกัน แต่มีความแตกต่างกันในแง่ของขั้นตอนการติดตั้งก่อนเริ่มใช้งานหน้าแรก และเงื่อนไขในการอนุญาตให้ผู้ใช้เข้าสู่ระบบ
BookStack เป็นซอฟต์แวร์ที่ติดตั้งง่ายที่สุดและมีการกำหนดโครงสร้างการจัดเก็บข้อมูลที่ชัดเจนตายตัว Wiki.js มอบทางเลือกของเครื่องมือแก้ไขเอกสารที่หลากหลายที่สุดภายใต้โครงสร้างแบบ tree เดียวกัน ส่วน 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.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 ซึ่งอาจเขียนทับการตั้งค่าเว็บที่มีอยู่เดิมบนเครื่อง" หากเซิร์ฟเวอร์ของคุณมีการใช้งานพอร์ต 80 อยู่แล้ว สคริปต์จะเข้ายึดพอร์ตนั้นและเขียนทับการตั้งค่า Apache ใหม่ ในกรณีนี้ให้ใช้คอนเทนเนอร์แทน หรือติดตั้ง BookStack ด้วยตนเองบน LAMP stack ที่มีอยู่บน Ubuntu 24.04
แนวทางการใช้คอนเทนเนอร์จะใช้ image จาก LinuxServer.io ซึ่งเป็นตัวเลือกที่เอกสารของ BookStack แนะนำ BookStack ต้องการคีย์สำหรับเข้ารหัส session และจะไม่แสดงหน้าเว็บหากไม่มีคีย์ดังกล่าว ดังนั้นให้สร้างคีย์ขึ้นมาก่อน
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkeyคัดลอกค่าที่แสดงผลไปใส่ใน APP_KEY จากนั้นเขียนไฟล์ service:
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-stoppedAPP_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/login200 OK หมายความว่าแอปพลิเคชัน PHP เริ่มทำงานและเชื่อมต่อกับฐานข้อมูลได้สำเร็จ ส่วน 500 มักหมายความว่า APP_KEY ว่างเปล่าหรือไม่ตรงกับข้อมูลรับรองของฐานข้อมูล โดย 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 พร้อมกันก่อนเริ่มรัน เนื่องจากเป็นข้อมูลรับรองชุดเดียวกันและค่าตัวอย่างนั้นเป็นข้อมูลสาธารณะ แท็กถูกล็อกไว้ที่ ghcr.io/requarks/wiki:2 โดยเจตนา เอกสารแนะนำไม่ให้ใช้ latest เนื่องจากการข้ามเวอร์ชันหลักจะทำให้ schema ของฐานข้อมูลเปลี่ยนไปในขณะที่อินสแตนซ์กำลังทำงานอยู่
เวอร์ชัน 2 คือเวอร์ชันที่ควรใช้งาน ณ เดือนกรกฎาคม 2026 เวอร์ชันล่าสุดของสาย 2 คือ 2.5.314 ซึ่งปล่อยออกมาเมื่อเดือนพฤษภาคม 2026 ส่วนเวอร์ชัน 3 นั้นมีอยู่จริง แต่เอกสารระบุไว้ว่า: "เว็บไซต์นี้สำหรับรุ่นเบต้าที่ไม่เสถียรของ Wiki.js 3.0 คุณไม่ควรติดตั้งรุ่นนี้ในสภาพแวดล้อมใช้งานจริง (production)" ให้ถือว่าแท็ก :3 เป็นเพียงรุ่นตัวอย่างเท่านั้น
ในการโหลดครั้งแรก Wiki.js จะนำคุณเข้าสู่ขั้นตอนการตั้งค่าผ่านเบราว์เซอร์เพื่อสร้างบัญชีผู้ดูแลระบบ จนกว่าคุณจะทำเสร็จสิ้น ใครก็ตามที่เข้าถึงพอร์ตดังกล่าวจะพบกับวิซาร์ดนี้ ดังนั้นควรนำบริการไปไว้หลัง reverse proxy และ TLS (transport layer security) ของคุณก่อนที่จะเปิด firewall การทำ wiki บน hostname ของตนเองนั้นเหมาะสมที่สุดเมื่อวางไว้หลัง Traefik หน้าแอป Docker หลายตัว ในกรณีที่เซิร์ฟเวอร์โฮสต์บริการมากกว่าหนึ่งรายการ
ตัวเลือกของตัวแก้ไข (editor) คือเหตุผลที่ผู้คนเลือกใช้ Wiki.js อินสแตนซ์เดียวสามารถเก็บหน้า Markdown, หน้า visual editor, หน้า HTML ดิบ และหน้า AsciiDoc ไว้ด้วยกันได้ ซึ่งช่วยได้มากเมื่อคุณนำเข้าเนื้อหาเก่าในรูปแบบที่คุณไม่ต้องการแปลงไฟล์ นอกจากนี้ยังอาจนำไปสู่การมีสไตล์การเขียนถึง 4 แบบใน wiki เดียวกัน ดังนั้นควรตัดสินใจเลือกตัวแก้ไขเริ่มต้นตั้งแต่วันแรกและจดบันทึกการตัดสินใจนั้นไว้
โครงร่าง: โปรแกรมแก้ไขที่ดีที่สุด, ข้อกำหนดเบื้องต้นที่หนักหน่วง
Outline คือสิ่งที่ผู้คนมักหมายถึงเมื่อต้องการเครื่องมือจดบันทึกที่ให้ความรู้สึกเหมือนซอฟต์แวร์เชิงพาณิชย์ มันเป็นแอปพลิเคชัน Node.js โดยรุ่นล่าสุด ณ เดือนกรกฎาคม 2026 คือ 1.9.2 ไฟล์สภาพแวดล้อมตัวอย่างของมันระบุสิ่งที่จำเป็นต้องใช้ ได้แก่ PostgreSQL ผ่าน DATABASE_URL, Redis ผ่าน REDIS_URL, รหัสลับแบบสุ่มสองชุด และ 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/dataPGSSLMODE=disable จะถูกต้องก็ต่อเมื่อฐานข้อมูลอยู่บนเครื่องเดียวกันหรืออยู่ใน Docker network เดียวกันเท่านั้น ให้เว้นว่างไว้หากฐานข้อมูลอยู่ข้ามเครือข่าย มิฉะนั้นการเชื่อมต่อจะถูกส่งผ่านโดยไม่มีการเข้ารหัส การแนบไฟล์ไม่บังคับให้คุณต้องใช้ object storage อีกต่อไป: FILE_STORAGE=local จะเขียนไฟล์ที่อัปโหลดไปยังไดเรกทอรีด้านบน ซึ่งต้องเป็น volume ที่คอนเทนเนอร์สามารถเขียนข้อมูลได้และเป็นส่วนหนึ่งของระบบสำรองข้อมูลของคุณ ให้ตั้งค่า FILE_STORAGE=s3 ด้วยค่า AWS_* แทนหากคุณต้องการเก็บไฟล์เหล่านั้นไว้ใน S3 compatible bucket
ส่วนนี้คือสิ่งที่ทำให้ผู้คนประหลาดใจ Outline ไม่มีระบบล็อกอินด้วยชื่อผู้ใช้และรหัสผ่านในตัว ไฟล์การตั้งค่าตัวอย่างระบุว่าจำเป็นต้องใช้ข้อมูลรับรองการลงชื่อเข้าใช้จากบุคคลที่สาม: "จำเป็นต้องมีอย่างน้อยหนึ่งรายการเพื่อให้การติดตั้งใช้งานได้ มิฉะนั้นคุณจะไม่มีตัวเลือกในการลงชื่อเข้าใช้" ผู้ให้บริการที่ระบุไว้ในเอกสารประกอบ ได้แก่ Google, Slack, Microsoft Entra, Discord และเซิร์ฟเวอร์ OpenID Connect (OIDC) ทั่วไปผ่าน OIDC_CLIENT_ID, OIDC_CLIENT_SECRET, OIDC_AUTH_URI, OIDC_TOKEN_URI และ OIDC_USERINFO_URI
ดังนั้น ต้นทุนที่แท้จริงของ Outline คือ Outline บวกกับ PostgreSQL บวกกับ Redis และผู้ให้บริการยืนยันตัวตน หากทีมของคุณลงชื่อเข้าใช้ด้วย 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) ได้ เนื่องจากโครงสร้างลำดับชั้นมีความตายตัว สิทธิ์จึงถูกสืบทอดลงไปตามลำดับชั้นในรูปแบบที่คาดการณ์ได้
Wiki.js รองรับบัญชีผู้ใช้ภายในเช่นกัน และเพิ่มรายการกลยุทธ์การยืนยันตัวตนจำนวนมากที่คุณสามารถเปิดใช้งานได้ในส่วนผู้ดูแลระบบ กฎการเข้าถึงหน้าเว็บของระบบนี้จะอนุญาตหรือปฏิเสธการเข้าถึงตามรูปแบบของ path ซึ่งเป็นฟีเจอร์ที่ทรงพลังแต่ก็ผิดพลาดได้ง่าย เนื่องจากกฎที่เขียนขึ้นสำหรับ ops/* จะครอบคลุมทุกหน้าเว็บที่คุณจัดเก็บไว้ภายใต้ path นั้นโดยอัตโนมัติ
Outline มอบหมายหน้าที่การจัดการสิทธิ์ให้กับระบบภายนอกทั้งหมด การเป็นสมาชิกจะขึ้นอยู่กับผู้ให้บริการยืนยันตัวตน (identity provider) ของคุณ และภายใน Outline คุณสามารถควบคุมการเข้าถึงได้ตามคอลเลกชัน (collection) และกลุ่ม (group) วิธีนี้จะไม่มีบัญชีผู้ใช้ค้างอยู่ในระบบเมื่อมีพนักงานลาออก ซึ่งถือเป็นข้อได้เปรียบที่สำคัญเมื่อผู้ให้บริการยืนยันตัวตนเป็นระบบที่คุณใช้จัดการการยกเลิกสิทธิ์การใช้งานอยู่แล้ว
การทำงานของระบบค้นหาในแต่ละซอฟต์แวร์
ระบบค้นหาคือสิ่งที่ตัดสินว่าวิกิจะมีประโยชน์หรือกลายเป็นเพียงแหล่งรวมไฟล์ที่ถูกลืม
BookStack ทำการค้นหาในฐานข้อมูลและมอบภาษาสำหรับสืบค้นที่ผู้ใช้สามารถเรียนรู้ได้ในเวลาเพียงหนึ่งนาที การใส่เครื่องหมายคำพูดให้กับวลี เช่น "london meeting" จะเป็นการบังคับให้ค้นหาข้อความนั้นแบบตรงตัว การใช้เครื่องหมายวงเล็บเหลี่ยมเป็นการค้นหาด้วยแท็ก: [location=london] จะจับคู่ตามชื่อแท็ก ค่าของแท็ก หรือทั้งสองอย่าง โดยรองรับการเปรียบเทียบด้วย !=, >= และ like ส่วนการใช้เครื่องหมายปีกกาจะเป็นการกรองข้อมูลจาก metadata เช่น {created_after:2016-12-30} คำค้นหาแบบตรงตัว แท็ก หรือตัวกรองใดๆ สามารถกำหนดให้เป็นค่าปฏิเสธได้โดยการใส่ - ไว้หน้าคำนั้น BookStack มีการจำกัดจำนวนคำค้นหาในแต่ละประเภทต่อหนึ่งการสืบค้น ดังนั้นคำค้นหาที่ยาวเกินไปจะถูกตัดออกแทนที่จะถูกประมวลผล
Wiki.js จัดการระบบค้นหาในรูปแบบโมดูลที่ถอดเปลี่ยนได้ โดยมีเอนจินที่รองรับตามเอกสารประกอบ ได้แก่ เอนจินฐานข้อมูลพื้นฐาน, เอนจิน PostgreSQL, Elasticsearch, Algolia, AWS CloudSearch และ Azure Search สำหรับวิกิที่มีจำนวนหน้าไม่กี่ร้อยหน้า เอนจินพื้นฐานถือว่าเพียงพอแล้ว หากคุณใช้งาน PostgreSQL ให้เปลี่ยนไปใช้เอนจิน PostgreSQL ในหน้าผู้ดูแลระบบ เนื่องจากระบบจะใช้ดัชนี full text ของฐานข้อมูลโดยตรงแทนการจับคู่แบบธรรมดา ส่วน Elasticsearch นั้นควรเก็บไว้ใช้สำหรับวิกิที่มีขนาดใหญ่มากจนคุณยอมรับภาระในการดูแลและอัปเดตแพตช์ให้กับบริการค้นหาตัวที่สองได้
Outline ทำการค้นหาผ่านดัชนี full text ของ PostgreSQL โดยไม่มีเอนจินให้เลือกและไม่มีการตั้งค่าใดๆ ให้ปรับแต่ง นอกจากนี้ยังสามารถค้นหาข้อความภายในเอกสารที่อัปโหลดขึ้นไปได้ สำหรับวิกิของทีมที่มีจำนวนเอกสารหลักพันต้นๆ นี่คือตัวเลือกที่ใช้แรงในการดูแลรักษาน้อยที่สุดในบรรดาทั้งสามตัว อย่างไรก็ตาม หากระบบเริ่มทำงานช้าลง คุณจะไม่มีเครื่องมือใดๆ ให้ปรับแต่งเพื่อเพิ่มประสิทธิภาพได้อีก
เลือกตัวเลือกที่เหมาะสมกับคุณ
เลือก BookStack หากคุณต้องการให้ wiki เริ่มทำงานได้ภายในบ่ายวันนี้ และคุณให้ความสำคัญกับการถกเถียงเรื่องเนื้อหามากกว่าโครงสร้าง ระบบนี้มีส่วนประกอบที่ต้องดูแลน้อยที่สุด คือแอปพลิเคชัน PHP หนึ่งตัวและฐานข้อมูล MySQL หนึ่งตัว เหมาะสำหรับคู่มือการปฏิบัติงานภายในและเอกสารสำหรับลูกค้า รวมถึงทีมที่ผู้เขียนส่วนใหญ่ไม่ใช่ทีมวิศวกร นอกจากนี้ยังเป็นระบบที่สำรองข้อมูลได้ง่ายที่สุดในบรรดาสามตัวเลือก เนื่องจากสถานะทั้งหมดรวมอยู่ในไฟล์ดัมพ์ฐานข้อมูลหนึ่งไฟล์และไดเรกทอรีที่เก็บไฟล์อัปโหลด
เลือก Wiki.js หากคุณต้องการตัวแก้ไขเฉพาะทางหรือกลยุทธ์การยืนยันตัวตนที่ระบบอื่นไม่มีให้ หรือหากคุณกำลังนำเข้าเนื้อหา Markdown หรือ AsciiDoc จำนวนมากที่มีอยู่เดิมและต้องการรักษาโครงสร้างเส้นทางไว้ คุณต้องยอมรับว่าคุณกำลังใช้งาน stack ที่หนักกว่า และควรล็อกเวอร์ชันหลักไว้ด้วย tag
เลือก Outline หากคุณภาพของการเขียนคือสิ่งสำคัญที่สุด wiki นี้มีไว้สำหรับทีมมากกว่าสาธารณะ และคุณมีผู้ให้บริการยืนยันตัวตน (identity provider) อยู่แล้ว ระบบจะตอบแทนการตั้งค่าดังกล่าวด้วยตัวแก้ไขที่ผู้ใช้งานจะรู้สึกสนุกกับการใช้งานจริง อย่าเลือกใช้ระบบนี้เป็นแอปพลิเคชันแรกที่คุณเลือก self-host
หากไม่มีตัวเลือกใดในสามตัวนี้ที่เหมาะสม สาเหตุส่วนใหญ่มักเกิดจากประเภทของเนื้อหาที่ไม่ตรงกัน ใบแจ้งหนี้และสัญญาที่สแกนมาควรเก็บไว้ใน ระบบจัดการเอกสารอย่าง Paperless-ngx แทนที่จะเก็บไว้ใน wiki และการฝืนนำไปใส่ใน wiki คือสาเหตุที่ทำให้ wiki จำนวนมากถูกทิ้งร้างในที่สุด อีกกรณีที่พบบ่อยคือการต้องการพื้นที่ทำงาน (workspace) แทนที่จะเป็น wiki ซึ่งมีทั้งเอกสาร ตาราง และกระดานไวท์บอร์ดบนผืนผ้าใบเดียวกัน ซึ่งในกรณีนี้ พื้นที่ทำงาน AFFiNE แบบ self-hosted จะเหมาะสมกว่าทั้งสามตัวเลือกข้างต้น สำหรับมุมมองที่กว้างขึ้นเกี่ยวกับสิ่งที่ควรค่าแก่การติดตั้งบนเซิร์ฟเวอร์ของคุณ โปรดดู รายการคัดเลือกสำหรับการ 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 และข้อมูลรับรองฐานข้อมูลเท่านั้น ในขณะที่ Wiki.js ต้องใช้ Node runtime และเซิร์ฟเวอร์ PostgreSQL เพิ่มเติม และ Outline ยังต้องใช้ Redis รวมถึงผู้ให้บริการยืนยันตัวตนภายนอกเพิ่มเข้าไปอีก
ฉันสามารถใช้ Outline โดยไม่ผ่าน Google หรือผู้ให้บริการ SSO รายอื่นได้หรือไม่?
ไม่ได้ Outline ไม่มีระบบล็อกอินด้วยชื่อผู้ใช้และรหัสผ่านภายในตัว ไฟล์ตั้งค่าตัวอย่างระบุว่าจำเป็นต้องมีผู้ให้บริการยืนยันตัวตนภายนอกอย่างน้อยหนึ่งราย มิฉะนั้นคุณจะไม่มีตัวเลือกในการล็อกอินเลย คุณสามารถใช้ Google, Slack, Microsoft Entra, Discord หรือเซิร์ฟเวอร์ OpenID Connect ทั่วไป เช่น Keycloak หรือ Authentik ที่คุณโฮสต์เองก็ได้ การรันผู้ให้บริการเหล่านั้นถือเป็นส่วนหนึ่งของต้นทุนในการรัน Outline
ฉันควรติดตั้ง Wiki.js 3 หรือ Wiki.js 2?
ควรใช้เวอร์ชัน 2 ณ เดือนกรกฎาคม 2026 เวอร์ชัน 2 ล่าสุดคือ 2.5.314 ซึ่งปล่อยออกมาเมื่อเดือนพฤษภาคม 2026 และเอกสารของเวอร์ชัน 3 ระบุไว้อย่างชัดเจนว่าเป็นรุ่นเบต้าที่ไม่เสถียรและไม่ควรติดตั้งในสภาพแวดล้อมใช้งานจริง ให้ล็อกเวอร์ชันของ image ไว้ที่ ghcr.io/requarks/wiki:2 แทนที่จะเป็น latest เนื่องจากการเปลี่ยนเวอร์ชันหลักจะส่งผลต่อโครงสร้างฐานข้อมูลของ instance ที่กำลังทำงานอยู่
ตัวไหนมีระบบค้นหาที่ดีที่สุด?
แต่ละตัวมีจุดเด่นต่างกัน BookStack มีภาษาสำหรับสืบค้น (query language) ที่รองรับวลีที่แน่นอน, การกรองด้วยแท็ก เช่น [location=london] และการกรองด้วยข้อมูลเมตา เช่น {created_after:2016-12-30} โดยคำเหล่านี้สามารถใช้เครื่องหมาย - นำหน้าเพื่อปฏิเสธเงื่อนไขได้ Outline ไม่จำเป็นต้องตั้งค่าและสามารถค้นหาข้อความภายในไฟล์ที่อัปโหลดได้ ส่วน Wiki.js ปรับแต่งได้มากที่สุดเพราะคุณสามารถเลือก engine เองได้ และ engine แบบ PostgreSQL นั้นคุ้มค่าที่จะเปลี่ยนไปใช้ทันทีที่ wiki ของคุณมีขนาดใหญ่เกินกว่าไม่กี่ร้อยหน้า
ฉันสามารถย้ายเนื้อหาจากตัวหนึ่งไปอีกตัวหนึ่งในภายหลังได้หรือไม่?
ทำได้บางส่วนและคุณควรเตรียมใจสำหรับงานที่ต้องทำด้วยตนเอง ทั้งสามตัวรองรับการนำเข้าและส่งออก Markdown ดังนั้นข้อความในหน้าเพจมักจะย้ายไปได้ครบถ้วน แต่โครงสร้างมักจะไม่สมบูรณ์: หนังสือและบทของ BookStack ไม่มีรูปแบบที่เทียบเท่าในเอกสารแบบซ้อนกันของ Outline และ path ของ Wiki.js ก็ไม่สามารถแมปเข้ากับลำดับชั้นที่ตายตัวของ BookStack ได้ ส่วนที่มักจะสูญหายคือไฟล์แนบ, สิทธิ์การเข้าถึง และประวัติการแก้ไขหน้าเพจ ดังนั้นควรส่งออกข้อมูลตัวอย่างมาตรวจสอบก่อนตัดสินใจย้ายระบบจริง