Back to Home
Tutorial • อ่าน 5 นาที

Static Web Deployment:
Netlify & CI/CD Workflow

Deploy Static Web Guide

จำได้ไหมครับสมัยที่เรายังต้องเปิดโปรแกรม FileZilla หรือ WinSCP แล้วลากไฟล์ขึ้น Server ทีละรูป ทีละหน้า HTML... ผมขอสารภาพเลยว่าเคยกดลากผิดโฟลเดอร์จนหน้าเว็บ Production พังยับมานักต่อนัก พอมาถึงยุค Modern Web Development การ Deploy เว็บด้วย FTP คู่โบราณแบบนั้นกลายเป็นเรื่องล้าสมัยและเสี่ยงชะมัดยาด (Human Error ล้วนๆ)

ลองจินตนาการว่าคุณมีทีม Dev หลายคน ทุกคนโหลดไฟล์ขึ้น FTP พร้อมกัน ไฟล์ทับกันมั่วซั่ว กว่าจะหาต้นตอเจอก็ร้องกันระงม ทุกวันนี้ผมเลยเปลี่ยนมาใช้ Automated CI/CD Pipeline (Continuous Integration / Continuous Deployment) ร่วมกับ Static Hosting Platform อย่าง Netlify ชีวิตทุกคนเปลี่ยนไปเลยครับ วันนี้ผมเลยอยากมาแชร์ Workflow ตั้งแต่ต้นน้ำยันปลายน้ำ ที่ทีมเราใช้งานกันจริงๆ เผื่อใครยังงมหอยกับหน้าต่าง FTP จะได้ก้าวข้ามมาสู่โลกของ Jamstack กันสักที

ทำไมผมถึงยอมทิ้งหน้าต่าง FTP แล้วมาซบ Automation?

ก่อนจะไปถึงวิธีทำ ขอเล่าความประทับใจส่วนตัวก่อน ลองนึกภาพว่าคุณแก้บั๊กหน้าเว็บเสร็จปุ๊บ แค่พิมพ์ git push ลง Command Line เบาๆ แล้วเดินไปชงกาแฟ พอกลับมาเว็บอัปเดตเสร็จสรรพเรียบร้อย ทั่วโลกเห็นของใหม่พร้อมกัน... นี่แหละครับเวทมนตร์ของมัน

เตรียมอุปกรณ์เครื่องมือให้พร้อม (Prerequisites)

ในบทความนี้เราจะใช้ Stack พื้นฐานที่ทุกคนน่าจะมีติดตัวอยู่แล้ว:

Step 1: ตั้งกฏเหล็กกำกับบอทด้วย Code (netlify.toml)

หลายคนชอบไปจิ้มๆ ตั้งค่าผ่านหน้าเว็บ UI ซึ่งก็ไม่ได้ผิดอะไรครับ แต่ผมแนะนำว่าในฐานะ Developer พันธุ์แท้ เราควรสร้างไฟล์ netlify.toml แปะไว้ในโฟลเดอร์ Root นอกสุดของโปรเจกต์เลยดีกว่า สิ่งนี้วงการเราเรียกว่าแนวทาง "Configuration as Code" มันเหมือนการสั่งสอนบอทของคลาวด์ให้รู้ว่าต้องทำงานยังไง แถมทุกการตั้งค่าจะเก็บเข้า Git รูดทีเดียวจบ ย้ายไปรันที่คอมพ์เครื่องไหนก็ไม่ต้องเสียเวลาตั้งค่าใหม่

[build] publish = "dist" # กรุณาเอาโฟลเดอร์ฝั่งนี้ไปโชว์ขึ้นหน้าเว็บ command = "npm run build" # คำสั่งพับเพียบประกอบร่าง ถ้าเป็น HTML ปกติไม่ใช้ npm ก็ไม่ต้องใส่ [context.production] environment = { NODE_ENV = "production", API_ENDPOINT = "https://api.myapp.com" } # แถมนิดนึง: เซ็ต Security Headers กันเหนียวจากการโดนเจาะ [[headers]] for = "/*" [headers.values] X-Frame-Options = "DENY" # ป้องกันการโดนครอบเว็บ (Clickjacking) วายร้าย X-XSS-Protection = "1; mode=block" # ป้องกันโค้ด XSS ทั่วไป Strict-Transport-Security = "max-age=31536000; includeSubDomains" # บังคับใช้หน้าเว็บเป็น HTTPS แบบเข้มงวดสุดๆ

Step 2: ผูกวิญญาณโปรเจกต์กับ Git (มันง่ายกว่าที่จินตนาการไว้เยอะ)

1. เข้าเว็บไซต์ Netlify ลงทะเบียนและล็อกอินให้เรียบร้อย (กดปุ่มเข้าสู่ระบบด้วยบัญชี GitHub ไปเลยก็เป็นทางลัดที่สะดวกที่สุดครับ) จากนั้นมองหาแล้วกดปุ่ม "Add new site" ตามด้วย "Import an existing project"

2. หน้าต่างถัดไป ระบบจะถามหา Source Provider ให้เราเลือก GitHub (หรือค่ายที่คุณใช้) แล้วจิ้มเลือก Repository ชื่อโปรเจกต์ของเรา (อาจจะต้องกดยอมรับสิทธิ์ครั้งแรกให้มันเข้าถึงไฟล์)

