ชีวิตใน GCE

Submitted by ezybzy on Sat, 2021-08-14 - 19:00

หัวข้อนี้ น่าจะใช้เวลาในการเขียนยาว แต่โดยสรุปก็คงต้องบอกว่า ได้ควบคุมดั่งใจ (แม้จะมากไป) ในราคาที่สมเหตุสมผล

ความเดิมเมื่อหลายปีก่อน

ปรกติเวลามีคนพูดถึงว่าจะตั้งเว็บไซต์กัน ก็จะนึกถึงบริการ Web hosting ซึ่งแต่ละเจ้าแต่ละยี่ห้อก็จะมีบริการและราคาที่แตกต่างกัน เมื่อสิบกว่าปีก่อนผมก็ใช้บริการของผู้ให้บริการรายหนึ่ง (จำชื่อไม่ได้แล้ว) ในตอนนั้นก็จะเป็นการอัพโหลดไฟล์ของ CMS ตัวที่เลือกใช้ ตอนนั้นจำสาเหตุที่เปลี่ยนผู้ให้บริการไม่ได้แล้ว (จำไม่ได้ว่าด้วยเหตุผลเรื่องราคาหรือไปขัดแย้งอะไร) ก็ทำให้ย้ายมาอยู่กับผู้ให้บริการรายที่สอง ซึ่งโดยรวมก็ไม่ได้มีปัญหาอะไรกับเขา แต่ตัว CMS ที่เลือกใช้ (Drupal) นั้นมีการเปลี่ยนแปลงวิธีติดตั้งและบำรุงรักษา ทำให้เริ่มจะพบปัญหาการใช้งาน เนื่องจากไม่สามารถบำรุงรักษา Package ของ Drupal ด้วยการแค่อัพโหลดไฟล์ไปทับได้ง่ายแล้ว มีความจำเป็นต้องเปลี่ยนค่าไฟล์อะไรต่าง ๆ ที่เกี่ยวข้องอีกซึ่งไม่สะดวกที่จะแก้ไขด้วยมือเท่าไร ประกอบกับตัว Drupal เองก็เริ่มเรียกความต้องการของ PHP เป็นรุ่นที่สูงขึ้นซึ่งผู้ให้บริการรายที่สองนี้ไม่สามารถอัพเดตระบบไล่ตามให้ได้ทันเท่าไร (ผู้ให้บริการรายที่สองนี้มีลูกค้าส่วนใหญ่เป็น Wordpress และเว็บเก่า ๆ ที่ไม่กล้ารับประกันการอัพเดต PHP) จึงเป็นเหตุให้ผมเริ่มหาทางเลือกอื่น ๆ ในการ Host เว็บ Drupal ใหม่ให้ได้มาตรฐานการบำรุงรักษาที่ดีตามคำแนะนำของผลิตภัณฑ์ และได้ดูคลิปของคุณ Chris Titus ที่ได้แนะนำวิธีการ Host เว็บไซต์ฟรี ๆ บน Google Cloud Platform เมื่อเห็นว่าขั้นตอนไม่ได้ยุ่งยากและอยากทดลองกับ Drupal ของเว็บตัวเอง การดำเนินการจึงเกิดขึ้นเมื่อราว ๆ สองปีที่แล้ว

ทำอะไรไปบ้าง

จากลิงค์บนความของคุณ Chris สิ่งที่ผมทำหลัก ๆ คือ ตั้ง GCE 1 ตัวใน Free-tier (ตอนนั้นใช้ F1-micro) เป็น Ubuntu เคยลองใช้ Debian แต่พบว่า Package ต่าง ๆ มันขาดไปเยอะ ไม่ค่อยสะดวกสบายเท่า Ubuntu และผมคิดว่ามันไม่คุ้มค่าเวลาที่ผมต้องมาอุดปัญหาการใช้งานระบบปฏิบัติการตัวนั้น

Virtual Machine (VM) ในยุคนั้นให้หน่วยความจำมาเพียง 600 กว่า MB เท่านั้น ซึ่งก็ยังถือว่าเพียงพอกับการ Host เว็บไซต์ที่ไม่ได้มี Traffic รุนแรง การที่ใช้ VM แค่ตัวเดียวนี้ไม่ใช่การวางสถาปัตยกรรมที่ดี แต่เมื่อชั่งน้ำหนักพิจารณาเรื่องค่าใช้จ่ายกับผลลัพธ์ที่ต้องการ ก็ถือว่ายอมรับความเสี่ยงที่อาจจะเกิดขึ้นจากการเจาะระบบรวมไปถึงการโจมตีรูปแบบต่าง ๆ ได้

เมื่อมี VM แล้ว การเข้าไปจัดการ VM ที่เป็น Linux นั้นมีช่องทางหลัก ๆ คือการใช้ ssh ซึ่งโดยปรกติเรามักจะคุ้นเคยกับการต้องมี Username, Password เพื่อจัดการ แต่ใน GCE นี้เป็นระบบที่ใช้ Certificate ในการติดต่อ ทำให้ต้องไปจัดการสร้าง Certificate และลงทะเบียน Certificate จึงจะสามารถจัดการกับ VM ภายนอก Console ของ GCE

