เบื้องหลัง Behappynerd.com : ก่อร่างสร้างบล็อก

Image source: https://pixabay.com/en/template-layout-website-blog-theme-1599663/

การสร้างเว็บใหม่อย่างน้อยหนึ่งเว็บ  เป็นหนึ่งในเป้าหมายที่เราตั้งไว้ในปีนี้  และแม้ว่าเราจะบรรลุเป้าหมายด้วยการสร้าง www.vdo2gif.com แล้วก็ตาม  เราก็ยังอยากทำอะไรต่อยอดออกไปอีก  และรู้สึกว่าเราอยากจะมีบล็อกเป็นของตัวเองที่ไว้บันทึกเรื่องราวต่างๆในชีวิต  ทำให้บล็อก behappynerd.com ได้ถือกำเนิดขึ้นมา


เลือกเทคโนโลยี


เทคโนโลยีที่เป็นตัวเลือกในการสร้างบล็อกที่เป็นที่นิยมในปัจจุบันก็มีอยู่หลายทางเลือกด้วยกัน

  1. ใช้ CMS สำเร็จรูปที่มีอยู่แล้วในตลาด เช่น Wordpress Joomla Drupal ฯลฯ
  2. ใช้ Blogging platform เช่น Blogger.com medium.com wix.com ฯลฯ
  3. จ้างคนอื่นทำ
  4. สร้างระบบขึ้นมาเอง


สำหรับเราทางเลือกที่ 2) และ 3) นั้นเราตัดทิ้งไปก่อนเลย  เพราะเป็นตัวเลือกน่าที่จะให้ประสบการณ์กับเราน้อยเกินไป  เราจึงตัดสินใจลองเลือกทางที่ 1)  โดยแรกเริ่มนั้นเราเลือกที่จะศึกษา CMS อยู่ 2 ตัวด้วยกัน คือ  Wordpress และ OctoberCMS โดยต้องการนำมาเปรียบเทียบกันว่าอันไหนเหมาะกับเราที่สุดในแง่ของการใช้งานและการปรับแต่งต่างๆเพื่อให้ final product ออกมาใกล้เคียงกับบล็อกที่เราคิดไว้ในใจ   ผลคือเราค่อนข้างประทับใจกับ OctoberCMS มากกว่า  เพราะ 1) มันถูกเขียนขึ้นด้วย Laravel ซึ่งเป็นเฟรมเวิร์คที่เราคุ้นเคยอยู่แล้ว ทำให้มันยืดหยุ่นกว่าในแง่ของการพัฒนานอกเหนือไปจากระบบพื้นฐาน  2) Performance มันน่าประทับใจมาก  และด้วยความที่มันเป็น Laravel ทำให้มันการันตีได้ว่าสามารถทำงานร่วมกับ HHVM หรือ PHP7 ได้เลย


หลังจากตัดสินใจเลือกแล้ว เราใช้เวลาอยู่ 1-2 สัปดาห์ช่วงกลางคืนและวันหยุดในการเริ่มสร้างบล็อกนี้ด้วย OctoberCMS  ได้พบปัญหาหลายๆอย่างในตัว OctoberCMS  เช่น  plugin หลายๆตัวนั้นมีบั้กและการซัพพอร์ทก็ยังไม่ดีเท่าที่ควร   ชุมชนคนใช้งานมีไม่เยอะเท่า CMS ดังๆ  โครงสร้างของ file และ directory ใน OctoberCMS ได้ถูกปรับแต่งให้แตกต่างออกจาก  Laravel ไปพอสมควรทำให้บาง Package ที่เคยใช้ได้ใน Laravel อาจจะใช้ได้ไม่เต็มที่ใน  OctoberCMS