3. ความฉลาดของแพลตฟอร์มแบบนี้คือ พอมันกวาดสายตาเห็นไฟล์ netlify.toml ปุ๊บ หรือเห็นโครงสร้างก้อนโตๆ ว่าเป็น React/Vue ปุ๊บ มันจะรู้หน้าที่และตั้งค่า Build Command และ Publish directory ให้เองสรรพเสร็จ เรามีหน้าที่แค่ตรวจทานความถูกต้องนิดหน่อย แล้วกรีดกรายกดปุ่ม Deploy site จากนั้นก็นั่งรอหน้าจอมันเสกเวทมนตร์ขึ้นฟ้า

Step 3: ผูก Domain สวยๆ กับรับใบเซอร์ SSL (HTTPS) ฟรีๆ ตลอดชีพ

สิ่งหนึ่งที่ผมเกลียดที่สุดในสมัยก่อนคือการไปนั่งกดปุ่มต่ออายุ SSL Certificate ทุกๆ 3 เดือน หรือต้องไปนั่งโหลดไฟล์ .cert กับ .key มาติดตั้งไว้ใน Server ด้วยตัวเอง ใครทำไฟล์หายก็เตรียมหัวหมุนได้เลย แถมบางโฮสต์ก็คิดเงินค่าใบรับรองซะแพงหูฉี่

แต่ Netlify เค้าใจป้ำแจก SSL Certificate (จากองค์กร Let's Encrypt) ให้โปรเจกต์เราแบบ 100% ฟรีอัตโนมัติเลยครับ ต่ออายุให้อัตโนมัติด้วยคุณไม่ต้องแตะอะไรเลย ส่วนเรื่องตั้งค่าโดเมนเนมหลัก (เช่น www.miwnixtech.com) ก็แค่ไปเพิ่ม DNS Record ในผู้ให้บริการโดเมน (ขอแนะนำว่าถ้าใช้ร่วมกับ Cloudflare ยิ่งแจ่มเลยครับ):

รอ DNS ทั่วโลกอัปเดตแพร๊บเดียว (เดี๋ยวนี้เร็วระดับไม่ติดจรวด บางที 5 นาทีก็ใช้งานได้แล้ว) ตัวเว็บไซต์ก็จะผงาดขึ้นโลกออนไลน์ พร้อมแจกพาสปอตกุญแจเขียว HTTPS สวยงามสง่า

ก้าวถัดไป: ลองทำ A/B Testing มั๊ย? (Split Testing สำหรับสายการตลาด)

ฟีเจอร์ทีเด็ดของคนใช้ระบบจัดการ CI/CD แบบเก่งๆ บน Netlify คือความสามารถในการทำ Split Testing (มักเรียกในการตลาดออนไลน์ว่า A/B Testing) สมมติคุณทำแบนเนอร์ปุ่มสีแดง (ใน Branch A) และแบนเนอร์ปุ่มสีเขียว (ใน Branch B) แล้วอยากรู้ว่าชาวเน็ตชอบแบบไหนคลิกเยอะกว้ากัน คุณสามารถสั่งแบ่ง Traffic คนกระโดดเข้าเว็บ 50/50 ไปยังแต่ละหน้า เพื่อดูได้เลยจากตัวเลขสถิติว่าปุ่มสีไหนเวิร์คกว่ากัน โดยที่ไม่ต้องปวดหัวหรือเสียบงบจ้างบริษัทเขียนสคริปต์ทำ A/B Test ซึ่งมีความซับซ้อนยุ่งยาก... นี่แหละครับความล้ำวิวัฒนาการของเทคโนโลยีที่ทำมาเสิร์ฟบนคลาวด์

บทสรุป: ความสบายที่ไม่อยากตีตั๋วกลับไปลำบาก

เอาตรงๆ จากใจเลยนะครับ หลังจากที่ผมจับ Workflow แนวๆ Git-Ops บนคลาวด์ตัวนี้ ผมก็ตัดสินใจลบโปรแกรม FTP Client คู่บุญออกจากเครื่องเดสก์ท็อปไปเลยโดยไม่ลังเลแม้แต่นาทีเดียว!

การทำ CI/CD ด้วยแพลตฟอร์มเหล่านี้ มันไม่ใช่แค่ประหยัดเวลาอย่างเดียว แต่มันคือ "การสร้างกำแพงอุดรอยรั่วเรื่องความมักง่ายของนักพัฒนาด้วยระบบลอตเตอรี่อัตโนมัติ" ส่งผลให้ตัวเว็บที่ออกสู่สายตาชาวบ้านมันเสถียรสุดๆ (High Reliability)

ถ้าใครที่ทนอ่านมาถึงตรงนี้แล้ว ยังเป็นหนึ่งคนในสายการทำงานที่เปิดโฟลเดอร์คลิกลากไฟล์โยนขึ้นเซิฟเวอร์เว็บอยู่... จงลุกขึ้นเดี๋ยวนี้เถอะครับ ลองเปิดโหมด Automation ให้เข้าใกล้มาตรฐานโลกดูซักตั้ง แล้วจะรู้จริงๆ ว่าสวรรค์มีอยู่จริง เวลานอนที่เคยหายไปจากการที่ต้องลุกมาแก้โค้ดล่มตอนเที่ยงคืน จะกลับมาอีกเป็นกองพะเนินเลยละครับ!