ขั้นตอนการติดตั้ง Pre-requisite ต่าง ๆ ของ Drupal ได้แก่

  • Apache Http Server
  • PHP 7
  • MySQL
  • composer ซึ่งเป็นตัวที่ใช้จัดการกับ Package ของ PHP ที่ทาง Drupal แนะนำให้ใช้ (ผมไม่ได้ไปถึง drush)

ในตอนแรกที่ทำก็ทำอย่างไม่มีความรู้ นั่นคือเป็นแค่การยกทุกอย่างจากผู้ให้บริการรายที่สองมาวางบน GCE โดยยังไม่ได้มีการเปลี่ยนแปลงใด ซึ่งแน่นอนว่าจะยังต้องเจอปัญหาการจัดการ Package ของ Drupal ตามเดิม แต่ก็ได้มีการปรับให้รับกับ composer ไปอย่างง่าย ๆ ซึ่งก็พอจะถูไถสำหรับ Drupal 7 และนอกจากปัญหาของ composer แล้วยังมีข้อจำกัดอีกอย่างคือใน GCE นั้นไม่อนุญาตให้ใช้งาน SMTP ผ่านทาง Port 25 หากจำเป็นต้องมีการส่งเมล์อาจจะต้องไปสมัครบริการอื่นเพิ่มเติม

การใช้ composer บน GCE ที่เป็นตัว Free-tier นี้ ถ้าให้พูดตามตรงคือเหมาะแค่ระดับการรันคำสั่ง composer install --no-dev เท่านั้น เนื่องจากหน่วยความจำที่ค่อนข้างจำกัด ทำให้การรันคำสั่ง composer update นั้นมันจะทำให้เกิดการใช้หน่วยความจำที่สูงจนกระทั่ง Apache ตายทำให้เว็บล่ม ทำให้ทุกการ update ที่จะเกิดขึ้น ผมต้องไปหา VM ตัวอื่นที่มีหน่วยความจำมากกว่า รันคำสั่ง composer update --no-dev แทน เพื่อเอาไฟล์ composer.lock ที่ได้มาอัพโหลดแล้วสั่ง composer install ซึ่งใช้หน่วยความจำที่น้อยกว่า เนื่องจากเป็นการติดตั้ง Package เท่าที่ถูกสั่งตามไฟล์ composer.lock นั่นเอง ซึ่งเป็นข้อจำกัดที่ถือว่าพอจะยังยอมรับได้

เมื่อ Drupal 8 เปิดตัวสู่สาธารณะ ผมก็มีความต้องการที่จะอัพเดต Drupal 7 ขึ้นไป ซึ่งในวิธีการอย่างเป็นทางการ จำเป็นต้องทำการ Migrate ข้อมูล (ซึ่งมีความยุ่งยากพอสมควร) การที่สามารถใช้งานได้มากกว่าแค่การอัพโหลดไฟล์จึงทำให้กระบวนการในส่วนนี้ค่อนข้างจะคล่องตัวกว่าเดิมที่ทำได้แค่อัพโหลดไฟล์ แต่จะว่าไป Drupal 8 ที่ได้ออกมานี้ก็ยังไม่ถือว่าเป็นที่สุดเนื่องจากมันยังเป็น Drupal 8 ที่ไม่สามารถจัดการ Package ทุกอย่างผ่าน composer ได้ ผมจึงเริ่มโครงการต่อไป นั่นคือการแปลง Drupal 8 เดิมให้จัดการ Package ผ่าน composer ได้ ซึ่งไม่ได้ยากอย่างที่คิด สามารถทำตามขั้นตอนนี้ได้ สิ่งที่ต้องตรวจสอบหลัก ๆ คือ ไฟล์อะไรต่าง ๆ ที่ไม่ได้อยู่ใน Package ดั้งเดิมของ Drupal จำเป็นต้องไปปรากฏบน Composerize Drupal ที่ทำขึ้นมา ก่อนที่จะทำการปรับ config ของ Drupal ตัวใหม่ให้ชี้ไปยังฐานข้อมูลของระบบและเลิกใช้งานตัวเก่า

เมื่อ Drupal เรียบร้อย สิ่งต่อไปที่ได้ดำเนินการคือ การขอ Certificate กับ Let's encrypt และเปลี่ยนการตั้งค่าบน Cloudflare ให้ไซต์ไปใช้รูปแบบ Full (Strict) แทนแบบเดิมเพื่อเพิ่มความปลอดภัย ซึ่งอันนี้เป็นการทำตามคำแนะนำของ Cloudflare เองที่แนะนำว่า CMS บางตัวควรแยกโดเมนสำหรับผู้ใช้งานทั่วไป กับผู้ดูแลระบบออกจากกัน เพื่อไม่ให้ Cache ของฝั่งผู้ดูแลหลุดไปยังผู้ใช้งานทั่วไป ทำให้จำเป็นต้องมี Certificate ของชื่อซับโดเมนของผู้ดูแล ซึ่งไหน ๆ ก็ทำแล้วก็ทำให้หน้าเว็บหลักไปด้วยเลย (แบบ www และแบบไม่มี www)

สิ่งสุดท้ายที่จำเป็นต้องทำหลังจากอะไรต่าง ๆ ลงตัวแล้วคือการจัดระเบียบ path อะไรต่าง ๆ ใน VM นี้เพื่อให้สะดวกในการดูแลรวมถึงการจัดการ Log และ Backup ต่าง ๆ ซึ่งจะยังไม่ขอกล่าวถึงในข้อเขียนนี้

สิ่งต่อไปที่รอดำเนินการอยู่นั่นคือการอัพเดตไปยัง Drupal 9 แต่ในตอนนั้นยังติดปัญหากับ Module บางตัวที่ใช้อยู่ใน Drupal 8 นี้ที่ยังไม่รองรับ Drupal 9 อย่างเป็นทางการเสียที ทำให้ยังไม่สามารถดำเนินการต่อไปได้

ค่าใช้จ่ายจากชีวิตใน GCE

เขียนมายาวแล้วแต่ยังไม่ได้มีการพูดถึงเรื่องค่าใช้จ่ายเลยว่า มันแตกต่างจากผู้ให้บริการรายเดิมอย่างไร?

ใน Google Cloud Platform นั้นจะมี Free credit ให้ใช้ในปีแรก $300 ซึ่งเป็นคนละส่วนกับค่าสิทธิ์การใช้ Free-tier ซึ่งค่าใช้จ่ายในส่วนของ Free-tier นี้มักจะไม่รวมค่าบริการของ Network Usage (การมีข้อมูลวิ่งออกจาก Data center มีค่าบริการ เหมือนกับ Co-location ตามปรกติ) ทำให้ในปีแรกผมไม่เสียค่าบริการซักบาทเลย หลังจากหมดปีแรก ค่าใช้จ่ายรายเดือนที่ผมจ่ายส่วนใหญ่จะตกอยู่เดือนละไม่ถึง 1 บาท 2-3 บาท มีมาแพงสุดก็ 8 บาท ซึ่งค่าใช้จ่ายส่วนใหญ่จะหนักไปทางค่า Network Usage เท่านั้น

แต่ก็พบว่าวันหนึ่งในช่วงประมาณกลางปีที่สอง ผมพบปัญหาว่าเว็บมันล่มอย่างไม่ทราบสาเหตุและไม่สามารถ ssh เข้าไปจัดการได้ ซึ่งผมเดาอาการว่าเกิดจากหน่วยความจำเต็ม แต่พอไปดูกราฟแสดงข้อมูลการใช้ CPI ใน Console ของ GCE กลับพบแค่ว่าค่าการใช้งาน CPU จะมีเด้งขึ้นแล้วลดลงมาอยู่ที่ระดับคงที่ แต่ก็ถือว่าสูงกว่าช่วงก่อนการเด้งนั้น จึงคิดว่า VM ใน Free-tier นี้น่าจะถึงขีดจำกัดของมันแล้ว จึงได้ทำการ Upgrade สเปคเครื่องจาก F1-micro เป็น G1-small แทน ซึ่งได้หน่วยความจำมา 1.5 GB กับค่าใช้จ่ายตกราววันละ 19 บาท (ใช้ไปเกินครึ่งเดือนจะได้ส่วนลดเหลือวันละ 15 บาทและ 11 บาทตามลำดับ) แต่ก็เหมือนจะโชคดีที่ว่าเมื่อ 1 สิงหาคมที่ผ่านมานี้ทาง Google ประกาศว่าได้เปลี่ยนสเปคของ VM ใน Free-tier ใหม่ โดยให้ใช้ E2-micro ทดแทน F1-micro ทำให้เมื่อพิจารณาสิ่งได้พบว่า E2-micro ที่มาพร้อมกับหน่วยความจำ 1 GB นี้ก็ยังเพียงพอกับการใช้งานของผม ทำให้ผมตัดสินใจ Downgrade สเปคเครื่อง มาเป็น E2-micro แทน ซึ่งค่าใช้จ่ายจะตกอยู่ที่วันละ 6 บาทกว่า ๆ แต่พอเป็น Free-tier จึงทำให้ไม่เสียค่าใช้จ่ายใด ๆ เลย

เทียบกับค่าใช้จ่ายกับผู้ให้บริการรายเดิม (ไม่นับค่า Domain name) หากยังเป็นอัตรานี้จะถือว่าถูกกว่าเกินครึ่งเลย เทียบกับความยืดหยุ่นในการจัดการที่มากขึ้น (อาจจะไม่ใช่ข้อดีก็ได้?) ซึ่งมากกว่าแค่การอัพโหลดไฟล์

หากผู้อ่านคิดว่ามีความสามารถมากพอในการดูแลรักษาระบบปฏิบัติการกลุ่ม Linux แล้ว การมาใช้บริการนี้น่าจะเป็นอีกทางเลือกหนึ่งที่น่าสนใจในแง่ค่าใช้จ่ายและความยืดหยุ่นที่จะได้มา

Tags