WordPress Staging คือสำเนาของเว็บจริงที่แยกไว้สำหรับทดสอบการอัปเดตปลั๊กอิน ธีม หรือโค้ดใหม่ ก่อนนำขึ้นเว็บจริง (production) เมื่อใช้ร่วมกับ Git และขั้นตอน deploy ที่ชัดเจน จะลดความเสี่ยงที่เว็บลูกค้าพังกลางวัน และทำให้ถอยกลับได้ภายในไม่กี่นาทีเมื่อมีปัญหา
ฟรีแลนซ์และทีมเล็กที่ดูแลเว็บลูกค้าหลายสิบเว็บมักแก้ไฟล์ตรงบน production เพราะเร็วกว่า วิธีนี้ทำงานได้จนถึงวันที่อัปเดตปลั๊กอินแล้วหน้าชำระเงินพัง บทความนี้เสนอ workflow ที่ตั้งได้บน Hosting ทั่วไป โดยไม่ต้องมีระบบ CI/CD ขนาดใหญ่
Workflow ภาพรวม
Local (เครื่องนักพัฒนา) → Git Repository → WordPress Staging → Production
หลักการสำคัญคือ โค้ดไหลขึ้น ข้อมูลไหลลง
- โค้ด (ธีม, ปลั๊กอินที่เขียนเอง, การตั้งค่า) ไหลจาก Git → Staging → Production
- ข้อมูล (ฐานข้อมูล, ไฟล์ที่อัปโหลด) ไหลจาก Production → Staging เพื่อทดสอบกับข้อมูลจริง
การ push ฐานข้อมูลจาก WordPress Staging ทับ production เป็นความผิดพลาดที่ร้ายแรงที่สุด โดยเฉพาะร้าน WooCommerce เพราะออเดอร์และสมาชิกใหม่ที่เกิดระหว่างนั้นจะหายทั้งหมด
ขั้นตอนที่ 1: สร้าง WordPress Staging บน Hosting
ทางเลือกที่พบบ่อยมีสองแบบ
| วิธี | ข้อดี | ข้อควรระวัง |
|---|---|---|
| ใช้เครื่องมือของแผงควบคุม (เช่น WP Toolkit บน Plesk) | กดโคลนได้ทันที, sync ไฟล์และฐานข้อมูลได้ | ต้องเลือกให้ดีว่า sync อะไรขึ้น production |
| สร้างเองบนซับโดเมนด้วย WP-CLI | ควบคุมได้ทุกขั้น, ใช้ได้กับทุกแผงควบคุม | ต้องทำ search-replace URL เอง |
[ตรวจสอบ: ยืนยันว่าแผงควบคุมของ THAI DATA HOSTING มี WP Toolkit หรือเครื่องมือโคลนเว็บแบบใด]
ถ้าสร้างเองบนซับโดเมน เช่น staging.example.com ให้คัดลอกไฟล์และฐานข้อมูลมา แล้วเปลี่ยน URL ด้วย wp search-replace
wp search-replace 'https://example.com' 'https://staging.example.com' \
--all-tables --precise --dry-run
ใช้ --dry-run ดูก่อนเสมอ แล้วค่อยรันจริง คำสั่งนี้จัดการข้อมูลแบบ serialized ที่ WordPress เก็บไว้ได้ถูกต้อง ต่างจากการ find-replace ในไฟล์ SQL ด้วยตัวแก้ไขข้อความ
ขั้นตอนที่ 2: ป้องกันไม่ให้ WordPress Staging หลุดออกสู่สาธารณะ
WordPress Staging ที่เปิดให้ทุกคนเข้าได้สร้างปัญหาสามอย่าง คือ Google เก็บเป็นเนื้อหาซ้ำ ลูกค้าจริงหลงเข้าไปสั่งซื้อ และข้อมูลลูกค้าจาก production ถูกเปิดเผย ควรทำครบทั้งสามข้อนี้
- ตั้งรหัสผ่านระดับเซิร์ฟเวอร์ (HTTP Basic Auth) ให้ทั้งซับโดเมน
- ตั้ง
Discourage search enginesในหน้า Reading ของ WordPress - ปิดการส่งอีเมลออกจาก staging เพื่อไม่ให้ลูกค้าได้รับอีเมลยืนยันออเดอร์ซ้ำ
นอกจากนี้ ถ้าคัดลอกข้อมูลลูกค้าจาก production มาใช้ ข้อมูลส่วนบุคคลจะอยู่บน staging ด้วย ควรจำกัดผู้เข้าถึงให้เหลือเท่าที่จำเป็น หรือทำ data masking ก่อน
ขั้นตอนที่ 3: เก็บอะไรใน Git และไม่เก็บอะไร
| เก็บใน Git | ไม่เก็บใน Git |
|---|---|
| ธีมและ child theme ที่เขียนเอง | wp-config.php (มีรหัสผ่านฐานข้อมูล) |
| ปลั๊กอินที่เขียนเอง | wp-content/uploads/ |
mu-plugins |
ปลั๊กอินจาก repository สาธารณะ (ติดตั้งด้วย WP-CLI หรือ Composer แทน) |
| ไฟล์ตั้งค่าเว็บเซิร์ฟเวอร์ที่ปรับเอง | ไฟล์ cache และ log |
ตัวอย่าง .gitignore พื้นฐาน
wp-config.php
wp-content/uploads/
wp-content/cache/
wp-content/upgrade/
*.log
