in Technology

สร้างเว็บไซต์บน Kubernetes ง่ายๆ โดยไม่ต้องวางระบบเองด้วย DigitalOcean App Platform

วันนี้เพิ่งได้เข้าไปดูบัญชี DigitalOcean ตัวเอง กะว่าจะปรับเปลี่ยนแพ็คเกจอะไรนิดหน่อย พบว่าเขามีออกบริการตัวใหม่มาตัวหนึ่ง (จริงๆ ออกมาตั้งแต่เดือนตุลาคมแล้ว กระผมรู้ช้าเอง T-T) ชื่อว่า DigitalOcean App Platform

ลองอ่านคอนเซ็ปตอนแรกตื่นเต้นมากครับ นึกว่า DigitalOcean ทำ Serverless ออกมาแล้ว แต่จริงๆเป็น PaaS (Platform as a Service) ตัวหนึ่ง ที่ช่วยสร้าง Infrastructure ต่างๆ ให้โดยที่เราไม่ต้องจัดการอะไรเองเลย แต่ก็ยังตื่นเต้นอยู่นะ เพราะมันทำด้วย Kubernetes ที่ Scaling ได้ และรองรับภาษาหลายตัว รวมถึง PHP ด้วยจ้า

ภาพอธิบาย PaaS จาก:
https://medium.com/@sdorzak/why-serverless-is-the-new-black-e4ff9e9947e0

มีอะไรน่าสนใจใน DigitalOcean App Platform

ก่อนจะพาดูผมทดสอบ ขอขายของให้สุดก่อน ว่าทำไมผมถึงชอบมัน และตื่นเต้นอยากลองใช้

  1. ราคาถูก – คนใช้ DigitalOcean อย่างผมจะรู้ว่าที่นี่ราคาถูกดี รวมถึงเจ้าระบบ App Platform ด้วย ที่เริ่มต้นเพียง 5$ ต่อเดือน (แต่ใช้ ฟรี ได้นะ ถ้าเป็น static files)
  2. รองรับหลายภาษาเขียนโปรแกรมและเฟรมเวิร์ก – เช่น Node.js, Python, Django, Go, PHP, Laravel, React, Ruby, Ruby on Rails, Gatsby, Hugo แต่ถ้าอยากใช้นอกเหนือกว่านี้ เช่น .NET Core ก็ทำเป็น Docker Container ไปใช้ได้ รวมถึงทำไต์ง่ายๆ เป็น static sites หรือ CDN ก็ได้
  3. Scale ได้ง่าย – เพราะทำงานอยู่บน Kubernetes clusters จึงทำให้ รองรับการ Scale-out หรือ Scale-up ได้ เพียงแค่กดเปลี่ยนแพ็คเกจของ App หรือกดเพิ่มลดจำนวน App ในหน้า Dashboard ได้เลย
  4. Zero Downtime – ในขณะที่เรา Scale-out หรือ Scale-up ตัว Server เราอยู่ จะไม่กระทบกับเว็บไซต์เรา ผู้เข้าเว็บไซต์ยังทำงานได้ปกติ
  5. Automated Deployment – มันจะเชื่อมต่อกับ Github ของเรา (อนาคตจะต่อกับ Bitbucket,GitLab ได้) และเมื่อมีการ Push Code ขึ้นไป ก็จะทำการ Deploy ทันทีที่ App Platform ทำให้เราเห็นการเปลี่ยนแปลงได้ทันทีบนหน้าเว็บไซต์เรา

ตั้งแต่ข้อ 3-5 ถ้าเราจะวางระบบ Infrastructure ให้ได้แบบนี้ คงไม่ใช่เรื่องง่ายๆเลย (อย่างน้อยก็สำหรับผมคนหนึ่งแล้วหละ)

ปล. จะเรียกว่าข้อเสียไหมไม่รู้นะครับ แต่ตอนนี้ยังไม่มีบริการทางฝั่ง Asia ให้เลือก ดังนั้นอาจมีผลกับความเร็วเล็กน้อย, รวมถึงยังไม่มีฟีเจอร์ให้ใช้งานอะไรมาก จนถึงขั้นกำหนด Pipeline หรือลงรายละเอียด จนถึงขั้นเป็น CI/CD แบบใน Jenkins ได้

แนะนำให้ศึกษาเรื่องเหล่านี้ก่อน

บริการนี้เรียกได้ว่าเป็น Automated Deployment ดังนั้น หากจะนำไปใช้งานจริง ควรจะเข้าใจที่มาที่ไปไว้บ้าง ว่า Best Practice ที่ควรทำเป็นอย่างไร เพราะหากอ่านแล้วและนำไปใช้จริง อาจจะเกิดความเสียหายได้ ดังนั้น ผมแนะนำให้ไปอ่านเรื่องราวนี้ก่อนครับ

ทดสอบ DigitalOcean App Platform กันหน่อย

