ngx_mrubyのビルド

created at 2017/01/05 18:25:52

はじめに

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公式イメージではこのようになっていた。

Dockerfile
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 \

自分が使うことを想定しつつ、オプションは次のようにした。

Dockerfile
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/

Dockerfile
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;"