はじめに
Dockerでngx_mrubyが入ったNginxのイメージが欲しかったのでビルドした。 公式?のmatsumotory/ngx-mrubyイメージはUbuntuベースで余計なパッケージとかも入っているので、作り直すことにした。
ngx_mrubyのビルド方法
ngx_mruby入りのNginxのインストール方法はwikiに書いてある。 https://github.com/matsumotory/ngx_mruby/wiki/Install
matsumotory/ngx_mrubyレポジトリをクローンして、build.sh
という便利スクリプトを叩く感じになってる。
build.sh
は単純にNginxをダウンロードしてきて、configureして、makeする感じ。
configureのオプションを$NGINX_CONFIG_OPT_ENV
という環境変数で指定できるようになっている。
Nginxビルドのオプション
ngx_mruby公式イメージではこのようになっていた。
ENV NGINX_CONFIG_OPT_ENV \
--with-http_stub_status_module \
--with-http_ssl_module \
--prefix=/usr/local/nginx \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
自分が使うことを想定しつつ、オプションは次のようにした。
ENV NGINX_CONFIG_OPT_ENV \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--with-http_ssl_module \
--with-http_v2_module \ # HTTP/2の有効化
--with-http_realip_module \ # X-Forwarded-Forのロギング
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module
Dockerfile
できあがったDockerfileはこんな感じ。 https://hub.docker.com/r/nownabe/nginx_mruby/
FROM alpine:3.5
MAINTAINER nownabe
ENV NGINX_CONFIG_OPT_ENV \
--http-log-path=/var/log/nginx/access.log \
--error-log-path=/var/log/nginx/error.log \
--with-http_ssl_module \
--with-http_v2_module \
--with-http_realip_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_stub_status_module
RUN apk add --no-cache --update openssl-dev pcre-dev \
&& apk add --no-cache --virtual build-deps build-base ruby-dev ruby-rake tar wget bison perl git \
&& git clone https://github.com/matsumotory/ngx_mruby.git \
&& cd ngx_mruby \
&& sh build.sh \
&& make install \
&& cd \
&& apk del build-deps \
&& ln -sf /dev/stdout /var/log/nginx/access.log \
&& ln -sf /dev/stderr /var/log/nginx/error.log \
&& mkdir -p /etc/nginx/conf.d \
&& rm -rf ngx_mruby /var/cache/apk/*
ADD nginx.conf /etc/nginx/nginx.conf
CMD /usr/local/sbin/nginx -c /etc/nginx/nginx.conf -g "daemon off;"