tengine lua 模块docker 镜像集成


昨天有构建过一个tengine dubbo 模块,以下是关于lua 模块构建的的说明

Dockerfile

FROM alpine:3.8
ENV TENGINE_VERSION 2.3.2
# nginx: https://git.io/vSIyj
RUN rm -rf /var/cache/apk/* && \
   rm -rf /tmp/*
ENV CONFIG "\
       --prefix=/etc/nginx \
       --sbin-path=/usr/sbin/nginx \
       --modules-path=/usr/lib/nginx/modules \
       --conf-path=/etc/nginx/nginx.conf \
       --error-log-path=/var/log/nginx/error.log \
       --http-log-path=/var/log/nginx/access.log \
       --pid-path=/var/run/nginx.pid \
       --lock-path=/var/run/nginx.lock \
       --http-client-body-temp-path=/var/cache/nginx/client_temp \
       --http-proxy-temp-path=/var/cache/nginx/proxy_temp \
       --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
       --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
       --http-scgi-temp-path=/var/cache/nginx/scgi_temp \
       --user=nginx \
       --group=nginx \
       --with-http_ssl_module \
       --with-http_realip_module \
       --with-http_addition_module \
       --with-http_sub_module \
       --with-http_dav_module \
       --with-http_flv_module \
       --with-http_mp4_module \
       --with-http_gunzip_module \
       --with-http_gzip_static_module \
       --with-http_random_index_module \
       --with-http_secure_link_module \
       --with-http_stub_status_module \
       --with-http_auth_request_module \
       --with-http_xslt_module=dynamic \
       --with-http_image_filter_module=dynamic \
       --with-http_geoip_module=dynamic \
       --with-threads \
       --with-stream \
       --with-stream_ssl_module \
       --with-stream_ssl_preread_module \
       --with-stream_realip_module \
       --with-stream_geoip_module=dynamic \
       --with-http_slice_module \
       --with-mail \
       --with-mail_ssl_module \
       --with-compat \
       --with-file-aio \
       --with-http_v2_module \
       --add-module=modules/ngx_http_lua_module \
       --add-module=modules/ngx_http_upstream_check_module \
       --add-module=modules/headers-more-nginx-module-0.33 \
       --add-module=modules/ngx_http_proxy_connect_module \
       --add-module=modules/ngx_http_user_agent_module \
       --add-module=modules/ngx_multi_upstream_module \
       --add-module=modules/ngx_http_upstream_session_sticky_module \
       --add-module=modules/ngx_http_upstream_vnswrr_module \
       --add-module=modules/ngx_http_slice_module \
       --add-module=modules/ngx_http_reqstat_module \
       --add-module=modules/ngx_http_footer_filter_module \
       --add-module=modules/ngx_http_trim_filter_module \
       --add-module=modules/mod_config \
       --add-module=modules/mod_dubbo \
       "
RUN     addgroup -S nginx \
       && adduser -D -S -h /var/cache/nginx -s /sbin/nologin -G nginx nginx \
       && addgroup -g 82 -S www-data && adduser -u 82 -D -S -G www-data www-data \
       && apk update && apk add --no-cache --virtual .build-deps \
               gcc \
               g++ \
               libc-dev \
               make \
               openssl-dev \
               pcre-dev \
               zlib-dev \
               linux-headers \
               curl \
               libxslt-dev \
               gd-dev \
               geoip-dev \
       && curl -L "https://github.com/alibaba/tengine/archive/$TENGINE_VERSION.tar.gz" -o tengine.tar.gz \
       && mkdir -p /usr/src \
       && tar -zxC /usr/src -f tengine.tar.gz \
       && rm tengine.tar.gz \
       && cd /usr/src/tengine-$TENGINE_VERSION \
       && curl -L "https://github.com/openresty/headers-more-nginx-module/archive/v0.33.tar.gz" -o more.tar.gz \
       && curl -L "https://github.com/openresty/luajit2/archive/v2.1-20200102.tar.gz" -o v2.1-20200102.tar.gz \
       && tar -zxC /usr/src/tengine-$TENGINE_VERSION/modules -f more.tar.gz \
       && tar -zxC /usr/src/tengine-$TENGINE_VERSION -f v2.1-20200102.tar.gz \
   && rm more.tar.gz v2.1-20200102.tar.gz\
   && ls -l /usr/src/tengine-$TENGINE_VERSION/modules \
       && cd luajit2-2.1-20200102 && make && make install \
       && export LUAJIT_LIB=/usr/local/lib export LUAJIT_INC=/usr/local/include/luajit-2.1 \
   && cd .. && ./configure $CONFIG --with-debug \
       && make -j$(getconf _NPROCESSORS_ONLN) \
       && mv objs/nginx objs/nginx-debug \
       && mv objs/ngx_http_xslt_filter_module.so objs/ngx_http_xslt_filter_module-debug.so \
       && mv objs/ngx_http_image_filter_module.so objs/ngx_http_image_filter_module-debug.so \
       && mv objs/ngx_http_geoip_module.so objs/ngx_http_geoip_module-debug.so \
       && mv objs/ngx_stream_geoip_module.so objs/ngx_stream_geoip_module-debug.so \
       && ./configure $CONFIG \
       && make -j$(getconf _NPROCESSORS_ONLN) \
       && make install \
       && rm -rf /etc/nginx/html/ \
       && mkdir /etc/nginx/conf.d/ \
       && mkdir -p /usr/share/nginx/html/ \
       && install -m644 html/index.html /usr/share/nginx/html/ \
       && install -m644 html/50x.html /usr/share/nginx/html/ \
       && install -m755 objs/nginx-debug /usr/sbin/nginx-debug \
       && install -m755 objs/ngx_http_xslt_filter_module-debug.so /usr/lib/nginx/modules/ngx_http_xslt_filter_module-debug.so \
       && install -m755 objs/ngx_http_image_filter_module-debug.so /usr/lib/nginx/modules/ngx_http_image_filter_module-debug.so \
       && install -m755 objs/ngx_http_geoip_module-debug.so /usr/lib/nginx/modules/ngx_http_geoip_module-debug.so \
       && install -m755 objs/ngx_stream_geoip_module-debug.so /usr/lib/nginx/modules/ngx_stream_geoip_module-debug.so \
       && ln -s ../../usr/lib/nginx/modules /etc/nginx/modules \
       && strip /usr/sbin/nginx* \
       && strip /usr/lib/nginx/modules/*.so \
       && rm -rf /usr/src/tengine-$NGINX_VERSION \
       \
       # Bring in gettext so we can get `envsubst`, then throw
       # the rest away. To do this, we need to install `gettext`
       # then move `envsubst` out of the way so `gettext` can
       # be deleted completely, then move `envsubst` back.
       && apk add --no-cache --virtual .gettext gettext \
       && mv /usr/bin/envsubst /tmp/ \
       \
       && runDeps="$( \
               scanelf --needed --nobanner --format '%n#p' /usr/sbin/nginx /usr/lib/nginx/modules/*.so /tmp/envsubst \
                       | tr ',' '\n' \
                       | sort -u \
                       | awk 'system("[ -e /usr/local/lib/" $1 " ]") == 0 { next } { print "so:" $1 }' \
       )" \
       && apk add --no-cache --virtual .nginx-rundeps $runDeps \
       && apk del .build-deps \
       && apk del .gettext \
       && mv /tmp/envsubst /usr/local/bin/ \
       \
       # Bring in tzdata so users could set the timezones through the environment
       # variables
       && apk add --no-cache tzdata \
       \
       # forward request and error logs to docker log collector
       && ln -sf /dev/stdout /var/log/nginx/access.log \
       && ln -sf /dev/stderr /var/log/nginx/error.log
EXPOSE 80 443
STOPSIGNAL SIGTERM
CMD ["nginx", "-g", "daemon off;"]

说明

tengine lua 模块与openresty 的还是有点差异的,构建tengine lua 模块主要的核心是luajit,推荐使用openresty 提供的luajit
具体操作就是下载对应版本的包,然后配置环境变量,注意ngx lua 模块应该使用tengine自带的,而不是openresty 独立repo的(理论上
没问题,而且我也测试过没问题,主要是新特性兼容以及openresty 的一些patch 对于tengine可能会有问题)

 
 export LUAJIT_LIB=/usr/local/lib
 export LUAJIT_INC=/usr/local/include/luajit-2.1

相关docker 镜像我已经push 到了dockerhub dalongrong/tengine:2.3.2-dubbo-lua 大家可以试用

参考资料

https://github.com/alibaba/tengine/tree/master/modules/ngx_http_lua_module 
https://github.com/openresty/lua-nginx-module#installation 
https://github.com/openresty/luajit2 
https://github.com/rongfengliang/tengine-dockerfile


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM