ไปอ่าน Slide เรื่อง Scripting Nginx with Lua Introducing OpenRestly
พบว่าน่าสนใจมาก ๆ แต่ไม่รู้เรื่องอะไรเลย
ก็เลยลองหัดทำดูบ้าง โดยสิ่งที่อยากจะเรียนรู้ประกอบไปด้วย
- OpenResty ต้องติดตั้งอะไรและ config อะไรให้ทำงานได้บ้าง
- ลองเขียนภาษา Lua ดูนิดหน่อย
- เชื่อมต่อกับ Redis ที่เป็น Key-value database เพราะว่าใช้งานอยู่แล้ว
- ลองทำการทดสอบสิ่งที่พัฒนาขึ้นมา
เริ่มต้นในการติดตั้ง เอาง่าย ๆ ก็ใช้ Docker Image ของ OpenResty เลย
โดยใน official image สามารถเขียนภาษา Lua ได้เลย
รวมทั้งมี luarocks สำหรับติดตั้ง module/package ต่าง ๆ เพิ่มเติมได้เลย
ดังนั้นชีวิตง่ายละ
จากนั้นทำการเขียน Hello World ด้วยภาษา Lua
โดยเริ่มง่าย ๆ ด้วยการสร้าง location ในไฟล์ nginx.conf
เพื่อให้รับ request ที่มี query string ชื่อว่า name
แต่ถ้าไม่ส่งมาจะมีค่า default คือ Somkiat.cc
เขียนง่าย ๆ ได้ดังนี้
จากนั้นก็เขียน Dockerfile เพื่อนำไฟล์ nginx.conf เข้าไปใช้งาน
[gist id="84a43f24cb3558244afe33cd1940878e" file="Dockerfile"]ทำการ build Docker image และ run เป็นอันเสร็จพิธี
ใช้งานได้เลย แถม performance ก็ดีเลย
เขียนง่าย เริ่มง่าย ที่เหลือไปเรียนรู้ภาษา Lua ต่อ
ไปหาดูเอกสารว่า Lua + Nginx มันทำงานอย่างไร
ก็ได้รูปนี้มา
ต่อมาทำการเชื่อมต่อไปยัง Redis ซึ่งเป็น Key-value database
โดยที่ OpenResty ก็มี package lua-resty-redis ให้ใช้งาน
ซึ่งทำการติดตั้งผ่าน luarocks ได้เลย
ดังนั้นก็ไปเพิ่มใน Dockerfile จากขั้นตอนแรกดังนี้
จากนั้นก็เขียนในไฟล์ nginx.conf เพื่อเพิ่ม location ใหม่
สำหรับทำงานร่วมกับ Redis ไปดูในเอกสารก็ copy มาเลย
ทำการเชื่อมต่อไปยัง Redis server
ซึ่งผมสร้างเป็นอีก container หนึ่ง
ทำการรับ key และ value มา เพื่อจัดเก็บใน Redis แบบง่าย ๆ
จากการทดสอบแล้วนั้น performance ตกลงไป แต่ไม่มากนัก
ดีมาก ๆ แต่ไว้ต้อง tuning อีกรอบ
แต่คิดว่า มันเขียนง่ายดีนะ
จะให้ดีต้องแยก code ออกมาในไฟล์นามสกุล lua จะจัดการง่ายขึ้น
ถือว่าเป็นก้าวแรกที่น่าสนใจมาก ๆ มันจบทุกอย่างในตัวเองเลย
น่าลองเอาไปใช้งานจริง ๆ วะแล้ว