Deploying WordPress – Part 2: Deploying WordPress with Capistrano

Capistrano

ในตอนที่แล้วได้พูดถึงการจัดการซอร์ซโค้ดของ WordPress ด้วย Git และในตอนท้ายได้พูดถึงการ deploy WordPress โดยใช้ Git hook เอาไว้เล็กน้อย ลำพังตัว Git เองสามารถนำมาประยุกต์ใช้เพื่อ deploy WordPress ได้ก็จริง แต่ก็มีข้อจำกัดค่อนข้างมาก เช่นไม่สามารถเลือกได้ว่าจะ deploy ไปที่เซิร์ฟเวอร์ตัวไหน ไม่สามารถ rollback กลับไปที่รีลีสก่อนหน้าในกรณีเกิดปัญหาที่ไม่คาดคิดเป็นต้น การใช้ Capistrano เข้ามาช่วยในการะบวนการ deploy จะช่วยทำให้การ deploy ง่ายขึ้น และมีความยืดหยุ่นมากขึ้น โดยที่เราสามารถแทรกซอร์ซโค้ดที่ต้องการ พัฒนาส่วนขยายเพิ่มเติม หรือใช้ส่วนขยายที่มีคนพัฒนาเอาไว้แล้วก็ได้ Capistrano เป็นเครื่องมือที่ใช้ในการช่วย deploy ซอร์ซโค้ดของแอปพลิเคชันไปที่เซิร์ฟเวอร์ ซึ่งเดิมทีพัฒนามาเพื่อใช้กับแอปพลิเคชันที่พัฒนาด้วย Ruby on Rails แต่ก็สามารถเอามาประยุกต์ใช้กับแอปพลิเคชันที่พัฒนาด้วยภาษาอื่นๆได้

การทำงานของ Capistrano

 

capistrano

 

Capistrano จะถูกติดตั้งอยู่ในเครื่องของนักพัฒนา (Dev) ซึ่งใช้ Git เป็นซอฟต์แวร์ในการควบคุมรุ่นของซอฟต์แวร์ ซึ่งเราใช้ในการควบคุมรุ่นของ WordPress ซึ่งมี remote repository อยู่ที่ github การใช้งาน Capistrano จะทำผ่านคำสั่ง cap ทาง command line เมื่อเราใช้คำสั่ง cap โปรแกรม Capistrano จะเข้าไปอ่านไฟล์คอนฟิกเกอเรชั่นในไดเรกทอรี config ซึ่งอยู่ภายใต้โปรเจค (mysite) จากนั้นจะทำ remote execution ผ่านทาง ssh ไปที่เซิร์ฟเวอร์ production เพื่อใช้คำสั่ง git ในการดึงซอร์ซโค้ดจาก github มาไว้ที่เซิร์ฟเวอร์ production โดยจะเก็บซอร์ซโค้ดของการ deploy แต่ละครั้งแยกออกจากกันและใช้ symbolic link ชื่อว่า current เพื่อชี้ไปที่ซอร์ซโค้ดที่ถูก deploy ครั้งล่าสุดเสมอ

ด้วยวิธีการนี้ทำให้เราสามารถ rollback ไปที่การ deploy ก่อนหน้าได้ นอกจากนั้นยังอาศัยความสามารถของการทำ remote execution ผ่าน ssh ในการทำงานหลายๆอย่างบนเซิร์ฟเวอร์  เช่น restart  deploy ฐานข้อมูล MySQL ทำการสำรองข้อมูล และสร้างไฟล์คอนฟิกเกอเรชั่นสำหรับ WordPress ที่เหมาะสมสำหรับใช้ในจุดประสงค์ที่ต่างกันได้

ยกตัวอย่างวิธีการใช้งานคร่าวๆเพื่อให้เห็นภาพชัดเจนขึ้น เช่นถ้าเราต้องการที่จะ deploy development branch ของ repo ไปที่เซิร์ฟเวอร์สามารถทำโดยใช้คำสั่ง

$ cap deploy

ถ้าเราต้องการ rollback แอปพลิเคชันจากรีลีสปัจจุบันสู่รีลีสก่อนหน้า สามารถทำโดยใช้คำสั่ง

$ cap deploy:rollback

อ่านเพิ่มเติม “Deploying WordPress – Part 2: Deploying WordPress with Capistrano”