ช่วงสัปดาห์ที่ผ่านมามีการพูดถึง NGINX Unit เยอะพอควร
ดังนั้นเลยลองศึกษาแบบผิว ๆ หน่อยสิว่า
มันคืออะไร
ทำงานอย่างไร
ใช้งานอย่างไร
น่าจะมีประโยชน์ต่อการพัฒนาและ deploy ระบบงานต่อไป
ปล. จะเรียก NGINX Unit ว่า Unit
NGINX Unit คืออะไร ?
จากเอกสารอธิบายว่า- Lightweight application server
- Dynamic web application server
- ออกแบบมาเพื่อให้ง่ายต่อการ run หลาย ๆ ภาษาโปรแกรมได้ หลาย ๆ version ได้บนเครื่อง หรือ server เดียวกัน
- ตอนนี้สนับสนุน PHP, Python และ Go ก่อน ส่วน Java, JavaScript และ Ruby ก็รอนิดนึง
สิ่งที่น่าสนใจมาก ๆ คือ สามารถทำการ configuration หรือ ปรับแต่งค่าต่าง ๆ ของระบบ
ผ่าน REST API (JSON) ที่กำหนดไว้ ดังนั้นจึงง่ายต่อทีมพัฒนาและ operation ไม่ต้องมานั่ง config บน server เอง อยากเปลี่ยนก็ทำผ่าน REST API ไปเลยเช่น- จำนวน worker ของ NGINX
- Path ของระบบหรือ service ต่าง ๆ
- Port หรือ Listener ของแต่ละ server ว่าจะเปิดให้เข้าถึงผ่าน port อะไร
อ่านไปก็งง มาลองใช้งานกันดูดีกว่า
จากเอกสารการติดตั้งดูแล้วเหนื่อย ดังนั้นเพื่อความง่ายเลยใช้ Docker ดีกว่า หลังจากนั้นค่อยมาสร้าง Image ไว้ใช้งานกัน !! มาเริ่มกันเลย สร้าง container ด้วย Ubuntu image มีคำสั่งดังนี้ [gist id="1cc7d811329f86cb642ca4f5311c3486" file="install.txt"] คำอธิบาย ติดตั้ง curl กับ vim ไว้ทดสอบกับแก้ไข config ทำการติดตั้ง NGINX Unit ตามเอกสารเลย เมื่อการติดตั้งเรียบร้อย ทำการตรวจสอบ service นิดหน่อยด้วยคำสั่ง [code] $service unitd status * unitd is running [/code]โดยค่า default แล้วนั้น Unit API จะอยู่ในไฟล์ control.unit.sock
สามารถเรียกใช้งานและส่ง configuration ในรูปแบบ JSON เข้าไปได้ ซึ่งจะประกอบไปด้วย- Applications ทำการกำหนดแต่ละ application ใน Unit ว่าเป็นอย่างเช่น ภาษาโปรแกรม จำนวน worker process ที่ทำงาน Path หรือ directory ของ application และ ไฟล์ index และอื่น ๆ ตามภาษาโปรแกรม
- Listeners สำหรับ application ที่ให้เข้าถึงผ่าน HTTP (ส่วน HTTPS ยังไม่สนับสนุนนะ) จะต้องกำหนด listenter ให้เสมอ หรือเปิด port นั่นเอง เพื่อให้ผู้ใช้งานเรียกใช้งานได้
เพื่อความเข้าใจมาลองใช้งานกันดีกว่า
เริ่มจากการดูว่าตอนนี้มี applicaition และ listener มีอะไรบ้าง ? แน่นอนว่าต้องไม่มีอะไรเลยดังนี้ [gist id="1cc7d811329f86cb642ca4f5311c3486" file="check.txt"]ดังนั้นเรามาสร้าง application แรกดีกว่า (Hello World)
ซึ่งความต้องการเป็นดังนี้- พัฒนาด้วยภาษา PHP
- ทำการ run ด้วย port 8100
- Path ของระบบอยู่ที่ /www/hello
- ไฟล์ index ชื่อว่า index.php
เมื่อ PHP ผ่านไป ก็มาถึง Python และ Go กันบ้างสิ
มาดูว่า NGINX Unit มันสนับสนุนจริงไหม ? มาดูกันนิดหน่อย สามารถแก้ไข configuration นิดหน่อยดังนี้- Python จะมี path และ module ที่จะใช้ run ซึ่งใช้ wsgi
- Go จะมี executable สำหรับ binary ของระบบ โดยต้องติดตั้ง go ด้วยนะ เพราะว่าในการพัฒนาต้องใช้ library ข อง Unit ด้วย
ปล. ทั้ง PHP และ Python นั้นผมยังไม่ได้ติดตั้งอะไรนอกจาก NGINX Unit นะ