
บทความนี้เจาะเฉพาะประเด็นที่มักพลาดตอนใช้ WP-CLI บน Shared Hosting DirectAdmin ซึ่งต่างจากการใช้บน VPS ที่มีสิทธิ์ Root เต็ม ตั้งแต่การขอสิทธิ์ SSH ปัญหา Permission ที่พบบ่อย ไปจนถึงการตั้ง Cron รัน WP-CLI อัตโนมัติ (สำหรับรายการคำสั่ง WP-CLI แบบละเอียดครบทุกหมวด อ่านเพิ่มที่ คู่มือ WP-CLI ฉบับเต็ม)
WP-CLI คืออะไร
WP-CLI (WordPress Command Line Interface) คือเครื่องมือบรรทัดคำสั่งอย่างเป็นทางการสำหรับจัดการ WordPress แทนการคลิกผ่าน Dashboard ครอบคลุมตั้งแต่ติดตั้ง อัปเดต จัดการปลั๊กอิน/ธีม ไปจนถึงจัดการฐานข้อมูล เหมาะกับงานที่ต้องทำซ้ำๆ หรือทำกับหลายเว็บพร้อมกัน ซึ่งเร็วกว่าคลิกทีละเมนูมาก
ทำไมการใช้บน Shared Hosting ถึงต่างจาก VPS
บน VPS ผู้ใช้มีสิทธิ์ Root เต็มรูปแบบ ติดตั้ง WP-CLI แบบ Global ได้อิสระและรันคำสั่งได้ไม่มีข้อจำกัด แต่บน Shared Hosting อย่าง DirectAdmin ผู้ใช้ได้รับสิทธิ์จำกัดเฉพาะโฟลเดอร์ของบัญชีตัวเอง (Home Directory) เท่านั้น ทำให้มีเงื่อนไขเพิ่มเติมที่ต้องระวัง เช่น การติดตั้ง WP-CLI ต้องเก็บไว้ในโฟลเดอร์ส่วนตัวแทนการติดตั้ง System-wide, บาง Hosting ปิดฟังก์ชัน PHP บางตัวด้วย disable_functions ที่ WP-CLI อาจต้องใช้ และ Memory Limit ของ PHP CLI อาจแยกจาก Memory Limit ของเว็บที่ตั้งไว้ใน DirectAdmin
ขอสิทธิ์ SSH บน DirectAdmin Hosting
Shared Hosting ส่วนใหญ่ปิด SSH Access ไว้เป็นค่าเริ่มต้นด้วยเหตุผลด้านความปลอดภัย ต้องขอเปิดใช้งานก่อนจึงจะใช้ WP-CLI ได้:
- ติดต่อทีมซัพพอร์ตของผู้ให้บริการ Hosting แจ้งความประสงค์ขอเปิด SSH Access สำหรับบัญชีของคุณ
- เมื่อเปิดให้แล้ว จะได้ Hostname, Port (มักไม่ใช่ Port 22 ปกติในบาง Shared Hosting เพื่อความปลอดภัย), Username และ Password หรือ SSH Key
- เชื่อมต่อด้วยคำสั่ง
ssh [email protected] -p PORTจาก Terminal หรือใช้โปรแกรม PuTTY บน Windows - ทดสอบว่าเชื่อมต่อสำเร็จด้วยคำสั่ง
pwdควรเห็น Path ของ Home Directory บัญชีตัวเอง
AsiaGB Hosting เปิดให้ลูกค้าขอ SSH Access ได้ผ่านระบบ Ticket โดยทีมงานจะตรวจสอบและเปิดให้ภายในเวลาทำการ
ติดตั้ง WP-CLI แบบไม่ต้องใช้สิทธิ์ Root
เนื่องจากไม่มีสิทธิ์ sudo mv ไปยัง /usr/local/bin เหมือนบน VPS จึงต้องติดตั้ง WP-CLI ไว้ในโฟลเดอร์ส่วนตัวแทน:
- สร้างโฟลเดอร์เก็บ Binary เช่น
mkdir -p ~/bin - ดาวน์โหลดไฟล์ด้วย
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar - ให้สิทธิ์รันไฟล์ด้วย
chmod +x wp-cli.pharแล้วย้ายเข้าโฟลเดอร์ส่วนตัวmv wp-cli.phar ~/bin/wp - เพิ่ม PATH ให้ Shell รู้จักคำสั่ง
wpโดยเพิ่มบรรทัดexport PATH="$HOME/bin:$PATH"ในไฟล์~/.bashrcหรือ~/.bash_profile - รันคำสั่ง
source ~/.bashrcแล้วทดสอบด้วยwp --version
บาง Hosting ติดตั้ง WP-CLI มาให้แล้วในระบบ ลองรัน wp --version ก่อนเสมอ หากมีอยู่แล้วก็ข้ามขั้นตอนติดตั้งไปได้เลย
แก้ปัญหา Permission ที่พบบ่อย
- Error: This does not seem to be a WordPress installation — ต้องรันคำสั่งจากภายในโฟลเดอร์ที่มีไฟล์ wp-config.php ของเว็บนั้นๆ ใช้คำสั่ง
cd public_htmlก่อนเสมอ - Error: Could not create directory — เกิดจากสิทธิ์เขียนไฟล์ไม่พอ ตรวจสอบว่า User ที่ล็อกอิน SSH ตรงกับ Owner ของไฟล์เว็บไซต์ ถ้าไม่ตรงต้องแจ้ง Support ปรับ Permission
- PHP Fatal error: Allowed memory size exhausted — Memory Limit ของ PHP CLI แยกจากเว็บ แก้ได้ด้วย
php -d memory_limit=512M $(which wp) core updateเพื่อเพิ่ม Memory ชั่วคราวเฉพาะคำสั่งนั้น - Error: exec() has been disabled — บาง Shared Hosting ปิดฟังก์ชัน exec() ด้วยเหตุผลความปลอดภัย ทำให้บางคำสั่งของ WP-CLI ที่ต้องเรียกโปรแกรมภายนอกใช้ไม่ได้ ต้องติดต่อ Support เพื่อตรวจสอบว่าเปิดให้เฉพาะบัญชีได้หรือไม่
คำสั่งที่ใช้บ่อยที่สุดสำหรับงานบน Hosting
สำหรับงานประจำวันบน Shared Hosting คำสั่งที่ใช้บ่อยที่สุดมีเพียงไม่กี่ตัว:
wp core updateและwp plugin update --all— อัปเดต Core และ Plugin ทั้งหมดในคำสั่งเดียว รวดเร็วกว่าคลิกทีละตัวใน Dashboard มากwp search-replace 'old-url.com' 'new-url.com' --dry-run— ทดสอบก่อนเปลี่ยน URL จริงตอนย้ายโดเมนหรือย้าย Hostingwp db export backup-$(date +%F).sql— สำรองฐานข้อมูลอย่างรวดเร็วก่อนอัปเดตครั้งใหญ่ (ดูรายละเอียดคำสั่งฐานข้อมูลเพิ่มเติมใน คู่มือ WP-CLI ฉบับเต็ม)wp plugin list --status=inactive— ตรวจสอบปลั๊กอินที่ปิดใช้งานแต่ยังค้างอยู่ ควรลบทิ้งเพื่อลดความเสี่ยงด้านความปลอดภัย
ตั้ง Cron รัน WP-CLI อัตโนมัติบน DirectAdmin
เมื่อมี SSH Access แล้ว สามารถตั้ง Cron Job ผ่านเมนู Cron Jobs ใน DirectAdmin ให้รันคำสั่ง WP-CLI อัตโนมัติตามตารางเวลาได้ เช่น อัปเดต Plugin ทุกสัปดาห์:
0 3 * * 1 cd /home/username/domains/yourdomain.com/public_html && /home/username/bin/wp plugin update --all --quiet
ต้องระบุ Path เต็มของทั้งโฟลเดอร์เว็บไซต์และไฟล์ wp เสมอ เพราะ Cron ไม่รู้จัก PATH ที่ตั้งไว้ใน .bashrc เหมือนตอนล็อกอิน SSH แบบ Interactive นอกจากนี้ควรเพิ่ม Flag --quiet เสมอเมื่อรันผ่าน Cron เพื่อลด Output ที่ไม่จำเป็น และพิจารณาต่อท้ายด้วย >> /home/username/logs/wp-cli-cron.log 2>&1 เพื่อบันทึกผลลัพธ์และ Error ไว้ตรวจสอบย้อนหลังได้ หากคำสั่งล้มเหลวเงียบๆ โดยไม่มี Log จะหาสาเหตุยากมากในภายหลัง
ตรวจสอบว่า Hosting รองรับ WP-CLI ก่อนสมัคร
ก่อนตัดสินใจสมัคร Hosting สำหรับโปรเจกต์ที่ต้องใช้ WP-CLI เป็นประจำ ควรตรวจสอบล่วงหน้าว่าผู้ให้บริการเปิด SSH Access ให้หรือไม่ เพราะบาง Hosting ราคาถูกมากอาจไม่เปิดให้เลยเพื่อลดความเสี่ยงด้านความปลอดภัยของเซิร์ฟเวอร์ที่ใช้ทรัพยากรร่วมกันจำนวนมาก ควรสอบถามทีมขายหรือ Support ก่อนสมัครเสมอ โดยเฉพาะถ้าต้องบริหารเว็บไซต์หลายแห่งที่ต้องอัปเดตพร้อมกันบ่อยๆ ซึ่งจะได้ประโยชน์จาก WP-CLI มากที่สุด
เคล็ดลับ: ก่อนรันคำสั่งที่มีผลเปลี่ยนแปลงข้อมูล เช่น search-replace หรือ core update ควรสำรองฐานข้อมูลด้วย JetBackup หรือ Backup มาตรฐานของ DirectAdmin ก่อนเสมอ แม้ WP-CLI จะเร็วและสะดวก แต่ก็แก้ไขข้อมูลจริงทันทีไม่มีขั้นตอนยืนยันเหมือน Dashboard
Shared Hosting ทุกที่รองรับ WP-CLI ไหม
ไม่ใช่ทุกที่ ขึ้นอยู่กับว่าผู้ให้บริการเปิด SSH Access ให้หรือไม่ AsiaGB Hosting เปิดให้ลูกค้าขอ SSH Access ได้ผ่านระบบ Ticket ส่วน Hosting บางเจ้าอาจไม่เปิดให้เลยด้วยเหตุผลด้านความปลอดภัย ควรตรวจสอบกับผู้ให้บริการก่อน
ไม่มี SSH Access ใช้ WP-CLI ได้ไหม
ใช้ไม่ได้โดยตรง เพราะ WP-CLI ต้องรันผ่าน Terminal เท่านั้น หากไม่มี SSH Access ต้องจัดการผ่าน Dashboard ตามปกติ หรือขอให้ผู้ให้บริการ Hosting เปิดสิทธิ์ SSH ให้ก่อน
ทำไมรัน wp command แล้วขึ้น Permission Denied
ส่วนใหญ่เกิดจาก User ที่ล็อกอิน SSH ไม่ตรงกับ Owner ของไฟล์เว็บไซต์ หรือไฟล์ wp ที่ติดตั้งไม่มีสิทธิ์ Execute ตรวจสอบด้วย ls -la แล้วรัน chmod +x เพิ่มสิทธิ์รันไฟล์หากจำเป็น
wp-cli.phar กับ wp ต่างกันอย่างไร
เป็นไฟล์เดียวกัน wp-cli.phar คือชื่อไฟล์ที่ดาวน์โหลดมา ส่วน wp คือชื่อที่ตั้งใหม่หลังย้ายเข้าโฟลเดอร์ PATH เพื่อให้พิมพ์คำสั่งสั้นลง ไม่มีความแตกต่างด้านฟังก์ชันการทำงาน
ตั้ง Cron รัน WP-CLI แล้วไม่ทำงาน ต้องตรวจอะไรก่อน
ตรวจสอบว่าใช้ Path เต็มของไฟล์ wp และโฟลเดอร์เว็บไซต์ในคำสั่ง Cron แทนการพึ่ง PATH เพราะ Cron ไม่โหลดค่าจาก .bashrc เหมือนตอน SSH เข้ามาแบบ Interactive
WP-CLI ปลอดภัยพอสำหรับใช้บน Production Site จริงไหม
ปลอดภัยและเป็นเครื่องมือทางการของทีม WordPress เอง แต่เนื่องจากคำสั่งมีผลทันทีไม่มีขั้นตอนยืนยันเหมือน Dashboard จึงควรสำรองฐานข้อมูลก่อนรันคำสั่งที่เปลี่ยนแปลงข้อมูลเสมอ โดยเฉพาะ search-replace และ core update
Hosting ที่พร้อมเปิด SSH ให้ใช้ WP-CLI
AsiaGB Hosting DirectAdmin เปิด SSH Access ผ่านระบบ Ticket รองรับ WP-CLI, Composer และ Git Deploy สำหรับนักพัฒนา
ดูแพ็กเกจ Hosting