DirectAdmin

เขียนค่าลง DirectAdmin ตอนที่ API มีแต่ฝั่งอ่าน ต้องขับฟอร์มของแผงเอง
บันทึกการทำให้แอปหลังบ้านสร้างและแก้แพ็กเกจโฮสติ้งบน DirectAdmin ได้ ทั้งที่ CMD_API ตัวทางการมีแต่คำสั่งอ่าน ต้อง POST เข้าฟอร์มของแผงควบคุมเอง พร้อมกฎการยืนยันผลที่ห้ามใช้ regex และสวิตช์ตัดวงจรสองชั้นที่ปิดไว้เป็นค่าตั้งต้น

tinker ส่งเมลผ่าน แต่เว็บส่งไม่ออก — proc_open ที่ปิดอยู่ใน FPM
ทดสอบส่งเมลจาก tinker ผ่านฉลุย แต่พอกดจากฟอร์มจริงกลับไม่มีอะไรออกเลย และ mail log ไม่มีสักบรรทัด — เพราะ CLI กับ PHP-FPM ไม่ใช่ PHP ตัวเดียวกัน พร้อมสูตร SMTP AUTH ที่ใช้ได้จริงบนโฮสต์ DirectAdmin และกฎเรื่อง From ที่ห้ามพลาด

deploy แล้วเว็บไม่อัปเดต — ไล่แคชห้าชั้นให้จบในครั้งเดียว
อัปไฟล์ขึ้นแล้ว เปิดดูยังเป็นของเก่า กด Ctrl+F5 ก็ยังเก่า — เพราะระหว่างไฟล์บนดิสก์กับสิ่งที่คนเห็นมีแคชคั่นอยู่ห้าชั้น แต่ละชั้นล้างคนละวิธี บทความนี้คือลำดับล้างที่ผมใช้ประจำ พร้อมกับดักที่ทำให้เว็บ 500 ค้างหลังสั่งล้าง view cache

route:cache แล้วทุก GET กลายเป็น 405 — กับดักแอปใต้ sub-path
deploy เสร็จ กด optimize ตามคู่มือ แล้วทุกหน้าตอบ 405 Method Not Allowed ทั้งที่ route:list ยืนยันว่า route ถูกต้อง — เรื่องของ route cache ที่พังเฉพาะบางเครื่อง วิธีแยกให้ขาดใน 30 วินาที และของแถมอีกสามอย่างที่เจอพร้อมกันตอนเอาแอปไปวางใต้ sub-path

โฮสต์ static บน DirectAdmin แล้ว GET ได้ 404 แต่ HEAD ได้ 200
อัปเว็บ static ขึ้น public_html แล้วเปิดไม่ได้ ไฟล์เล็กออกปกติ ไฟล์ใหญ่ 404 แต่ยิง HEAD กลับได้ 200 ทุกไฟล์ ต้นเหตุคือ .htaccess ของ Laravel ที่นั่งอยู่ที่ docroot ดูดทุกอย่างเข้า front controller บทความนี้เล่าทั้งการวินิจฉัยและทางออกสามทาง

Laravel หลัง proxy เห็น IP เป็น 127.0.0.1 — ฟอร์มเงียบ ไม่มี error
ฟอร์มติดต่อบน DirectAdmin กดส่งแล้วขึ้นว่าไม่ใช่คน เมลไม่ออก แต่ log ทุกชั้นเงียบสนิท — ต้นเหตุคือ Laravel หลัง nginx-to-apache เห็น $request->ip() เป็น 127.0.0.1 ทำให้ด่านตรวจบอทไม่ผ่านแล้ว return ก่อนถึงบรรทัดส่งเมล พร้อมเหตุผลว่าทำไม TrustProxies ห้ามใส่ '*'

ย้ายบอร์ด vBulletin 4.2.5 ไป Flarum: บทเรียนจากสองแสนโพสต์
ย้ายฟอรัมเก่า vBulletin 4.2.5 ที่มีสมาชิกเจ็ดพันกว่า กระทู้สองหมื่นกว่า และโพสต์สองแสนกว่า ไปอยู่บน Flarum — บันทึกกับดักที่เสียเวลาจริง ตั้งแต่ guest userid 0 ที่ทำ FK พังทั้งชุด, md5 ซ้อน md5 ของรหัสผ่านเก่า, การแปลง BBCode เป็น s9e XML, attachment ที่อยู่บนดิสก์ไม่ใช่ใน DB ไปจนถึงเหตุผลที่ต้อง scp สคริปต์แทน heredoc

