BookStack: ทำ Wiki คลังความรู้ภายในบริษัทด้วย Docker Compose

ติดตั้ง BookStack ด้วย Docker Compose คู่กับ MariaDB เป็น Wiki คลังความรู้ของบริษัท ใช้งานผ่าน HTTPS เปลี่ยนบัญชีผู้ดูแลเริ่มต้น วางบทบาทผู้ใช้ และสำรองข้อมูล

โดย ทีมงาน THAI DATA CLOUD อัปเดต อ่าน 11 นาที

แชร์FacebookXLINELinkedIn
BookStack — BookStack: ทำ Wiki คลังความรู้ภายในบริษัทด้วย Docker Compose
BookStack: ทำ Wiki คลังความรู้ภายในบริษัทด้วย Docker Compose

คำตอบสั้น ๆ: ติดตั้ง 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 ของชุมชนที่ได้รับความนิยมและอัปเดตสม่ำเสมอ

แผนภาพผู้ใช้เข้า wiki.example.com ผ่าน Nginx Proxy Manager ไปยังคอนเทนเนอร์ BookStack และ MariaDB ในเครือข่ายภายใน
มีแค่คอนเทนเนอร์เว็บที่ต่อเครือข่าย proxy ฐานข้อมูลอยู่ในเครือข่ายภายในของโปรเจกต์เท่านั้น

ขั้นตอนที่ 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

ขั้นตอนที่ 4: ล็อกอินครั้งแรกและเปลี่ยนบัญชีเริ่มต้นทันที

เปิด https://wiki.example.com ล็อกอินด้วยบัญชีเริ่มต้น [email protected] รหัสผ่าน password ซึ่งทุกคนที่เคยอ่านเอกสารรู้ จึงต้องเปลี่ยนก่อนทำอย่างอื่น ไปที่ Settings → Users คลิกผู้ใช้ Admin แก้ Name, Email เป็นอีเมลจริงของผู้ดูแล และตั้ง Password ใหม่ที่ยาวอย่างน้อย 16 ตัวอักษร แล้วกด Save

ภาพจำลองหน้า Edit User ใน Settings ของ BookStack เปลี่ยนอีเมล admin@admin.com และรหัสผ่านเริ่มต้นเป็นค่าใหม่
แก้ทั้งอีเมลและรหัสผ่านของบัญชี Admin ก่อนเชิญผู้ใช้คนอื่น (ภาพจำลอง)

จากนั้นเปิดใช้ Multi-Factor Authentication ในหน้าโปรไฟล์ของตัวเอง (ส่วน Multi-Factor Authentication → Setup) ถ้าต้องการส่งอีเมลได้ ให้เพิ่มตัวแปร MAIL_DRIVER=smtp, MAIL_HOST, MAIL_PORT, MAIL_USERNAME, MAIL_PASSWORD, MAIL_ENCRYPTION=tls และ MAIL_FROM ในส่วน environment แล้วรัน docker compose up -d อีกครั้ง ทดสอบได้ที่ Settings → Maintenance → Send Test Email

ขั้นตอนที่ 5: วางบทบาท สิทธิ์ และโครงสร้างเนื้อหา

ระบบมีบทบาทเริ่มต้น Admin, Editor และ Viewer ไปที่ Settings → Roles เพื่อสร้างบทบาทตามแผนก เช่น IT-Editor หรือ HR-Viewer แล้วกำหนดสิทธิ์ระดับระบบ จากนั้นเพิ่มผู้ใช้ที่ Settings → Users → Add New User พร้อมเลือกบทบาท

  • ปิดการสมัครเองไว้ตามค่าเริ่มต้นในส่วน Registration ของหน้า Settings และไม่เปิดให้ผู้ไม่ล็อกอินดูเนื้อหา
  • หนังสือที่เป็นความลับ เช่น ขั้นตอนเงินเดือน ให้เปิดหน้า Book แล้วเลือก Permissions เพื่อกำหนดสิทธิ์เฉพาะบทบาทที่เกี่ยวข้อง
  • วางโครงสร้างตั้งแต่ต้น เช่น Shelf ละหนึ่งแผนก และ Book ละหนึ่งระบบหรือกระบวนการ ค้นหาและดูแลง่ายกว่าการสร้างหน้าเรียงกันยาว ๆ

ขั้นตอนที่ 6: สำรองข้อมูลและอัปเดต

