วิธีติดตั้ง Flarum บน VPS ด้วย PHP และ MariaDB
เรียนรู้วิธีติดตั้ง Flarum 1.8 บน VPS ด้วย PHP, Composer และ MariaDB พร้อมตั้งค่า Nginx ให้ชี้ไปที่โฟลเดอร์ public และวิธีแก้ไขปัญหาการส่งอีเมลรวมถึงข้อผิดพลาดจากการอัปเดตส่วนขยาย
การติดตั้ง Flarum บน VPS ด้วย PHP และ MariaDB
การติดตั้ง Flarum บน VPS จะช่วยให้คุณได้กระดานสนทนาที่ทำงานบน PHP และ MariaDB โดยไม่ต้องใช้ Docker, Ruby หรือตัวจัดการงานแยกต่างหาก นี่คือเหตุผลที่ควรเลือกใช้ การติดตั้ง Discourse บน VPS หมายถึงการใช้ Docker stack ที่ประกอบด้วย Ruby, PostgreSQL, Redis และ background worker ซึ่งต้องใช้ RAM อย่างน้อย 2 GB เป็นพื้นฐานก่อนที่คุณจะเพิ่มระบบสำรองข้อมูลหรือบริการอีเมล Discourse คุ้มค่ากับทรัพยากรระดับนั้นสำหรับชุมชนที่มีการใช้งานสูงและมีโพสต์หลายพันรายการต่อวัน แต่สำหรับกระดานสนทนาที่มีผู้ใช้งานเพียงไม่กี่ร้อยคน นี่คือเครื่องมือที่คุณต้องจ่ายเงินรายเดือนโดยไม่ได้ใช้งานจริง Flarum สามารถทำงานร่วมกับ PHP stack ที่คุณอาจใช้งานอยู่แล้ว ดังนั้น VPS ขนาด 1 GB ที่รัน nginx และ MariaDB ก็สามารถโฮสต์ Flarum ควบคู่ไปกับบริการอื่นได้ หากคุณยังตัดสินใจไม่ได้ การเปรียบเทียบซอฟต์แวร์กระดานสนทนาแบบ self-hosted ในวงกว้าง จะช่วยให้คุณเห็นภาพรวมของตัวเลือกอื่นๆ ทั้งหมด
คู่มือนี้กำหนดการติดตั้งไว้ที่ Flarum 1.x ซึ่งปัจจุบันคือซีรีส์ 1.8 ณ เดือนสิงหาคม 2026 Flarum 2.0 ยังคงเป็น release candidate ดังนั้น 1.8 จึงเป็นเวอร์ชันที่ควรใช้สำหรับกระดานสนทนาที่ผู้อื่นต้องพึ่งพา ส่วนขยาย (extensions) มีความสำคัญมากกว่าเวอร์ชันหลักในที่นี้ และผู้พัฒนาส่วนขยายส่วนใหญ่ยังไม่ได้ย้ายไปใช้ 2.0
สิ่งที่ Flarum 1.8 ต้องการบนเซิร์ฟเวอร์
ข้อกำหนดตามเอกสารของ Flarum คือ PHP 7.3 หรือใหม่กว่า, MySQL 5.6+ หรือ MariaDB 10.0.5+ และ nginx หรือ Apache ที่มี mod_rewrite สำหรับ Ubuntu 24.04 นั้นมาพร้อมกับ PHP 8.3 และ MariaDB 10.11 ดังนั้นแพ็กเกจของระบบปฏิบัติการจึงรองรับข้อกำหนดทั้งสองประการโดยไม่ต้องใช้ repository ภายนอก ส่วน PHP extension ที่ Flarum ต้องการ ได้แก่ curl, dom, fileinfo, gd, json, mbstring, openssl, pdo_mysql, tokenizer และ zip นอกจากนี้คุณยังจำเป็นต้องมีสิทธิ์เข้าถึง shell เนื่องจาก Composer เป็นสิ่งที่ขาดไม่ได้ในที่นี้ เพราะ Flarum extension ทุกตัวเป็น Composer package และไม่มีวิธีอื่นในการติดตั้งโดยไม่ใช้ Composer
Flarum เป็นแอปพลิเคชัน PHP ทั่วไป หากคุณใช้งาน LAMP stack บน Ubuntu 24.04 อยู่แล้ว ซอฟต์แวร์ส่วนใหญ่ในสองส่วนถัดไปจะถูกติดตั้งไว้แล้ว และคุณสามารถข้ามไปดูส่วนของฐานข้อมูลได้เลย
ติดตั้ง PHP และส่วนขยายที่ Flarum ต้องการ
sudo apt update
sudo apt install -y nginx mariadb-server composer
sudo apt install -y php8.3-fpm php8.3-cli php8.3-curl php8.3-gd php8.3-mbstring php8.3-mysql php8.3-xml php8.3-zip
php -m | grep -E 'curl|dom|gd|mbstring|pdo_mysql|zip'
composer --versionชื่อแพ็กเกจไม่ได้ตรงกับรายการที่ Flarum ระบุไว้แบบหนึ่งต่อหนึ่ง ส่วนขยาย dom จะรวมอยู่ใน php8.3-xml ส่วน fileinfo, json, openssl และ tokenizer นั้นถูกคอมไพล์รวมอยู่ใน PHP 8.3 บน Ubuntu แล้ว จึงไม่มีแพ็กเกจแยกต่างหากให้ติดตั้งสำหรับส่วนขยายเหล่านี้ คำสั่ง grep ควรแสดงผลลัพธ์ 6 บรรทัด และ composer --version ควรรายงานว่าเป็นรุ่น 2.x หากพบว่าส่วนขยายใดขาดหายไป ควรแก้ไขให้เรียบร้อยในขั้นตอนนี้ เพราะ Composer จะปฏิเสธการติดตั้ง Flarum หากไม่พบส่วนขยายที่จำเป็น และข้อความแสดงข้อผิดพลาดจะระบุชื่อส่วนขยายที่ขาดหายไปให้คุณทราบ:
Problem 1
- flarum/core[v1.8.0, ..., v1.8.17] require ext-gd * -> it is missing from your system.
Install or enable PHP's gd extension.ตรวจสอบให้แน่ใจว่า PHP ที่ทำงานผ่านบรรทัดคำสั่ง (CLI) และตัวจัดการกระบวนการ FastCGI (PHP-FPM) เป็นเวอร์ชันเดียวกัน เนื่องจาก Composer ทำงานภายใต้ไบนารีของบรรทัดคำสั่ง ในขณะที่ฟอรัมของคุณทำงานภายใต้ FPM ดังนั้น php -v และ sudo php-fpm8.3 -v จะต้องตรงกัน เวอร์ชันของ PHP อาจคลาดเคลื่อนได้บนเครื่องที่มีการติดตั้ง PHP หลายเวอร์ชันจากคลังซอฟต์แวร์ภายนอก ซึ่งจะส่งผลให้ส่วนขยายที่คุณติดตั้งสำหรับเวอร์ชันหนึ่งไม่สามารถมองเห็นได้ในอีกเวอร์ชันหนึ่ง
สร้างฐานข้อมูลและผู้ใช้งานฐานข้อมูลเฉพาะ
sudo mariadb-secure-installation
sudo mariadbCREATE DATABASE flarum CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'flarum'@'localhost' IDENTIFIED BY 'use-a-long-random-password';
GRANT ALL PRIVILEGES ON flarum.* TO 'flarum'@'localhost';
FLUSH PRIVILEGES;
EXIT;กำหนดให้ Flarum ใช้ผู้ใช้งานฐานข้อมูลของตนเองแทนการใช้ root สิทธิ์ที่มอบให้ครอบคลุมเฉพาะ flarum.* เท่านั้น เพื่อป้องกันไม่ให้ช่องโหว่ SQL injection ในส่วนขยายที่คุณไม่ได้เป็นผู้เขียนสามารถเข้าถึงฐานข้อมูลอื่นของคุณได้ การตั้งค่า character set ก็มีความสำคัญเช่นกัน โดย utf8mb4 จะจัดเก็บอีโมจิและอักขระที่ไม่ใช่ภาษาละตินได้อย่างถูกต้อง ในขณะที่ utf8 แบบเก่าของ MySQL เป็นการเข้ารหัสแบบ 3 ไบต์ ซึ่งจะตัดข้อความทิ้งหากพบอักขระแบบ 4 ไบต์ตัวแรก ให้ตรวจสอบว่าผู้ใช้งานทำงานได้ตามปกติก่อนดำเนินการในขั้นตอนถัดไป
mariadb -u flarum -p flarum -e 'SELECT DATABASE();'คำสั่งดังกล่าวควรแสดงผลลัพธ์เป็น flarum หากแสดง ERROR 1045 (28000): Access denied for user 'flarum'@'localhost' หมายความว่ารหัสผ่านไม่ถูกต้อง หรือผู้ใช้งานถูกสร้างขึ้นสำหรับ host อื่นที่ไม่ใช่ localhost
การติดตั้ง Flarum บน VPS ด้วย Composer โดยล็อกเวอร์ชันไว้ที่ 1.8
ขั้นแรกให้สร้าง system user เพื่อเป็นเจ้าของโค้ด การรัน Composer ในฐานะ root จะทำให้ไฟล์ที่สร้างขึ้นมี root เป็นเจ้าของใน vendor/ และ storage/ ส่งผลให้ PHP ไม่สามารถเขียนไฟล์แคชของตัวเองได้ในภายหลัง และฟอรัมจะตอบกลับทุกคำขอด้วยข้อผิดพลาด 500
sudo useradd --system --home-dir /srv/flarum --shell /bin/bash flarum
sudo install -d -o flarum -g flarum -m 755 /srv/flarum
sudo -iu flarumคำสั่งสุดท้ายจะนำคุณเข้าสู่ shell ในฐานะผู้ใช้ flarum ภายในไดเรกทอรี /srv/flarum คำสั่งทุกคำสั่งนับจากนี้จนจบคำแนะนำจะรันภายใต้ผู้ใช้นี้ เว้นแต่จะขึ้นต้นด้วย sudo
composer create-project flarum/flarum:^1.8.0 .ข้อกำหนด ^1.8.0 คือการล็อกเวอร์ชัน โดยจะยอมรับเฉพาะรุ่น patch 1.8.x และปฏิเสธรุ่น 2.0 ซึ่งเป็นสิ่งที่คุณต้องการในขณะที่ 2.0 ยังอยู่ในสถานะ release candidate ตัว Composer จะดาวน์โหลด skeleton, แก้ไข flarum/core และ dependency ต่างๆ จากนั้นจะทิ้งไฟล์ public/, storage/, vendor/, composer.json และสคริปต์บรรทัดคำสั่ง flarum ไว้ให้คุณ
บน VPS ขนาดเล็ก ขั้นตอนนี้มักเป็นจุดที่เกิดปัญหา ซึ่งความล้มเหลวสองรูปแบบอาจดูคล้ายกัน PHP Fatal error: Allowed memory size of 134217728 bytes exhausted คือ memory_limit ของ PHP เอง การใส่ COMPOSER_MEMORY_LIMIT=-1 ไว้หน้าคำสั่งจะเป็นการยกเลิกเพดานหน่วยความจำดังกล่าวสำหรับการรันหนึ่งครั้ง หากพบ Killed ปรากฏขึ้นมาโดดๆ โดยไม่มีข้อผิดพลาดจาก PHP แสดงว่าเป็นกระบวนการ out-of-memory killer ของ kernel ซึ่งคุณสามารถตรวจสอบได้ด้วย dmesg | tail กรณีนี้หมายความว่าเครื่องขาดแคลน RAM จริงๆ ดังนั้นให้เพิ่ม swap แทน เพราะการเพิ่มขีดจำกัดของ PHP จะยิ่งทำให้สถานการณ์แย่ลง เนื่องจาก PHP จะร้องขอหน่วยความจำมากขึ้นไปอีกก่อนที่ kernel จะเข้ามาจัดการ
เหตุผลที่ควรให้เฉพาะโฟลเดอร์ /public เท่านั้นที่เข้าถึงได้จากเว็บ
รูทของโปรเจกต์ประกอบด้วย config.php ซึ่งเก็บรหัสผ่านฐานข้อมูลของคุณไว้ในรูปแบบข้อความธรรมดา, vendor/ ที่เก็บรายการ dependency ทั้งหมด และ storage/ ที่เก็บไฟล์ log และ session ที่แคชไว้ ข้อมูลเหล่านี้ไม่ควรถูกเปิดเผยบนอินเทอร์เน็ตสาธารณะ Flarum จัดเก็บทุกสิ่งที่จำเป็นต้องเข้าถึงผ่านเว็บไว้ในไดเรกทอรีย่อยเดียวคือ public/ ซึ่งภายในมีเพียง index.php, โฟลเดอร์ assets/ และไฟล์อื่นๆ อีกเพียงเล็กน้อย การชี้รูทของเว็บเซิร์ฟเวอร์ไปที่ /srv/flarum/public จะทำให้ส่วนที่เหลือของโครงสร้างไฟล์ไม่สามารถเข้าถึงได้ผ่าน HTTP โดยธรรมชาติ ไม่ใช่แค่เพียงเพราะกฎที่คุณต้องคอยจำไว้
หากคุณชี้รูทไปที่ /srv/flarum แทน ความเสียหายที่เกิดขึ้นจะเป็นเรื่องจริง การร้องขอ /config.php จะไม่ส่งผลลัพธ์ที่เป็นประโยชน์กลับมาเนื่องจาก PHP จะประมวลผลไฟล์นั้นและส่งคืนค่าเป็นเพียงอาเรย์เท่านั้น แต่การเข้าถึง /storage/logs/flarum.log จะทำให้บุคคลภายนอกเห็น stack trace และข้อผิดพลาดของฐานข้อมูลของคุณ และ /composer.lock จะบอกเวอร์ชันที่แน่นอนของทุกแพ็กเกจที่คุณใช้งาน ซึ่งเป็นรายการช่องโหว่ที่ทราบกันดีให้ผู้โจมตีนำไปใช้ทดสอบได้
กำหนดให้ PHP-FPM ใช้ pool ของตัวเอง
Flarum ต้องการสิทธิ์เขียนใน 3 ตำแหน่ง ได้แก่ รูทของโปรเจกต์เพื่อให้ตัวติดตั้งสามารถสร้าง config.php ได้, storage/ สำหรับเก็บ log และแคช และ assets/ สำหรับรูปโปรไฟล์และโลโก้ที่อัปโหลด ไฟล์เหล่านี้เป็นกรรมสิทธิ์ของยูสเซอร์ flarum ดังนั้นวิธีที่สะอาดที่สุดคือการสร้าง PHP-FPM pool ที่รันด้วยยูสเซอร์ flarum โดยที่ nginx จะยังคงรันด้วยยูสเซอร์ www-data และทำหน้าที่อ่านไฟล์เพียงอย่างเดียว
สร้างไฟล์ /etc/php/8.3/fpm/pool.d/flarum.conf:
[flarum]
user = flarum
group = flarum
listen = /run/php/php8.3-fpm-flarum.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0660
pm = ondemand
pm.max_children = 10
pm.process_idle_timeout = 30s
php_admin_value[memory_limit] = 256M
php_admin_value[upload_max_filesize] = 16M
php_admin_value[post_max_size] = 17Msudo systemctl restart php8.3-fpm
ls -l /run/php/php8.3-fpm-flarum.socksocket ควรถูกระบุไว้ที่ srw-rw---- 1 www-data www-data กระบวนการหลัก (master process) จะรันด้วย root และเป็นผู้สร้าง socket นี้ จึงสามารถส่งมอบความเป็นเจ้าของให้แก่ www-data ได้ ในขณะที่ worker จะรันด้วย flarum หากไม่พบ socket ดังกล่าว sudo journalctl -u php8.3-fpm -n 30 จะแสดงข้อความว่า FPM ปฏิเสธการเชื่อมต่อ pm = ondemand จะเริ่มกระบวนการ worker เฉพาะเมื่อมีคำขอเข้ามาเท่านั้น ดังนั้นฟอรัมที่ไม่มีผู้ใช้งานแทบจะไม่ใช้หน่วยความจำเลยระหว่างช่วงที่ไม่มีผู้เข้าชม
Nginx server block
Flarum มี nginx snippet มาให้ใน root ของโปรเจกต์ชื่อ .nginx.conf ซึ่งประกอบด้วย rewrite rule, cache headers และการตั้งค่า compression แนะนำให้ใช้การ include แทนการคัดลอกเนื้อหา เพื่อให้การอัปเกรด Flarum ที่มีการเปลี่ยนแปลง snippet สามารถส่งผลถึงเซิร์ฟเวอร์ของคุณได้โดยไม่ต้องแก้ไขไฟล์ด้วยตนเอง
server {
listen 80;
listen [::]:80;
server_name forum.example.com;
root /srv/flarum/public;
index index.php;
client_max_body_size 16M;
include /srv/flarum/.nginx.conf;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm-flarum.sock;
}
}บันทึกไฟล์ดังกล่าวเป็น /etc/nginx/sites-available/flarum จากนั้นเปิดใช้งาน
sudo ln -s /etc/nginx/sites-available/flarum /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginxnginx -t ควรตอบสนองต่อ syntax is ok และ test is successful บรรทัด include คือส่วนที่ผู้ใช้มักลืมใส่ ซึ่งหากขาดไปจะทำให้เกิดอาการเฉพาะอย่างหนึ่งคือ หน้าแรกโหลดได้ปกติ แต่ทุกลิงก์ของหัวข้อสนทนาจะแสดงข้อผิดพลาด 404 จาก nginx เนื่องจาก Flarum ทำการ route URL เช่น /d/1-hello-world ภายใน PHP ซึ่ง path ดังกล่าวไม่ใช่ไฟล์ที่มีอยู่จริงบนดิสก์ ดังนั้นหากไม่มีกฎ try_files $uri $uri/ /index.php?$query_string จาก snippet ตัว nginx จะพยายามมองหาไดเรกทอรีชื่อ d เมื่อไม่พบจึงตอบกลับด้วย 404 ก่อนที่จะส่งคำขอไปยัง PHP สำหรับ Apache จะใช้การ routing เดียวกันผ่านไฟล์ .htaccess ที่อยู่ใน public/ ซึ่งจะมีผลก็ต่อเมื่อ <Directory> block ที่เกี่ยวข้องมีการตั้งค่า AllowOverride All ไว้เท่านั้น
เพิ่ม TLS ก่อนเริ่มการติดตั้ง
ให้ดำเนินการเรื่องใบรับรอง (certificate) ตั้งแต่ตอนนี้ ไม่ใช่หลังจากติดตั้งเสร็จแล้ว Flarum จะเขียน base URL ของตัวเองลงใน config.php ระหว่างการติดตั้ง โดยดึงค่า URL มาจากที่อยู่ในเบราว์เซอร์ของคุณ หากคุณติดตั้งผ่าน http:// แล้ว URL ของ asset ทุกรายการที่ Flarum สร้างขึ้นหลังจากนั้นจะขึ้นต้นด้วย http:// ดังนั้นเมื่อคุณเพิ่ม TLS (transport layer security) ในภายหลัง เบราว์เซอร์จะบล็อกคำขอเหล่านั้นเนื่องจากเป็น mixed content และฟอรัมจะแสดงผลเป็นข้อความที่ไม่มีการจัดรูปแบบและไม่มี JavaScript ให้ดำเนินการตาม การตั้งค่า certbot สำหรับ Let's Encrypt บน nginx ให้เรียบร้อยก่อน แล้วตรวจสอบให้แน่ใจว่า https://forum.example.com สามารถเข้าถึงหน้าเว็บได้ จากนั้นจึงค่อยกลับมาดำเนินการต่อ
หากคุณติดตั้งผ่าน HTTP แบบปกติไปแล้ว สามารถแก้ไขได้ด้วยคำสั่งเดียว ให้แก้ไขไฟล์ /srv/flarum/config.php โดยเปลี่ยนค่าของคีย์ url ให้เป็น 'url' => 'https://forum.example.com', จากนั้นรันคำสั่ง php flarum cache:clear ในฐานะผู้ใช้ flarum
เรียกใช้ตัวติดตั้งและจำกัดสิทธิ์ไฟล์ config.php
เปิด https://forum.example.com ในเว็บเบราว์เซอร์ ตัวติดตั้งบนเว็บของ Flarum จะสอบถามชื่อฐานข้อมูล, ชื่อผู้ใช้และรหัสผ่านฐานข้อมูลที่คุณสร้างไว้, ชื่อฟอรัม และบัญชีผู้ดูแลระบบของคุณ ระบบจะเขียนไฟล์ config.php และสร้างตารางข้อมูลต่างๆ เมื่อเสร็จสิ้น ให้จำกัดสิทธิ์ไฟล์ที่เก็บรหัสผ่านฐานข้อมูลของคุณ
sudo chmod 640 /srv/flarum/config.phpไฟล์นี้จะยังคงอ่านและเขียนได้โดย flarum ซึ่งเป็นผู้ใช้ที่รัน FPM อยู่ และบัญชีอื่นบนเซิร์ฟเวอร์จะไม่สามารถอ่านไฟล์นี้ได้ จากนั้นให้ตรวจสอบการติดตั้งผ่านเชลล์
php flarum infoคำสั่งนี้จะแสดงเวอร์ชันของ core, เวอร์ชันของ PHP, extension ที่เปิดใช้งาน, mail driver และ path ที่ใช้งานอยู่ นี่คือสิ่งแรกที่ควรทำเมื่อระบบทำงานผิดปกติ และเป็นสิ่งแรกที่ทุกคนที่ช่วยเหลือคุณจะสอบถามถึง
เหตุใดอีเมลยืนยันการสมัครและรีเซ็ตรหัสผ่านจึงล้มเหลวโดยไม่มีการแจ้งเตือน
ส่วนนี้เป็นตัวตัดสินว่าฟอรัมของคุณจะอยู่รอดในสัปดาห์แรกหรือไม่ อีเมลสองฉบับแรกที่ฟอรัมใหม่ส่งออกคืออีเมลยืนยันการสมัครและอีเมลรีเซ็ตรหัสผ่าน ซึ่งทั้งสองฉบับจะถูกส่งออกไปในจังหวะที่คนแปลกหน้ากำลังตัดสินใจว่าชุมชนของคุณเป็นของจริงหรือไม่ ทั้งสองกรณีนี้มักล้มเหลวโดยไม่มีการแจ้งเตือน ผู้ที่ไม่ได้รับอีเมลจะไม่สามารถบอกคุณได้ และไม่มีสิ่งใดบนแดชบอร์ดผู้ดูแลระบบที่จะแสดงสถานะเป็นสีแดง
Flarum มี mail driver ให้เลือก 4 รูปแบบ โดยตั้งค่าได้ที่ Administration แล้วไปที่ Email ได้แก่ smtp, mail, mailgun และ log ให้เลือก smtp และระบุไปยังบริการอีเมลที่สามารถส่งอีเมลได้จริง ส่วน driver mail จะส่งข้อความไปยัง binary ของ sendmail ในเครื่อง ซึ่งไม่มีอยู่บน Ubuntu VPS ที่ติดตั้งใหม่ ดังนั้นข้อความจึงไม่ถูกส่งไปที่ใดและไม่มีข้อผิดพลาดแจ้งเตือน ส่วน driver log จะเขียนเนื้อหาข้อความลงใน storage/logs/ และไม่ส่งอะไรเลย เนื่องจากมีไว้เพื่อการพัฒนาเท่านั้น
บันทึกการตั้งค่า จากนั้นกดปุ่ม Send Test Mail ในหน้าเดียวกัน ปุ่มนี้เป็นช่องทางเดียวที่คุณจะได้รับผลตอบรับ ดังนั้นควรใช้งานก่อนที่จะเชิญใครเข้ามา หากข้อความไม่ถูกส่งถึง ให้ตรวจสอบ log
tail -n 50 /srv/flarum/storage/logs/flarum.logการเชื่อมต่อที่ถูกปฏิเสธ, การล็อกอินที่ไม่ผ่าน และความล้มเหลวในการเจรจา TLS จะถูกบันทึกไว้ที่นั่นพร้อมกับ host และ port ที่พยายามเชื่อมต่อ หากมีบรรทัดที่ระบุว่า Connection could not be established with host smtp.example.com หมายความว่า port ถูกบล็อกหรือระบุไม่ถูกต้อง สาเหตุที่พบบ่อยคือผู้ให้บริการบล็อกขาออกของ port 25 โดยค่าเริ่มต้น การใช้ port 587 ร่วมกับการตั้งค่า encryption เป็น tls คือค่าที่ใช้งานได้กับบริการอีเมลเกือบทุกแห่ง
เมื่อระบบอีเมลมีปัญหา ผู้เยี่ยมชมที่สมัครสมาชิกจะเห็นแถบแจ้งเตือนความล้มเหลวทั่วไปของ Flarum คือ Oops! Something went wrong. Please reload the page and try again. เนื่องจากคำขอเกิดข้อผิดพลาดในระหว่างการส่งอีเมลยืนยัน ไม่ว่าจะกรณีใดก็ตาม ผู้ใช้คนนั้นจะไม่สามารถเข้าใช้งานได้ และพวกเขาจะไม่เขียนแจ้งคุณเกี่ยวกับปัญหานี้
การทำให้อีเมลถูกยอมรับเป็นปัญหาที่แยกต่างหากจากการส่งอีเมล อีเมลที่ส่งจากที่อยู่ VPS โดยไม่มีการประกาศระเบียน SPF หรือ DKIM สำหรับโดเมนของคุณมักจะไปอยู่ในโฟลเดอร์สแปม หรือถูกทิ้งโดยไม่มีข้อความตีกลับ (bounce message) ทำให้ log ของคุณแสดงว่าส่งสำเร็จ แต่ผู้รับกลับไม่เห็นอะไรเลย การส่งอีเมลอย่างน่าเชื่อถือจากแอปที่โฮสต์เอง จะครอบคลุมถึงระเบียน DNS ที่ต้องประกาศและบริการ relay ที่ควรเลือกใช้
ส่วนขยายคือ Composer package การอัปเกรดจึงต้องใช้คำสั่ง
ใน Flarum ส่วนขยายถือเป็น Composer package รูปแบบหนึ่ง ไม่มีปุ่มสำหรับอัปโหลดและไม่มีไฟล์ zip ให้คัดลอกลงโฟลเดอร์ นี่เป็นการตัดสินใจออกแบบโดยเจตนา เพื่อให้เวอร์ชันต่างๆ ตรวจสอบความเข้ากันได้ซึ่งกันและกัน ชุดส่วนขยายที่แน่นอนจะถูกบันทึกไว้ใน composer.lock และส่วนขยายที่ต้องพึ่งพา PHP library จะได้รับการติดตั้ง library นั้นอย่างถูกต้อง ข้อแลกเปลี่ยนคือการเพิ่มส่วนขยายหนึ่งรายการต้องใช้คำสั่ง 3 ชุดในฐานะผู้ใช้ flarum
composer require 'fof/upload:*'
php flarum migrate
php flarum cache:clearจากนั้นให้เปิดใช้งานส่วนขยายผ่านหน้า Administration แล้วไปที่ Extensions แต่ละคำสั่งมีหน้าที่เฉพาะตัว composer require ทำหน้าที่นำโค้ดลงในดิสก์ php flarum migrate ทำหน้าที่รัน database migration ที่มาพร้อมกับส่วนขยาย ซึ่งเป็นวิธีที่ใช้ในการสร้างตารางข้อมูลของส่วนขยายเอง php flarum cache:clear ทำหน้าที่สร้างชุดไฟล์ JavaScript และ CSS ที่เบราว์เซอร์ต้องโหลดขึ้นมาใหม่ หากข้ามขั้นตอนสุดท้ายนี้จะทำให้เกิดปัญหาที่พบบ่อยคือ เห็นชื่อส่วนขยายในรายการและเปิดสวิตช์ใช้งานแล้ว แต่ไม่มีอะไรเปลี่ยนแปลงในเบราว์เซอร์ไม่ว่าจะรีโหลดกี่ครั้งก็ตาม
การลบส่วนขยายจะทำในขั้นตอนย้อนกลับ ให้ปิดการใช้งานในแผงควบคุมผู้ดูแลระบบก่อน แล้วจึงลบ package ออก Flarum จะคงตารางข้อมูลของส่วนขยายไว้โดยเจตนา เพื่อให้การเปิดใช้งานใหม่ในภายหลังไม่ทำให้ข้อมูลสูญหาย หากต้องการลบตารางข้อมูลเหล่านั้นออกด้วย ให้ทำการ roll back migration ก่อนที่จะลบโค้ดออก
php flarum migrate:reset --extension fof-upload
composer remove fof/upload
php flarum cache:clearรหัสส่วนขยาย (extension id) ในคำสั่งดังกล่าวคือชื่อ package ที่เปลี่ยนเครื่องหมายทับเป็นเครื่องหมายขีดกลาง หากคุณต้องการคลิกมากกว่าการพิมพ์ composer require 'flarum/extension-manager:*' จะเพิ่มหน้าผู้ดูแลระบบอย่างเป็นทางการที่ครอบการทำงานของ Composer ไว้ มันรันการทำงานเดียวกับผู้ใช้เว็บ ต้องการหน่วยความจำและสิทธิ์การเขียนในระดับเดียวกัน และอาจล้มเหลวด้วยสาเหตุเดียวกัน ดังนั้นการใช้บรรทัดคำสั่งจึงยังคงเป็นวิธีที่เชื่อถือได้มากที่สุดเมื่อเกิดปัญหาขึ้น
เหตุใด composer update จึงปฏิเสธที่จะอัปเกรด Flarum
การอัปเกรด Flarum และส่วนขยายทั้งหมดทำได้โดยใช้คำสั่ง Composer หนึ่งคำสั่ง ตามด้วยคำสั่ง Flarum อีกสองคำสั่ง โปรดสำรองข้อมูลฐานข้อมูลก่อนดำเนินการ
composer update --prefer-dist --no-plugins --no-dev -a --with-all-dependencies
php flarum migrate
php flarum cache:clearให้อ่านผลลัพธ์ที่แสดงออกมาแทนการคาดเดาว่าการทำงานสำเร็จ เพราะกรณีที่น่าสนใจคือเมื่อ Composer ปฏิเสธที่จะดำเนินการใดๆ:
Your requirements could not be resolved to an installable set of packages.ข้อความดังกล่าวหมายความว่ามีส่วนขยายที่ติดตั้งไว้ประกาศข้อจำกัด flarum/core ซึ่งไม่รองรับรุ่นที่คุณกำลังจะอัปเกรดไปถึง Composer จะไม่ละเมิดข้อจำกัดนั้น จึงคงการติดตั้งทั้งหมดไว้ที่เวอร์ชันเดิมแทนที่จะพยายามประกอบชุดซอฟต์แวร์ที่ผู้พัฒนาส่วนขยายระบุว่าใช้งานร่วมกันไม่ได้ ให้ค้นหาแพ็กเกจที่เป็นต้นเหตุ
composer why-not flarum/core 1.8.17ผลลัพธ์จะแสดงรายการแพ็กเกจทั้งหมดที่ขัดขวางเวอร์ชันนั้นและข้อจำกัดที่แต่ละแพ็กเกจประกาศไว้ จากจุดนี้ ทางเลือกคือรอให้ผู้พัฒนาเผยแพร่รุ่นที่เข้ากันได้ หรือลบส่วนขยายนั้นออกแล้วใช้งานโดยไม่มีส่วนขยายดังกล่าว นี่คือสิ่งที่ต้องแลกสำหรับรูปแบบการทำงานของ Composer ซึ่งควรทำความเข้าใจก่อนที่คุณจะติดตั้งส่วนขยายถึงสิบห้ารายการบนฟอรัมที่มีผู้อื่นใช้งานอยู่ ควรเลือกใช้ส่วนขยายที่มีการเผยแพร่รุ่นใหม่เมื่อไม่นานมานี้ และจำกัดจำนวนรายการให้สั้นพอที่คุณจะสามารถตรวจสอบได้ทั้งหมด
สิ่งที่ควรสำรองข้อมูล
ให้สำรองข้อมูลฐานข้อมูลและไดเรกทอรีของโปรเจกต์ ส่วนข้อมูลอื่นทั้งหมดสามารถสร้างใหม่ได้
mariadb-dump -u flarum -p --single-transaction flarum > flarum-$(date +%F).sql
sudo tar czf flarum-files.tgz -C /srv flarumในระบบรุ่นเก่า mariadb-dump จะถูกเรียกว่า mysqldump ส่วนใน Ubuntu 24.04 สามารถใช้ได้ทั้งสองชื่อ ฐานข้อมูลจะเก็บโพสต์ ผู้ใช้ และการตั้งค่าทั้งหมดไว้ ไดเรกทอรีของโปรเจกต์จะเก็บ config.php, composer.json (ซึ่งเป็นบันทึกจริงว่าคุณติดตั้งส่วนขยายใดไว้บ้าง) และ assets/ ที่เก็บรูปโปรไฟล์และโลโก้ที่อัปโหลดไว้ คุณสามารถข้าม vendor/ ไปได้ เนื่องจาก composer install จะสร้างโฟลเดอร์นี้ขึ้นใหม่จาก composer.lock และ storage/ จะสร้างตัวเองขึ้นมาใหม่ ให้คัดลอกไฟล์ทั้งสองออกจากเซิร์ฟเวอร์ เพราะการสำรองข้อมูลที่เก็บไว้ในเครื่องเดียวกับที่ปกป้องนั้นไม่ใช่การสำรองข้อมูลที่แท้จริง การกู้คืนข้อมูลหมายถึงการติดตั้ง Flarum ใหม่ด้วยเวอร์ชันเดิม composer install นำไฟล์ที่บันทึกไว้กลับไปวางในตำแหน่งเดิม และโหลดไฟล์ SQL เข้าไป
FAQ
Flarum สามารถรันบน VPS ขนาด 1 GB ได้หรือไม่?
ได้ สำหรับชุมชนขนาดเล็ก การทำงานปกติของ Flarum คือ PHP-FPM ที่คอยตอบสนองคำขอร่วมกับ MariaDB และด้วย pm = ondemand ตัว PHP worker จะทำงานเฉพาะในขณะที่มีผู้ใช้งานอ่านหน้าเว็บเท่านั้น ช่วงที่ใช้ทรัพยากรสูงสุดคือขั้นตอนการติดตั้ง: composer create-project จะประมวลผล dependency graph ทั้งหมดในหน่วยความจำ ซึ่งเป็นขั้นตอนที่มีโอกาสถูก out-of-memory killer สั่งหยุดทำงานมากที่สุด ให้เพิ่ม swap file ก่อนเริ่มติดตั้ง หรือรัน Composer บนเครื่องที่มีสเปกสูงกว่าแล้วค่อยคัดลอกไฟล์ทั้งหมดมาแทน
ทำไมลิงก์ของกระทู้ถึงแสดงผล 404 ทั้งที่หน้าแรกใช้งานได้ปกติ?
server block ของ nginx ของคุณขาด include /srv/flarum/.nginx.conf; ไป Flarum จัดการ URL เช่น /d/1-hello-world ภายใน PHP และ path ดังกล่าวไม่ใช่ไฟล์ที่มีอยู่จริงบนดิสก์ หากไม่มีกฎ try_files $uri $uri/ /index.php?$query_string ใน snippet nginx จะพยายามค้นหาไดเรกทอรีที่ชื่อ d ซึ่งไม่พบ จึงส่งผลให้เกิดข้อผิดพลาด 404 โดยที่ไม่ได้เรียกใช้งาน PHP สำหรับ Apache การทำ routing ในลักษณะเดียวกันจะมาจาก public/.htaccess ซึ่งจะถูกละเลยหาก block <Directory> ไม่ได้ตั้งค่า AllowOverride All ไว้
ทำไมฟอรัมของฉันถึงสูญเสียการจัดรูปแบบทั้งหมดหลังจากเปิดใช้งาน HTTPS?
Flarum จะเก็บค่า base URL ไว้ใน config.php ซึ่งดึงมาจากที่อยู่ที่คุณใช้ในขณะติดตั้ง หากคุณติดตั้งผ่าน HTTP ปกติ Flarum จะยังคงสร้าง URL ของ asset เป็น http:// ต่อไป ซึ่งเบราว์เซอร์จะบล็อกเนื้อหาเหล่านี้เนื่องจากเป็น mixed content บนหน้า HTTPS ส่งผลให้แสดงผลเฉพาะข้อความโดยไม่มีการจัดรูปแบบ ให้แก้ไขคีย์ url ในไฟล์ /srv/flarum/config.php ให้เป็นที่อยู่ https:// แล้วรันคำสั่ง php flarum cache:clear ในฐานะผู้ใช้งานที่เป็นเจ้าของไฟล์
ทำไมไม่มีใครได้รับอีเมลยืนยันการสมัครสมาชิก?
ให้ตรวจสอบ mail driver ก่อน driver แบบ mail ต้องการ binary ของ sendmail ในเครื่อง ซึ่ง VPS ที่ติดตั้ง Ubuntu ใหม่มักจะไม่มี และ driver แบบ log จะเขียนลงใน storage/logs/ เท่านั้นโดยไม่ได้ส่งอีเมลจริง ให้เปลี่ยนไปใช้ smtp โดยใช้พอร์ต 587 และตั้งค่าการเข้ารหัสเป็น tls เนื่องจากผู้ให้บริการส่วนใหญ่บล็อกพอร์ต 25 ขาออก จากนั้นให้กด Send Test Mail หาก log แสดงว่าส่งสำเร็จแต่ยังไม่ได้รับอีเมล ปัญหาจะอยู่ที่ความสามารถในการนำส่ง (deliverability) ไม่ใช่การตั้งค่า ให้คุณไปประกาศค่า SPF และ DKIM record สำหรับโดเมนที่ใช้ส่งอีเมล
ควรติดตั้ง Flarum 1.8 หรือ 2.0?
ควรติดตั้ง 1.8 ณ เดือนสิงหาคม 2026 Flarum 2.0 ยังอยู่ในสถานะ release candidate และที่สำคัญกว่านั้นคือ extension จำนวนมากยังคงระบุข้อจำกัด flarum/core ไว้ที่เวอร์ชัน 1.x การติดตั้ง 2.0 ในตอนนี้หมายถึงการรันฟอรัมที่ extension ไม่สามารถอัปเดตพร้อมกันได้ ซึ่งเป็นความล้มเหลวที่ composer why-not มีไว้เพื่อวินิจฉัย ให้ล็อกเวอร์ชันด้วย flarum/flarum:^1.8.0 และค่อยพิจารณาอีกครั้งเมื่อ extension ที่คุณใช้งานได้ออกเวอร์ชันที่รองรับ 2.0 แล้ว