ScarShow

< IS >

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 的解決方案了。