เรามาตั้ง mindset กันก่อน สิ่งที่น้องจะต้องทำเป็น ทำได้ และต้องมีก่อนจะอ่านบทความนี้เข้าใจก็คือ

  1. มี droplet บน digital ocean ที่สามารถล้อกอินด้วย sftp แอคเค้า root ได้อยู่แล้ว
  2. มี repository บน bitbucket อยู่แล้ว

การทำ auto deploy คืออย่างนี้ครับ คือ เมื่อไรก็ตามที่เราเขียนโค้ดแล้ว push มันเข้าไปยัง master branch ตัว bitbucket จะทำการอัปโหลดโค้ดที่เราเพิ่งแก้ไป เข้าไปยัง droplet digital ocean โดยอัตโนมัติ

พอมองเห็นภาพมั้ย

ถ้ายังมองไม่เห็น ให้คิดง่ายๆว่า สิ่งที่เรากำลังทำนี่คือ ให้ bitbucket มันช่วยเอาโค้ดเราขึ้นเว็บอัตโนมัติ โดยเราไม่ต้องมานั่ง ftp เอาไฟล์ขึ้นเอง

เก็ตมั้ย

โอเคมาเริ่มกัน

1.คลิกเข้าไปยัง repository ที่ต้องการ (1) (ในตัวอย่างผมจะทดลอง deploy WC Kasikorn Installment Gateway ให้เข้าไปอยู่ในโฟลเดอร์ autodeploy- บนเซิฟเวอร์) จากนั้นคลิก Settings (2) เลื่อนลงไปหาเมนู PIPELINES แล้วคลิก Settings (3) ในกลุ่ม PIPELINES นะ จากนั้นคลิกปุ่ม Enable Pipelines (4) เสร็จคลิกปุ่ม Configure bitbucket pipelines.yml (5)

2.คลิกปุ่ม PHP (1) เลื่อน scrollbar (2) ลงไปด้านล่างเพื่อหาเมนู SFTP deploy (3)

3.เมื่อคลิกเมนู SFTP deploy หน้าต่างเล็กๆจะเปิดขึ้นมา ให้เราคลิกไปที่แท็บ Examples (1) แล้วคลิกปุ่ม Copy (2) ตัวแรก เสร็จแล้วคลิกเครื่องหมายกากบาทปิดหน้าต่างออกไป

4.ที่หน้าแสดงไฟล์ yaml โค้ดประหลาดๆนั้น ให้เราเลือกข้อความตั้งแต่คำว่า script: ไปจนสุดไฟล์ เลือกคลุมนะเราจะแทนที่มันด้วยโค้ดที่เราก้อปปี้มา เสร็จแล้วกดปุ่ม control+v วางโค้ดที่เราก้อปปี้มาแหมะลงไป

5.หน้าตาสำเร็จหลังวางแหมะโค้ด เอาให้ดีนะอย่าไปวางทับเกินหรือขาด

6.เปลี่ยนรายละเอียดดังต่อไปนี้ เปลี่ยนในหน้าต่างนี้แหละ

  • USER: ใส่ root เข้าไป
  • SERVER: ใส่ IP ของ droplet digital ocean เป้าหมาย
  • REMOTE_PATH: ใส่ path บนเซิฟเวอร์ที่เราต้องการให้ bitbucket เอาโค้ดใน repo โยนขึ้นไป
  • LOCAL_PATH: ใส่เครื่องหมาย . (จุด)

เสร็จแล้วคลิกปุ่ม Commit file

7.bitbucket จะทำการรัน auto deploy ของเราครั้งแรก พั่บๆๆๆๆ

8.ซึ่งแน่นอนล่ะ ผลที่ออกมา เออเร่อตัวแดงแป้ด แต่ไม่ต้องตกใจ ไปอ่านข้อ 9 ต่อไปเราจะไปแก้ไขกัน

