Host static web เว็บที่ไหนดี ?

ถ้าเราทำ static web, single page application (SPA) มา เราจะเอาไป host ท่ีไหนดี ?


1. Firebase Hosting

Firebase Hosting เป็น host ที่คิดถึงอันดับแรก ๆ นอกจากจะใช้ง่ายมาก ๆ แล้ว ยังเร็วด้วย เพราะ data ของเราจะถูก cache ไว้บน CDN ทั่วโลก
แต่ข้อเสียก็คือ Firebase 1 Project สามารถ host ได้แค่เว็บเดียวเท่านั้น (ณ เวลาที่เขียนบทความ) ถ้าเราทำมา 100 เว็บ ก็ต้องสร้าง 100 Projects ซึ่ง น่าจะติด limit

แต่จริง ๆ เราสามารถขอ quota เพิ่มได้นะ

ข้อเสียอีกอย่างคือ ถ้าเว็บเรา b/w น้อยก็โอเคใช้ฟรีได้ แต่พอฟรีไม่ไหวเราจะต้องเปิด billing ทุก projects

วิธีการใช้ firebase hosting นี้ง่ายมาก แค่ลง

$ npm install -g firebase-tools
$ firebase login

หลังจากนั้นก็สร้าง directory สำหรับ project แล้วก็แค่

$ firebase init

เราก็สามารถ deploy เว็บของเราผ่าน

$ firebase deploy

ได้ทันที โดยที่ไม่ต้อง config อะไรเลย! และสามารถ Rollback ได้ง่าย ๆ ด้วยคลิ๊กเดียว


2. Github Pages

แน่นอนว่าเราทุกคนใช้ github กันทุกวันอยู่แล้ว github pages จึงใช้ง่ายไม่แพ้ firebase hosting เลย แค่สร้าง repository แล้วเปิด github pages ในหน้า settings ก็จะใช้ได้ทันที

หลังจากที่เปิดแล้ว เราก็จะสามารถเข้าได้ผ่าน https://username.github.io/repo/ และสามารถทำ custom domain ได้

แต่หลังจากทดลองแล้วโหลดภาพ 100+ KB ช้าเหมือนกัน ประมาณ 2s

และเหมือน custom domain จะยังไม่ support HTTPS นะ ต้องทำ Load Balancer / CDN มาคั่นเอง


3. Shared Hosting

วิธีแบบบ้าน ๆ ง่าย ๆ เช่า shared hosting สิ รัน PHP ได้ด้วย แถมมี database MySQL อีก และราคาก็ถูกม๊ากกกกมากกกก ปีละไม่กี่ร้อย แต่อาจจะจำกัด domain ขึ้นกับผู้ให้บริการ


4. AWS S3

S3 นอกจากจะเอาไว้เก็บไฟล์แล้ว ยังสามารถมาทำเป็น Hosting ได้ด้วย โดยการ upload ไฟล์ html ขึ้นไป แล้ว setup ให้เป็น static website hosting เราก็สามารถตั้ง custom domain เข้ามาได้เลย

ข้อเสียคือ วิธีนี้จะไม่ support HTTPS ถ้าเราอยากได้ HTTPS เราต้องใช้ AWS CloudFront หรือ Cloudflare มาทำ Load Balancer / CDN อีกที


5. Google Cloud Storage (GCS)

GCS นั้นเหมือน S3 เลย แต่ดีกว่าตรงที่มี CDN ให้ใช้ได้เลย โดยที่ไม่ต้อง Setup อะไร

ข้อเสียก็เหมือนกันคือ custom domain ไม่ support HTTPS ต้องเอา Load Balancer หรือ CDN มาคั่นอีกทีนึง


6. Kubernetes + GCS/S3

ถ้าใครใช้ Kubernetes อยู่แล้ว เอามาใช้กับ GCS หรือ S3 ก็จะง่ายมาก

แค่สร้าง bucket ใน GCS/S3 แบบวิธีปกติ และสร้าง service ขึ้นมาเป็น external name

apiVersion: v1
kind: Service
metadata:
name: gcs
spec:
type: ExternalName
externalName: c.storage.googleapis.com

แล้วเอาไปใช้กับ ingress ตัวไหนก็ได้ทันที

- host: www.mywebsite.com
http:
paths:
- backend:
serviceName: gcs
servicePort: 80

7. DIY

ถ้าไม่มีตัวเลือกไหนถูกใจก็ทำเองเลย!!!


สรุป

  • ถ้าทำเว็บจำนวนน้อย ๆ คนเข้าน้อย ๆ เฉพาะในประเทศ ใช้ Shared Hosting
  • ถ้าทำเว็บจำนวนน้อย ๆ คนใช้ทั่วโลก ใช้ Firebase Hosting
  • ฟรี!! คนเข้าทั่วโลก ไม่สน HTTPS และ performance ใช้ Github Pages
  • ทำเว็บจำนวนเยอะ ๆ ไม่สน HTTPS คนเข้าใน region เดียว ใช้ S3
  • ทำเว็บจำนวนเยอะ ๆ ไม่สน HTTPS คนเข้าทั่วโลก ใช้ GCS
  • ทำเว็บจำนวนเยอะ ๆ อยากได้ HTTPS และเร็ว ๆ ใช้ [Shared Host, Github Pages, S3, GCS] + Load Balancer / CDN
  • ทำเว็บจำนวนเยอะ ๆ และ custom ได้ทุกอย่าง เช่น HTTPS, Headers, Rate Limit, Whitelist, Authentication ให้ใช้กับ Reverse Proxy ที่ config เองได้ เช่น nginx หรือ Kubneretes + GCS/S3
Like what you read? Give acoshift a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.