ScarShow

< IS >

Nginx + Lua with Alpine Linux

最近在升級公司服務,在原有的環境是使用 Ubuntu + Nginx Extras,但為了最小化容器尺寸所以使用了 Alpine Linux,原本想說能順利轉換,但事情絕對不會是憨人想得這麼簡單。

雖然 AlpineNginx 有把 Lua Module 編進去,但是 Nginx 在運行時會缺少新版的 Openresty LuaJIT 核心導致無法運行,且在套件庫中的 LuaJIT 只有舊版,原本嘗試自行編譯但遇到了一些問題繞了些路,最終解決方法卻異常簡單。

Code

Dockerfile

解決 Openresty LuaJIT 核心的問題,原本也是要連同 Nignx 一起自行編譯的。

最後直接使用 Openresty 官方的 Alpine Linux 然後再把 NginxLua 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 LinuxNginx 就可以支援 Lua,而不用回頭用 Ubuntu 的解決方案了。