madoka.whs.in.th v3

หลังจากวางแผนมาเกือบ 10 เดือน และในโอกาส madoka.whs.in.th ครบรอบ 5 ปี ขอต้อนรับสู่ madoka.whs.in.th รุ่นที่ 3 ครับ

รุ่นนี้มีอะไร

Docker


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

จนกระทั่งมี Docker เข้ามานี่แหละครับ ก็น่าจะเข้ามาแก้ไขปัญหานี้ได้หมดจดสักที นอกจากนี้จะช่วยให้การ deploy โปรแกรมทำได้ไวขึ้น อย่าง server ที่เห็นตอนนี้ก็ลงแค่ครึ่งวันเองครับ เพราะโปรแกรมต่างๆ ก็นั่งจับมาทำเป็น Docker container หมดแล้ว

ยกเลิก ispcp

หนแรกก่อนที่ผมจะ plan v3 ผมพยายามอัพ ispcp (อาจจะเคยเห็นถ้าเข้า subdomain มั่วๆ ในเว็บผม) มาใส่ Debian 8 แล้วพบว่ามันพังย่อยยับ ในรุ่นนี้เลยตัดสินใจว่ายกเลิกไปเลยครับ ใช้ Docker อย่างเดียวพอ

เหตุผลอีกอย่างหนึ่งคือแรกๆ ตอนตั้ง server นั้นอยากจะทำ shared hosting ด้วย แต่พอทำไปทำมาแล้วก็พบว่าให้บริการกับเฉพาะลูกค้าที่ผมรับงานทำเว็บให้ก็พอแล้ว และหลังๆ มาผมพบว่าเว็บใหม่ๆ ไม่ว่าจะเป็นที่โหลดมาหรือผมเขียนเองก็ไม่ได้ใช้ PHP สักเท่าไรแล้ว ระบบ shared hosting แบบเดิมมันล้าสมัยไปแล้ว

HTTP/2

ในที่สุดเว็บก็ปรับมาใช้ HTTP/2 จนได้ครับ เนื่องจากว่าเดิมทีเว็บใช้ nginx ตัวเดียว ซึ่งใช้ nginx-push-stream แล้วทำให้ผมอัพเกรด nginx ยากมาก ตอนนี้พอเป็น Docker แล้วก็สามารถแยกอัพเกรดกันได้สะดวก

ที่ยังทำไม่ได้คือ Server Push เพราะ nginx เองยังไม่รองรับครับ ว่าจะลอง h2o อยู่แต่ก็รู้สึกว่า config file มันยุ่งยาก

ออกใบรับรอง Let’s Encrypt อัตโนมัติ

แผนการผมวางไว้ว่า Let’s Encrypt ผมจะแยกจาก container nginx เป็นอีก Docker container นึงไปเลย และจะมีระบบ renew certificate อัตโนมัติ ซึ่งเดิมทีผมใช้ script ไปควบคุม official client และด้วยว่า web server config ผมซับซ้อนมาก ผมเลยต้องอัพเดต certificate เองอยู่เรื่อยๆ

สำหรับลงใหม่รอบนี้ก็แยกลง acme-docker ไว้เลย ก็จะอัพเดต certificate ให้อัตโนมัติ และมีระบบขอ certificate ที่ดูดีกว่าระบบบ้านๆ ที่ผมใช้ ที่เหลือแค่จะต้อง reload nginx เองอยู่เรื่อยๆ

กว่าจะเป็น v3

ก่อนจะมาถึงรุ่นปัจจุบันผมลองเทคโนโลยีมาเยอะมากครับ และวางแผนไว้ใหญ่โตมาก ไม่ว่าจะเป็น

  • Rancher
  • Kubernetes

และพบว่ากับระบบ scale 1 เครื่องแบบนี้ไม่เหมาะเลยครับที่จะใช้พวกนี้ จัดการ container พื้นๆ นี่แหละเวิร์คสุดแล้ว

ประเด็นสำคัญเลยคือผมว่าเทคโนโลยี multi host container orchestration ยังอยู่ในช่วงตั้งไข่พอๆ กับสมัย Docker แรกๆ (ที่ทุกคนเบสอิมเมจจาก ubuntu)

อีกจุดนึงที่อยากทำมากๆ คือ PaaS ซึ่งก็ยังไม่ได้ทำสักที เพราะทีแรกนั้นผมแพลนว่าจะใช้ CoreOS และ PaaS หลายตัวต้องลงใน host ก็เลยข้ามไป

OS ที่เลือกก็เลือกอยู่หลายพักเลยครับ เริ่มจาก CoreOS และลอง CentOS Atomic อยู่นานมาก แต่สุดท้ายก็จบที่ Debian 8 เพราะผมยังรู้สึกว่าระบบนี้คือ testbed ผมที่ผมอยากจะเล่นอะไรหลายอย่างที่ Container OS มันจะไม่อนุญาตให้ทำ

สรุป

ตอนนี้เว็บผมก็ปรับเข้ามาใช้ Docker แล้วครับ ซึ่งก็แก้ปัญหาเรื่อง dependency management ไปได้เป็นอย่างดี และก็ได้โอกาสปัดฝุ่นระบบต่างๆ ที่เดิมมีแต่ไม่ค่อยดีไปด้วย