แม้ว่าเราจะเริ่มทำบล็อกจนออกมาเป็นรูปเป็นร่างแล้ว  แต่ด้วยปัญหาจุกจิกที่ได้กล่าวมา  เรารู้สึกว่าเราไม่สามารถ take control ระบบบล็อกของเราได้เต็มที่ ในที่สุดเราก็ตัดสินใจรื้อทั้งหมดทิ้งไป (ก็ไม่เชิงว่าทั้งหมด  ส่วนของ frontend หลายๆส่วนเราก็เก็บไว้)  และเริ่มเขียนบล็อกใหม่โดยไม่ใช้งาน CMS ใดๆเลย


ระบบหลังบ้าน


หลังจากที่ได้เลือกแล้วว่าตนเป็นที่พึ่งแห่งตนในการพัฒนาระบบบล็อกขึ้นมาใช้เอง  ขั้นตอนไปก็คือการเลือกเทคโนโลยีฝั่งเซิร์ฟเวอร์ที่จะใช้  ซึ่งสำหรับเรานั้นไม่ยากเลยเพราะช่วงหลังก็ใช้แค่  ASP.NET C# และ PHP เท่านั้นในการทำงาน  จริงๆก็อยากลองใช้เทคโนโลยีอื่นเพื่อจะได้เรียนรู้อะไรใหม่ๆบ้าง อย่างเช่น NodeJS  แต่พิจารณาดูแลัวกลัวว่าจะเสร็จไม่ทันสิ้นปีตามเป้าที่ตั้งไว้   งานนี้เลยจิ้มที่ PHP เพราะระบบที่เราต้องการมันไม่มีอะไรซับซ้อนมาก  บวกกับพลังของเฟรมเวิร์คอย่าง Laravel  ยิ่งทำให้ลดเวลาลดขั้นตอนของงานที่ยุ่งยากลงไปได้เยอะ


ส่วนของฐานข้อมูลเราใช้ NoSQL อย่าง MongoDB เพราะใช้ในงานประจำมาหลายโปรเจ็คแล้ว   การที่มันเป็น NoSQL ทำให้งานของเราที่ทำคนเดียวง่ายขึ้นเยอะมาก  และคิดเผื่อในอนาคตหากเว็บดังขึ้นมา (สาธุ)  การขยับขยายแบบ Horizontal Scale ก็ไม่ยุ่งยาก


ในการสร้างส่วนการจัดการคอนเทนต์หลังบ้านนั้นเราใช้ธีมของ Bootstrap ที่ชื่อ INSPANIA เป็นตัวตั้งต้น (ไม่ฟรีนะ)  และใช้ Angular v.1 เป็นเฟรมเวิร์คในการจัดการกับ frontend และไฟล์รูปภาพทั้งหมดที่ใช้ในโพสต์ต่างๆของบล็อกนี้ก็จะถูกอัพโหลดไปเก็บไว้ใน GridFS ของ MongoDB เผื่อวันไหนต้องมีการย้ายฐานข้อมูล  เราสามารถก็แบ็คอัพทั้งฐานข้อมูลเพื่อให้ได้ข้อมูลของทุกโพสต์ไปพร้อมกับรูปภาพในทีเดียวเลย   และในส่วนของโค้ดต่างๆก็เก็บไว้ใน Github โดยตั้งค่าเป็น private repository ไว้   ใจจริงก็อยากแบ่งให้คนอื่นได้ใช้ด้วยแหละ  แต่ด้วยความที่ธีมที่เราใช้นั้นมันจำกัด license เลยทำให้ไม่สามารถแจกจ่ายได้ฟรี  ในอนาคตหากมีวันที่เราปรับไปใช้ธีมที่สามารถแจกจ่ายได้  เราคงจะเปิดเป็น public repository เผื่อให้คนที่สนใจมาร่วมด้วยช่วยกันพัฒนา


หน้าบ้าน


