Created
February 25, 2017 11:38
-
-
Save sandrokeil/b44e4e67f7dea02e72ea21f0b9f813e3 to your computer and use it in GitHub Desktop.
nginx with lua-resty-auto-ssl - On the fly (and free) SSL registration and renewal inside nginx with Let's Encrypt.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
FROM alpine:3.5 | |
ENV NGINX_VERSION 1.11.10 | |
ENV LUAROCKS_VERSION 2.4.2 | |
ENV NGX_DEVEL_KIT_VERSION 0.3.0 | |
ENV LUA_NGINX_MODULE_VERSION 0.10.7 | |
# or tell where to find Lua if using Lua instead: | |
ENV LUA_LIB /usr/lib | |
ENV LUA_INC /usr/include | |
RUN GPG_KEYS=B0F4253373F8F6F510D42178520A9993A1C052F8 \ | |
&& CONFIG="\ | |
--prefix=/etc/nginx \ | |
--with-ld-opt='-Wl,-rpath,/usr/lib' \ | |
--with-cc-opt='-I /usr/include' \ | |
--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-http_perl_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=/usr/src/ngx-devel-kit \ | |
--add-module=/usr/src/lua-nginx-module \ | |
" \ | |
&& addgroup -S nginx \ | |
&& adduser -D -S -h /var/cache/nginx -s /sbin/nologin -G nginx nginx \ | |
&& apk add --no-cache --virtual .build-deps \ | |
gcc \ | |
libc-dev \ | |
make \ | |
openssl-dev \ | |
pcre-dev \ | |
zlib-dev \ | |
linux-headers \ | |
curl \ | |
gnupg \ | |
libxslt-dev \ | |
gd-dev \ | |
geoip-dev \ | |
perl-dev \ | |
tar \ | |
unzip \ | |
curl \ | |
openssl \ | |
zip \ | |
unzip \ | |
g++ \ | |
cmake \ | |
lua \ | |
lua-dev \ | |
bash \ | |
make \ | |
autoconf \ | |
automake \ | |
&& curl -A "Docker" -o /tmp/lua-nginx-module.tar.gz -D - -L -s https://github.com/openresty/lua-nginx-module/archive/v${LUA_NGINX_MODULE_VERSION}.tar.gz \ | |
&& mkdir -p /usr/src/lua-nginx-module \ | |
&& tar -xzf /tmp/lua-nginx-module.tar.gz -C /usr/src/lua-nginx-module --strip-components=1 \ | |
&& curl -A "Docker" -o /tmp/ngx-devel-kit.tar.gz -D - -L -s https://github.com/simpl/ngx_devel_kit/archive/v${NGX_DEVEL_KIT_VERSION}.tar.gz \ | |
&& mkdir -p /usr/src/ngx-devel-kit \ | |
&& tar -xzf /tmp/ngx-devel-kit.tar.gz -C /usr/src/ngx-devel-kit --strip-components=1 \ | |
&& curl -fSL http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz -o nginx.tar.gz \ | |
&& curl -fSL http://nginx.org/download/nginx-$NGINX_VERSION.tar.gz.asc -o nginx.tar.gz.asc \ | |
&& export GNUPGHOME="$(mktemp -d)" \ | |
&& gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$GPG_KEYS" \ | |
&& gpg --batch --verify nginx.tar.gz.asc nginx.tar.gz \ | |
&& rm -r "$GNUPGHOME" nginx.tar.gz.asc \ | |
&& mkdir -p /usr/src \ | |
&& tar -zxC /usr/src -f nginx.tar.gz \ | |
&& rm nginx.tar.gz \ | |
&& cd /usr/src/nginx-$NGINX_VERSION \ | |
&& ./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_http_perl_module.so objs/ngx_http_perl_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_http_perl_module-debug.so /usr/lib/nginx/modules/ngx_http_perl_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/nginx-$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 /usr/sbin/nginx /usr/lib/nginx/modules/*.so /tmp/envsubst \ | |
| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \ | |
| sort -u \ | |
| xargs -r apk info --installed \ | |
| sort -u \ | |
)" \ | |
&& apk add --no-cache --virtual .nginx-rundeps $runDeps | |
RUN mkdir -p /usr/src/luarocks \ | |
&& curl -A "Docker" -o /tmp/luarocks.tar.gz -D - -L -s https://github.com/luarocks/luarocks/archive/v${LUAROCKS_VERSION}.tar.gz \ | |
&& tar -xzf /tmp/luarocks.tar.gz -C /usr/src/luarocks --strip-components=1 \ | |
&& (cd /usr/src/luarocks; \ | |
./configure; \ | |
make build; \ | |
make install) \ | |
&& rm -r /usr/src/luarocks \ | |
&& luarocks install lua-resty-libcjson \ | |
&& luarocks install lua-cjson \ | |
&& luarocks install lua-resty-string \ | |
&& luarocks install lua-resty-auto-ssl \ | |
# && apk del .build-deps \ | |
&& apk del .gettext \ | |
&& mv /tmp/envsubst /usr/local/bin/ \ | |
\ | |
# 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 | |
RUN mkdir -p /etc/resty-auto-ssl && chown nginx /etc/resty-auto-ssl \ | |
&& chmod +x /usr/local/share/lua/5.1/resty/auto-ssl/shell/start_sockproc \ | |
&& chmod +x /usr/local/share/lua/5.1/resty/auto-ssl/vendor/sockproc \ | |
&& chmod +x /usr/local/share/lua/5.1/resty/auto-ssl/vendor/dehydrated \ | |
&& chmod +x /usr/local/share/lua/5.1/resty/auto-ssl/shell/letsencrypt_hooks | |
#RUN mv /usr/local/lib/lua/resty /usr/local/lib/lua/resty \ | |
# && /usr/local/lib/lua/ngx /usr/local/share/lua/5.1/ | |
#COPY nginx.conf /etc/nginx/nginx.conf | |
#COPY nginx.vh.default.conf /etc/nginx/conf.d/default.conf | |
COPY ./ssl /etc/resty-auto-ssl | |
EXPOSE 80 443 | |
CMD ["nginx", "-g", "daemon off;"] |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment