คำตอบสั้น ๆ: ติดตั้ง BookStack ด้วย Docker Compose คู่กับ MariaDB เป็น Wiki คลังความรู้ของบริษัท ใช้งานผ่าน HTTPS เปลี่ยนบัญชีผู้ดูแลเริ่มต้น วางบทบาทผู้ใช้ และสำรองข้อมูล
คู่มือนี้อธิบาย BookStack ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
BookStack คือระบบ Wiki แบบโอเพนซอร์สสำหรับเก็บความรู้ภายในบริษัท จัดเนื้อหาเป็นลำดับชั้นที่เข้าใจง่ายเหมือนห้องสมุด คือ Shelves → Books → Chapters → Pages มีตัวแก้ไขแบบ WYSIWYG และ Markdown ค้นหาข้อความได้ทั้งระบบ เก็บประวัติการแก้ไขทุกหน้า และกำหนดสิทธิ์ตามบทบาทได้ละเอียดถึงระดับหนังสือ เหมาะกับคู่มือ SOP ขั้นตอนงาน IT และคู่มือพนักงาน
เมื่อทำตามคู่มือนี้จบ คุณจะมี Wiki ที่รันด้วย Docker Compose คู่กับ MariaDB ใช้งานผ่าน HTTPS เปลี่ยนบัญชีผู้ดูแลเริ่มต้นแล้ว มีบทบาทผู้ใช้ตามแผนก และมีขั้นตอนสำรองข้อมูลกับอัปเดตที่ชัดเจน
สิ่งที่ต้องเตรียม
- Cloud VPS ที่ใช้ Ubuntu 24.04 พร้อม Docker Engine และ Compose plugin ขนาดเริ่มต้นที่แนะนำ 2 vCPU / RAM 2 GB สำหรับผู้ใช้ราว 50 คน เป็นตัวเลขโดยประมาณ ปรับตามจำนวนไฟล์แนบและผู้ใช้จริง
- ซับโดเมน เช่น
wiki.example.comที่ชี้มาที่เซิร์ฟเวอร์แล้ว - Nginx Proxy Manager พร้อมเครือข่าย Docker ชื่อ
proxyหรือ Nginx บนโฮสต์กับ Certbot - บัญชี SMTP ถ้าต้องการให้ระบบส่งอีเมลรีเซ็ตรหัสผ่านและแจ้งเตือน
หมายเหตุเรื่อง image: โครงการ BookStack ไม่ได้ออก Docker image ทางการเอง คู่มือนี้ใช้ lscr.io/linuxserver/bookstack ที่ดูแลโดย LinuxServer.io ซึ่งเป็น image ของชุมชนที่ได้รับความนิยมและอัปเดตสม่ำเสมอ
ขั้นตอนที่ 1: สร้าง APP_KEY และไฟล์ .env
APP_KEY ใช้เข้ารหัส session และข้อมูลบางส่วน ต้องสร้างครั้งเดียวและห้ามเปลี่ยนหลังใช้งานจริง
sudo install -d -o $USER /opt/wiki
cd /opt/wiki
docker run -it --rm --entrypoint /bin/bash lscr.io/linuxserver/bookstack:latest appkey
คำสั่งจะพิมพ์ค่าในรูป base64:... ออกมา นำไปใส่ใน .env พร้อมรหัสผ่านฐานข้อมูลที่สุ่มด้วย openssl rand -hex 24
APP_URL=https://wiki.example.com
APP_KEY=base64:ค่าที่ได้จากคำสั่งด้านบน
DB_PASSWORD=รหัสผ่านสุ่มชุดที่หนึ่ง
DB_ROOT_PASSWORD=รหัสผ่านสุ่มชุดที่สอง
TZ=Asia/Bangkok
รัน chmod 600 .env และเก็บสำเนาไฟล์นี้ไว้ในที่ปลอดภัย ค่า APP_URL ต้องตรงกับ URL ที่ผู้ใช้เปิดจริง ขึ้นต้นด้วย https:// และไม่มี / ปิดท้าย
ขั้นตอนที่ 2: เขียน compose.yaml แล้วเริ่มระบบ
services:
bookstack:
image: lscr.io/linuxserver/bookstack:latest
container_name: bookstack
restart: unless-stopped
environment:
PUID: 1000
PGID: 1000
TZ: ${TZ}
APP_URL: ${APP_URL}
APP_KEY: ${APP_KEY}
DB_HOST: db
DB_PORT: 3306
DB_DATABASE: wiki
DB_USERNAME: wiki
DB_PASSWORD: ${DB_PASSWORD}
volumes:
- ./config:/config
depends_on:
db:
condition: service_healthy
networks:
- default
- proxy
db:
image: mariadb:11.4
restart: unless-stopped
environment:
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
MARIADB_DATABASE: wiki
MARIADB_USER: wiki
MARIADB_PASSWORD: ${DB_PASSWORD}
volumes:
- ./db:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
retries: 5
networks:
proxy:
external: true
คอนเทนเนอร์ฐานข้อมูลอยู่เฉพาะในเครือข่าย default ของโปรเจกต์นี้ Nginx Proxy Manager จึงมองไม่เห็นฐานข้อมูล มีแต่ตัวเว็บเท่านั้นที่ต่อเข้าเครือข่าย proxy
docker compose up -d
docker compose logs -f bookstack
การเริ่มครั้งแรกจะสร้างตารางในฐานข้อมูล ใช้เวลาราวหนึ่งนาที รอจนล็อกไม่มี error แล้วกด Ctrl+C
ขั้นตอนที่ 3: เปิด HTTPS ด้วย Proxy Host
ใน Nginx Proxy Manager เพิ่ม Proxy Host ใหม่ กรอก Domain Names wiki.example.com, Forward Hostname bookstack, Forward Port 80 เปิด Block Common Exploits แล้วในแท็บ SSL ขอใบรับรองใหม่ เปิด Force SSL และ HTTP/2 Support
ถ้าใช้ Nginx บนโฮสต์แทน ให้ลบ proxy ออกจาก networks แล้วเพิ่ม ports: ["127.0.0.1:6875:80"] ให้บริการ จากนั้นตั้ง proxy_pass http://127.0.0.1:6875; ใน server block