9.auto deploy ของเราเออเร่อไม่ต้องแปลกใจหรอก เพราะว่ามันไม่สามารถล้อกอินเข้าไปยังเซิฟเวอร์ digital ocean ของเราได้นั่นเอง ก็ลองไปดูในไฟล์ yaml ก่อนหน้านี้สิ เรากำหนดแต่ USER ไม่เห็นมีให้กำหนด PASSWORD

แหงล่ะ เขาไม่ใช้ PASSWORD กัน แต่เขาจะใช้สิ่งที่เรียกว่า SSH Public key, Private key เป็นตัวล้อกอิน ตามมา

คลิกที่เมนู Settings (1) > SSH keys (3) > Generate keys (4)

10.เราจะได้ public key ยาวยืดมา ไม่ต้องตกใจเราไม่ได้จำ อะน้อง ดูด้านล่าง ให้ป้อน IP ของ droplet digital ocean เป้าหมายลงไปในช่อง (1) จากนั้นคลิกปุ่ม Fetch (2)

11.ปุ่ม Fetch จะเปลี่ยนเป็นปุ่ม Add host (1) คลิกปุ่ม Add host เลยครับ

12.IP ของเซิฟเวอร์จะลงไปอยู่ในรายการละ

13.คลิกปุ่ม Copy public key

14.เปิดโปรแกรม ftp ขึ้นมาแล้วล้อกอินเข้าไปยัง droplet ไปที่พาธ /root/.ssh ดาวน์โหลดไฟล์ authorized_keys ลงมา

ตรงนี้แหละที่เป็นเหตุผลว่าทำไมน้องจึงต้องเป็น root ถึงจะทำตามบทความนี้ได้

ถ้าหากไม่มีโฟลเดอร์ และ ไฟล์ที่พี่ว่า ก็สร้างมันขึ้นมานะฮะ

15.วาง public key ที่ก้อปปี้มาลงไปในไฟล์ authorized_keys แล้วบันทึก

1 บรรทัดต่อ 1 คีย์ นะครับ (พูดไว้เผื่อมีของเก่า)

16.อัปโหลดไฟล์ authorized_keys ที่ใส่ public key เข้าไปแล้วขึ้นไปทับของเดิมเลย แบบไม่ต้องปราณี

17.อัปโหลดไฟล์ authorized_keys เสร็จแล้วให้กลับมาที่ bitbucket คลิกเมนู Piplines ด้านซ้ายมือ (1) แล้วคลิกตรงคำว่า Failed (2) ต่อ

18.คลิกปุ่ม Rerun เพื่อสั่งให้ butbucket ทำการ auto deploy อีกครั้ง

19.ไฮย่ะ มันต้องอย่างนี้ มันต้องเขียว ถ้าไม่เขียวก็อ่านใน log ด้านขวามือนะครับ มันจะแจ้งว่าทำไม

20.กลับมาดูที่ ftp ในโฟลเดอร์เป้าหมายที่เซ็ตไว้ว่าให้ auto deploy มาที่โฟลเดอร์นี้ มันจะต้องมีโค้ดจาก repository ขึ้นมา

อันนี้เป็นตัวอย่าง พี่ยัดมันให้เข้าไปอยู่ใน subfolder ถ้าหากน้องต้องการ deploy เว็บทั้งเว็บ ก็ไม่ต้องให้มันเข้าไปอยู่ใน subfolder ละครับ ก็เซ็ตเอา

ต่อไป เมื่อไรก็ตามที่เรา push โค้ดขึ้น master branch มันจะถูก auto deploy โดยอัตโนมัติ

การคอนฟิกไฟล์ yaml ยังมีลูกเล่นอีกเพียบนะครับ ลองอ่านเสริมดู

เราสามารถเจาะจง branch ได้ เราสามารถสั่งให้มันรัน composer ก่อนได้ สั่งนู่นนี่นั่นได้อีกเพียบ ลองเล่นดู แล้วเอามาเล่าสู่กันฟังบ้าง พี่ก็ได้อยู่แค่นี้แหละ