ไปสร้าง Repository บน GitHub ไว้ และนำไฟล์โค้ดของเว็บไซต์เรา push ขึ้นไปรอไว้ก่อน ในที่นี้ผมใส่ index.html ไว้

เข้า DigitalOcean และไปที่เมนู App จากนั้นกด Launch Your App (ใครยังไม่ได้สมัคร ก็ไปสมัครสมาชิก DigitalOcean กันก่อนนะ)

สำหรับครั้งแรก จะเจอให้ Link Account กับ GitHub ก่อนนะครับ

เมื่อ Link Account GitHub เสร็จ ก็เลือก Repository ที่เราต้องการใช้สร้าง

จากนั้นเลือก Region ซึ่งปัจจุบันตอนผมทดสอบ ยังมีเพียงฝั่งทวีป America และ Europe เท่านั้น, จากนั้นเราเลือก Git Branch ที่ต้องการเชื่อมโยงการ Deploy และเลือกว่าจะให้ Deploy อัตโนมัติทันทีเมื่อมีการ Push Code เข้าสู่ Branch นั้น

มาถึงส่วนสำคัญ คือการ Config App ของเรา ว่าจะตั้งค่าอย่างไรบ้าง ดังนี้

  • Type – คือประเภทของ APP ซึ่งในที่นี้ระบบมองว่าโค้ดผมเป็น HTML มันเลยเลือกให้เป็น Static Site ให้
  • HTTP Routes – กำหนด Path ในการเข้าถึง เช่น / จะวิ่งเข้ามาที่ App นี้ หรือจะตั้งว่า /aabbcc ก็ได้ ดังนั้นใครเข้า www.web.com/aabbcc ก็จะเข้ามาที่ App นี้
  • Environment Variables – ตัวแปรที่เก็บไว้ใช้ในระบบ เช่น เก็บ User/Password Database ไว้ที่นี่เป็นต้น
  • Build Command – เป็น Shell Script จะใส่อะไรก็ได้ หรือเว้นไว้ก้ได้
  • Output Directory – ที่เก็บผลลัพธ์หลังจาก build แล้ว

ส่วนปุ่มด้านล่าง Add a Database คือการให้ App นี้อนญาตให้เชื่อมต่อกับ Database อะไรได้บ้าง หรือจะสร้างใหม่เลยก็ได้นะ

ขั้นตอนสุดท้ายคือการเลือกแพ็คเกจใช้งาน ซึ่งในที่นี้เป็น Static Site เลยทำให้ใช้งานได้ฟรีครับ แต่ถ้าเราใช้กับพวก Dynamic Script อย่าง Node.js, PHP, Docker ก็จะต้องใช้เป็น Basic หรือ Pro เท่านั้น แต่ก็ถือว่าเป็นการเริ่มต้นใช้งานที่ถูกมากๆ แค่ 5$ เท่านั้น (แต่แพ็คเกจ Basic ทาง DigitalOcean แนะนำให้ใช้เป็นระบบสำหรับทดสอบ หรือ Prototype จะดีกว่านะ)

หลังจากกด Launch Starter App แล้ว รอสักครู่ มันจะสร้าง Instant และเมื่อเสร็จแล้ว ก็จะเห็น URL สำหรับการใช้งาน

เมื่อทดลองเข้าไปดูตาม URL ก็จะเห็นหน้าที่ผมไว้สร้างไว้บน GitHub แล้ววว

แต่หน้าตามันดูห่วยๆ เนอะ คราวนี้ผมจะสร้าง css file เพิ่ม

และทำการ push code ขึ้นสู่ GitHub

มีไฟล์ css เพิ่มมาใน GibHub แล้ว

พอผมกลับไปดูหน้าเว็บไซต์ ว้าวว มันเป็นระเบียบสวยงามขึ้นแล้ววว

ไปดูรายการ Deployments มีการเก็บบันทึกไว้ว่ามีการ Deploy อะไรไปบ้าง

สรุป

อย่างที่ผมเกริ่นไปตอนแรก การจะวางระบบ Infrastructure ให้ได้แบบนี้ หรือเริ่มใช้ Kubernetes คงไม่ใช่เรื่องง่ายๆเลยสำหรับผู้ใช้งานทั่วไป หรือโปรแกรมเมอร์หลายๆคน รวมถึงผมด้วย ต่อให้สร้างขึ้นมาได้ แต่การดูแลรักษาเป็นเรื่องที่ปวดหัวมาก เช่น ถ้ามีผู้ใช้เข้ามาสูงมากๆ หรือถ้าโดน DDoS โจมตี เป็นต้น

ดังนั้นการมีบริการ PaaS ลักษณะนี้ขึ้นมา ก็ช่วยทำให้เราสะดวกมากขึ้น และทำให้โปรแกรมเมอร์อย่างเรา สามารถเป็น DevOps ได้เองอย่างไม่ยากเย็นนัก

มาคุยกัน

Comment