Nginx + Lua with Alpine Linux
最近在升級公司服務,在原有的環境是使用 Ubuntu
+ Nginx Extras
,但為了最小化容器尺寸所以使用了 Alpine Linux
,原本想說能順利轉換,但事情絕對不會是憨人想得這麼簡單。
雖然 Alpine
的 Nginx
有把 Lua Module
編進去,但是 Nginx
在運行時會缺少新版的 Openresty LuaJIT
核心導致無法運行,且在套件庫中的 LuaJIT
只有舊版,原本嘗試自行編譯但遇到了一些問題繞了些路,最終解決方法卻異常簡單。
Code
Dockerfile
解決 Openresty LuaJIT
核心的問題,原本也是要連同 Nignx
一起自行編譯的。
最後直接使用 Openresty
官方的 Alpine Linux
然後再把 Nginx
跟 Lua Module
直接安裝進去就完成了。
FROM openresty/openresty:alpine
RUN apk --update add \
nginx \
nginx-mod-http-lua \
nginx-mod-http-lua-upstream
...
Nginx Config
接著在 Nginx
的設定檔中加入最重要的一段設定載入動態套件庫以及 Lua Lib
的路徑到 OpenResty
。
user nginx nginx;
include /etc/nginx/modules/*.conf;
...
http {
lua_package_path "/usr/local/openresty/lualib/?.lua;;";
lua_package_cpath "/usr/local/openresty/lualib/?.so;;";
...
}
Done
這樣 Alpine Linux
的 Nginx
就可以支援 Lua
,而不用回頭用 Ubuntu
的解決方案了。