ตั้ง DirectAdmin Admin Backup cron จาก CLI ไม่ต้องกดผ่าน panel
หน้า CMD_ADMIN_BACKUP ให้คลิกตั้ง cron ทีละห้าขั้น แต่จริงๆ DirectAdmin แค่ต่อท้ายบรรทัดเดียวลงไฟล์ backup_crons.list แล้วปล่อยให้ dataskq เก็บไปทำ วิธีเขียนตรงเข้าไฟล์จาก CLI พร้อมกับดัก when=now, base64 และ append_to_path ที่คนมักพลาด

WordPress ขึ้น 500 บางหน้า แต่ debug.log ว่าง — fatal จริงอยู่ที่ apache log
WordPress ขึ้น 500 เฉพาะหน้า portfolio แต่ debug.log ว่างเปล่า — เพราะ fatal ที่เกิดตอน theme render เกิดก่อน WP logging พร้อม ต้องไปหาความจริงที่ apache error log (proxy_fcgi) พร้อมวิธีแก้ child theme ที่ก๊อป template ค้างจาก parent รุ่นเก่า

โดเมน .com โดนยึด — ย้ายทั้งเว็บไป .net บน DirectAdmin แบบข้อมูลไม่หาย
โดเมน .com หมดอายุหลุดไปอยู่กับ domain squatter — เล่าวิธีย้ายทั้งเว็บ (ไฟล์/เมล/DNS/SSL) ไปโดเมน .net ใหม่บน DirectAdmin ด้วย CMD_CHANGE_DOMAIN คำสั่งเดียว พร้อมงานหลังบ้าน 4 อย่างที่ไม่ตามมาอัตโนมัติ

ทำ Redis แบบ per-user บน DirectAdmin โดยไม่ต้องซื้อ pro_pack
วิธีติดตั้ง Redis object cache แยกต่อ user บน DirectAdmin shared hosting ด้วย systemd template + unix socket + cgroup limit โดยเขียน provisioning script เองแทน DA panel ที่ต้องใช้ pro_pack license พร้อมสูตรเชื่อม WordPress, Flarum และ Laravel

ย้าย DirectAdmin จาก CentOS 7 ไป Debian 12 บน Proxmox (สารบัญซีรีส์)
บันทึกการย้าย DirectAdmin shared host จาก CentOS 7 (EOL) ไป Debian 12 บน Proxmox ลูกค้า 80+ ราย แตกเป็น 5 ตอน พร้อมภาพรวมขั้นตอนและลิงก์ทุกตอน

ย้าย DA จาก CentOS 7 ไป Debian 12 ตอนที่ 4 — Cutover จริง กับ 17 ปัญหาหลังสลับเครื่อง
เล่า cutover จริงที่แผน downtime ใกล้ 0 พังเพราะ DA Legacy license และ qcow2 อ่านช้า สุดท้าย downtime 1 ชม. แล้วเจอ 17 ปัญหารัวๆ หลังสลับเครื่อง — critical web stack ดับ, medium subset ใช้ไม่ได้, minor debugging notes ครบ

ย้าย DA ตอนที่ 3 — ลง DirectAdmin + CustomBuild บน Debian 12
ลง DirectAdmin ผ่าน setup.sh แล้วประกอบ stack ทั้ง PHP หลายเวอร์ชัน MariaDB ModSecurity และ rspamd ด้วย CustomBuild บน staging VM ที่อยู่หลัง NAT พร้อมกับดักที่ผมเจอมาแล้วจริง

ย้าย DA CentOS 7 → Debian 12 บน Proxmox ตอนที่ 1 — NAT pre-stage
เทคนิคเตรียม VM ใหม่บน internal bridge แบบ NAT ขณะที่ VM เก่ายังให้บริการลูกค้าปกติ ลด downtime ตอนย้าย DirectAdmin จาก CentOS 7 ไป Debian 12 บน Proxmox