ฝั่งหน้าบ้านคือฝั่งที่คุณๆ เห็นกันอยู่นี่ ก็ยังคงเป็น PHP+Laravel+Mongo เหมือนหลังบ้าน ในส่วนของธีมที่ใช้ก็ยังเป็น Bootstrap ที่ชื่อ Reader (ไม่ฟรีอีกเช่นกัน)  แต่ว่าเราไม่ได้ใช้ Angular ทำงานกับ frontend เราเลือกใช้แค่ jQuery เพราะต้องการให้โค้ดเบาที่สุดเท่าที่จะทำได้  เพราะความเร็วของการตอบสนองของระบบถือเป็นโจทย์อย่างหนึ่ง ไม่เพียงเพื่อให้เป็น  SEO friendly เท่านั้น  แต่เราอยากให้คนอ่านไม่รู้สึกว่าเว็บเราทำงานช้าเกินไป

ในส่วนของการค้นหาภายในเว็บเราก็เลือกใช้ฟีเจอร์ของ Laravel ที่ชื่อ Scout ซึ่งทำงานร่วมกับ Algolia ซึ่งเป็น Service Provider ในสร้างระบบ Full Text Search บน cloud ที่ช่วยลดภาระเซิร์ฟเวอร์เราไปได้มาก


เทคโนโลยีอื่นๆและตัวช่วย


ในส่วนของโฮสติ้งนั้น หลังจากที่เราได้ลองใช้ Cloud VPS ที่คนนิยมกัน ได้แก่ MSAzure  AWS DigitalOcean และ Linode   เราก็มาลงตัวที่ Linode ด้วยราคาและ Performance ที่เป็นที่น่าพอใจของเรามากกว่าเจ้าอื่น


ระบบปฏิบัติการที่ใช้คือ Ubuntu  เราใช้วิธีการติดตั้งทุกอย่างด้วยตัวเองทั้งหมด  รวมถึงการคอนฟิกและจูนเพื่อให้เว็บทำงานได้เร็วที่สุดในงบประมาณที่มี  ก่อนจะมาเป็นเซิร์ฟเวอร์ของระบบที่เห็นนี่ผ่านการลองผิดลองถูกติดตั้งใหม่มาหลายรอบอยู่เหมือนกัน   จนได้ระบบที่เราค่อนข้างพอใจ  จนวันหนึ่งได้อ่านบล็อก รู้จักกับ Cloudflare พร้อมวิธีติดตั้ง HTTPS ให้กับเว็บแบบฟรี ๆ ไม่มีค่าใช้จ่าย ของ NuuNeoi  เราเลยเริ่มมาใช้ Cloudflare ในการช่วยรับโหลดของเซิร์ฟเวอร์ของเรา  ซึ่งก็ให้ผลลัพธ์ที่น่าพอใจมากทีเดียว


จะเห็นได้ว่าถึงเราจะเริ่มต้นทำบล็อกนี้ขึ้นมาคนเดียว  แต่งานหลายๆอย่างที่เราไม่ถนัด เช่น งานออกแบบหน้าตาเว็บ  เราจะก็เลือกที่จะจ่ายเงินเพื่อประหยัดเวลาในการพัฒนาระบบ  เงินที่จ่ายไปในการซื้อธีมนี่ถูกกว่าข้าวหนึ่งมื้อของบางคนเสียอีกนะ  และงานหลายๆอย่างก็มี Free Plan Service ให้เว็บเล็กๆได้ใช้งาน เช่น Algolia และ Cloudflare ที่ช่วยแบ่งเบาภาระบางส่วนออกไป  เพื่อให้เราได้โฟกัสกับเนื้อหาและผู้ใช้งานได้เต็มที่มากขึ้น


ทั้งหมดนี่เป็นเบื้องหลังคร่าวๆของการสร้างบล็อกนี้ขึ้นมา  ยังมีรายละเอียดเล็กน้อยๆที่เราอาจจะยังไม่ได้กล่าวถึง  ซึ่งในอนาคตอาจจะเขียนบล็อกเจาะรายละเอียดไปเลยเช่น Laravel Forge ที่หลังๆ เราเริ่มมาใช้เป็นตัวช่วยในการจัดการกับเซิร์ฟเวอร์  การใช้ Redis จัดการ Cache และจัดการ Queuing System ด้วย Laravel  ฯลฯ

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

Oadtz (https://www.oadtz.com)

A Software Engineer and Photographer