ข้อมูลมีสองส่วน คือฐานข้อมูล (เนื้อหาทุกหน้า ผู้ใช้ สิทธิ์) และโฟลเดอร์ config/www (รูปภาพและไฟล์แนบ) ต้องสำรองคู่กันเสมอ คำสั่ง dump ใช้รหัสผ่าน root ที่อยู่ในคอนเทนเนอร์อยู่แล้ว จึงไม่ต้องพิมพ์รหัสผ่านลงในสคริปต์

cd /opt/wiki
STAMP=$(date +%F)
sudo mkdir -p /var/backups/wiki
docker compose exec -T db sh -c 'mariadb-dump -u root -p"$MARIADB_ROOT_PASSWORD" wiki' \
  | gzip | sudo tee /var/backups/wiki/db-$STAMP.sql.gz > /dev/null
sudo tar czf /var/backups/wiki/files-$STAMP.tar.gz config/www .env

ส่งไฟล์สำรองออกนอกเครื่องทุกวัน เช่น ด้วยคู่มือ สำรองข้อมูลไปยังเซิร์ฟเวอร์อื่นด้วย rsync และ Cronjob การอัปเดตใช้ docker compose pull && docker compose up -d ตัว image จะรัน database migration ให้เองตอนเริ่มระบบ จึงต้องสำรองก่อนอัปเดตทุกครั้ง และอ่าน release notes ของ BookStack เมื่อขึ้นเวอร์ชันใหม่

ผลคำสั่ง docker compose ps ของ BookStack และ MariaDB สถานะ healthy พร้อมรายการไฟล์สำรองฐานข้อมูลและไฟล์แนบ
ฐานข้อมูลต้องขึ้น healthy ก่อนตัวเว็บเริ่ม และไฟล์สำรองต้องมีครบทั้งสองชุดทุกวัน

ปัญหาที่พบบ่อยเกี่ยวกับ BookStack

หน้าเว็บไม่มีรูปแบบ CSS หรือ redirect วนไม่จบ?

เกือบทุกครั้งเกิดจาก APP_URL ไม่ตรงกับ URL ที่เปิดจริง เช่น ตั้งเป็น http:// แต่ผู้ใช้เข้าผ่าน https:// หรือมี / ปิดท้าย แก้ใน .env แล้วรัน docker compose up -d เพื่อสร้างคอนเทนเนอร์ใหม่

เปลี่ยนโดเมนแล้วรูปภาพและลิงก์ในหน้าเดิมยังชี้ไปโดเมนเก่า?

URL ของรูปและลิงก์ภายในถูกบันทึกในเนื้อหา เปลี่ยน APP_URL แล้วสั่งแทนที่ URL ในฐานข้อมูลด้วย docker exec -it bookstack php /app/www/artisan bookstack:update-url https://old.example.com https://wiki.example.com สำรองฐานข้อมูลก่อนรันเสมอ

ลืมรหัสผ่านผู้ดูแลและระบบยังส่งอีเมลไม่ได้ ทำอย่างไร?

สร้างผู้ดูแลคนใหม่จากบรรทัดคำสั่งด้วย docker exec -it bookstack php /app/www/artisan bookstack:create-admin ระบบจะถามอีเมล ชื่อ และรหัสผ่าน จากนั้นล็อกอินด้วยบัญชีใหม่แล้วรีเซ็ตรหัสผ่านของบัญชีเดิม

ควรใช้ BookStack หรือ Nextcloud สำหรับเก็บเอกสารบริษัท?

ใช้คู่กันได้ BookStack เหมาะกับความรู้ที่เป็นข้อความ เช่น ขั้นตอนงานและคู่มือ ที่ต้องค้นหาและแก้ไขร่วมกัน ส่วนไฟล์ Office และ PDF จำนวนมากเหมาะกับ Nextcloud มากกว่า อ่านรายละเอียดฟีเจอร์ทั้งหมดได้ที่ เอกสารทางการของ BookStack และตัวแปรของ image ที่ LinuxServer.io

ลำดับขั้นตั้งค่า BookStack ตั้งแต่สร้าง APP_KEY เปลี่ยนบัญชีเริ่มต้น สร้างบทบาท จนถึงตั้งสำรองข้อมูล
ทำตามลำดับนี้ก่อนเชิญพนักงานเข้ามาเขียนเนื้อหา

ต้องการเซิร์ฟเวอร์สำหรับ Wiki ภายในองค์กรที่ขยายได้ตามจำนวนผู้ใช้ ดู Cloud VPS App Plus หรือ ติดต่อทีมงาน THAI DATA CLOUD เพื่อขอคำแนะนำในการวางระบบ

อ่านเพิ่มเติมเกี่ยวกับ BookStack

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน