จัดการ PHP และบริการด้วย CustomBuild บน DirectAdmin
คำตอบสั้น ๆ: ใช้ CustomBuild ติดตั้งและอัปเดต PHP หลายเวอร์ชัน เพิ่มส่วนขยาย และปรับบริการของเซิร์ฟเวอร์อย่างถูกวิธี
คู่มือนี้อธิบาย DirectAdmin ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย
CustomBuild คือเครื่องมือกลางของ DirectAdmin สำหรับจัดการซอฟต์แวร์ทั้งหมดบนเซิร์ฟเวอร์ ทั้งเว็บเซิร์ฟเวอร์ PHP ฐานข้อมูล และเมลเซิร์ฟเวอร์
กฎสำคัญที่สุดคือทุกอย่างต้องทำผ่าน CustomBuild เท่านั้น การติดตั้งหรืออัปเดตด้วยตัวจัดการแพ็กเกจของระบบโดยตรงจะทำให้การตั้งค่าไม่สอดคล้องกันและ CustomBuild เขียนทับในภายหลัง
สิ่งที่ต้องเตรียม
- DirectAdmin และสิทธิ์ root
- พื้นที่ดิสก์ว่างอย่างน้อย 5 GB สำหรับการคอมไพล์
- ช่วงเวลาที่บริการหยุดชั่วคราวได้
ขั้นตอนที่ 1: อัปเดต CustomBuild เอง
cd /usr/local/directadmin/custombuild
./build update
./build version
ทำก่อนเสมอ เพราะรุ่นใหม่มักแก้ปัญหาการคอมไพล์ที่พบในรุ่นเก่า
ขั้นตอนที่ 2: ดูสถานะปัจจุบัน
./build versions
./build options
คำสั่งแรกเทียบเวอร์ชันที่ติดตั้งกับเวอร์ชันล่าสุดที่มี คำสั่งที่สองแสดงการตั้งค่าทั้งหมด
# ดูเฉพาะที่เกี่ยวกับ PHP
grep -E '^php[0-9]_release|^php[0-9]_mode' /usr/local/directadmin/custombuild/options.conf
ขั้นตอนที่ 3: ติดตั้ง PHP หลายเวอร์ชัน
DirectAdmin รองรับสี่เวอร์ชันพร้อมกัน ทำให้รองรับเว็บเก่าที่ยังใช้ PHP รุ่นเดิมไปพร้อมกับเว็บใหม่
nano /usr/local/directadmin/custombuild/options.conf
php1_release=8.3
php1_mode=php-fpm
php2_release=8.2
php2_mode=php-fpm
php3_release=8.1
php3_mode=php-fpm
php4_release=7.4
php4_mode=php-fpm
./build php n
./build rewrite_confs
คำสั่ง rewrite_confs สร้างไฟล์คอนฟิกของทุกโดเมนใหม่ตามค่าที่เปลี่ยน ต้องรันทุกครั้งหลังแก้ options.conf
ตรวจผล
/usr/local/php83/bin/php -v
/usr/local/php74/bin/php -v
ls /usr/local/php*/bin/php
ขั้นตอนที่ 4: เปลี่ยนเวอร์ชัน PHP ของโดเมน
ผู้ใช้เปลี่ยนเองได้จากหน้า DirectAdmin ที่ Domain Setup แล้วเลือกโดเมน แล้ว PHP Version
ผู้ดูแลเปลี่ยนจากบรรทัดคำสั่งได้
# ดูว่าโดเมนใช้เวอร์ชันไหน
grep -r 'php' /usr/local/directadmin/data/users/username/domains/example.com.conf | grep -i version
# เปลี่ยนผ่าน API ของ DirectAdmin
cd /usr/local/directadmin
./directadmin taskq --run
หลังเปลี่ยนแล้ว ให้ตรวจว่าเว็บยังทำงานและ Log ไม่มีข้อผิดพลาด
tail -50 /var/www/html/example.com/logs/example.com.error.log
ขั้นตอนที่ 5: เพิ่มส่วนขยาย PHP
# ดูส่วนขยายที่ติดตั้งแล้ว
/usr/local/php83/bin/php -m
# เพิ่มผ่าน CustomBuild
./build php_expand_zip 83
./build php_imagick
./build php_ioncube
./build php_redis
./build php_opcache
สำหรับส่วนขยายที่ไม่มีคำสั่งเฉพาะ ใช้ PECL แต่ต้องระบุเวอร์ชันของ PHP ให้ถูก
/usr/local/php83/bin/pecl install redis
echo 'extension=redis.so' > /usr/local/php83/lib/php.conf.d/50-redis.ini
systemctl restart php-fpm83
/usr/local/php83/bin/php -m | grep redis
ขั้นตอนที่ 6: ปรับค่า PHP
อย่าแก้ php.ini โดยตรง เพราะจะถูกเขียนทับเมื่ออัปเดต ให้สร้างไฟล์แยกในโฟลเดอร์คอนฟิก
nano /usr/local/php83/lib/php.conf.d/99-custom.ini
memory_limit = 512M
max_execution_time = 300
max_input_time = 300
post_max_size = 128M
upload_max_filesize = 128M
max_input_vars = 5000
opcache.enable = 1
opcache.memory_consumption = 256
opcache.max_accelerated_files = 20000
opcache.revalidate_freq = 60
systemctl restart php-fpm83
/usr/local/php83/bin/php -i | grep memory_limit
สำหรับค่าเฉพาะโดเมน ผู้ใช้ตั้งได้เองผ่านหน้า DirectAdmin ในส่วน PHP Settings ซึ่งสร้างไฟล์แยกให้อัตโนมัติ
ขั้นตอนที่ 7: อัปเดตบริการอื่น
# ดูว่ามีอะไรรออัปเดต
./build versions
# อัปเดตทีละตัว ปลอดภัยกว่าการอัปเดตทั้งหมดพร้อมกัน
./build nginx
./build php n
./build mysql
./build exim
./build dovecot
# อัปเดตทั้งหมด ใช้เมื่อมีช่วงเวลาให้ปิดบริการได้
./build update
./build all d
สำรองข้อมูลก่อนอัปเดตเสมอ โดยเฉพาะการอัปเดต MySQL ซึ่งย้อนกลับยากที่สุด
mysqldump --all-databases --single-transaction | gzip > /root/all-$(date +%F).sql.gz
ขั้นตอนที่ 8: ตั้งการอัปเดตอัตโนมัติ
nano /usr/local/directadmin/custombuild/options.conf
# แจ้งเตือนเมื่อมีรุ่นใหม่ แต่ไม่ติดตั้งเอง
cron=yes
cron_frequency=daily
[email protected]
notifications=yes
updates=no
แนะนำให้ตั้ง updates=no สำหรับเซิร์ฟเวอร์ที่ให้บริการจริง เพราะการอัปเดตอัตโนมัติอาจเกิดในเวลาที่ไม่เหมาะและทำให้เว็บของลูกค้าล่ม ให้รับการแจ้งเตือนแล้วอัปเดตเองในเวลาที่วางแผนไว้
ปัญหาที่พบบ่อยเกี่ยวกับ DirectAdmin
คอมไพล์ล้มเหลว
ดูสาเหตุจาก Log ก่อน
tail -100 /usr/local/directadmin/custombuild/custombuild.log
สาเหตุที่พบบ่อยคือพื้นที่ดิสก์ไม่พอและหน่วยความจำไม่พอ ตรวจด้วย df -h และ free -h การคอมไพล์ PHP ต้องการหน่วยความจำอย่างน้อย 2 GB หากเครื่องเล็กให้เพิ่ม Swap ชั่วคราว
fallocate -l 2G /swapfile && chmod 600 /swapfile && mkswap /swapfile && swapon /swapfile
เว็บขึ้น 500 หลังเปลี่ยนเวอร์ชัน PHP
โค้ดเก่าไม่รองรับ PHP รุ่นใหม่ ดู Log ของโดเมนเพื่อหาบรรทัดที่ผิดพลาด และย้อนกลับไปเวอร์ชันเดิมก่อนแล้วค่อยแก้โค้ด
ส่วนขยายติดตั้งแล้วแต่ PHP ไม่เห็น
ติดตั้งให้ PHP คนละเวอร์ชัน ตรวจว่าใช้ pecl ของเวอร์ชันที่ถูกต้อง และตรวจว่าไฟล์ .ini อยู่ในโฟลเดอร์ของเวอร์ชันนั้น
ค่าที่ตั้งใน php.ini หายหลังอัปเดต
แก้ไฟล์หลักแทนการสร้างไฟล์แยก ใช้โฟลเดอร์ php.conf.d ตามขั้นตอนที่ 6
ต้องการเซิร์ฟเวอร์ DirectAdmin ที่มีทีมงานดูแลการอัปเดตให้ ติดต่อ THAI DATA CLOUD ได้ที่ https://thaidata.cloud/contact/
อ่านเพิ่มเติมเกี่ยวกับ DirectAdmin