カラーミーショップ ECブログリレー ngx_mruby

カラーミーショップで使っている ngx_mruby 関連ツール

カラーミーショップ ECブログリレー ngx_mruby

こんにちは。EC事業部の @yano3 です。

この記事はEC事業部ブログリレーの14日目の記事です。13日目は harasho による「CSVファイルを読み込むときはBOM付きUTF-8に気をつける」でした。人生に一度はBOM付きUTF-8に泣かされますよね。

さて、この記事では、 ngx_mruby を活用するためにカラーミーショップで利用しているツールや Docker イメージについて紹介します。

カラーミーショップと ngx_mruby

ngx_mruby は nginx に mruby を組み込むことにより Ruby のコードで nginx を拡張できる nginx モジュールのひとつです。カラーミーショップでは SSL 証明書の動的読み込みなど、いくつかの箇所で ngx_mruby を活用しています。詳しい事例は、昨年開催されたペパボECテックカンファレンスで私が発表したときの資料をご参照ください。また、このブログの ngx_mruby タグ からもペパボとしてのいくつかの事例を見ることができます。

ngx_mruby-package-builder

ngx_mruby-package-builder は Docker を使って ngx_mruby を静的ビルドした nginx パッケージを作成するツールです。 CentOS や Ubuntu などいくつかの Linux ディストリビューションに対応しています。

ngx_mruby には ngx_mruby プロジェクト自身や CentOS, Ubuntu などの代表的な Linux ディストリビューションから提供されているパッケージがありません。しかし、パッケージになっていると何かと便利です。カラーミーショップではこの ngx_mruby-package-builder でビルドした RPM パッケージと構成管理ツールを組み合わせてサーバを構築しています。

nginx-ngx_mruby Docker イメージ

yano3/nginx-ngx_mruby は Docker Hub で提供されている nginx のオフィシャルイメージをベースに ngx_mruby モジュールを追加した Docker イメージです。

ngx_mruby と ngx_mruby の動作に必要な ngx_devel_kit のモジュールのファイルとそれらを読み込む設定が入っている以外は nginx のオフィシャルイメージそのままのため、 nginx の設定ファイルの配置などオフィシャルイメージと同じ使い勝手で利用できます。

カラーミーショップでは Kubernetes の導入を進めており、 Kubernetes 上で ngx_mruby が必要になったケースではこのイメージを使っています。また、 ngx_mruby で実行する Ruby スクリプトの検証時など、手元でちょっと ngx_mruby を使いたいような場合にローカル環境にインストールすることなく、手元の Docker で実行できて便利です。

ngx_mruby-module-builder

ngx_mruby-module-builder は、 Docker を使って ngx_mruby の動的モジュールをビルドするツールです。

nginx はバージョン 1.9.11 以降、動的モジュールをサポートしています。動的モジュールのビルドには導入対象の nginx と同じバージョンの nginx が必要ですが、 ngx_mruby-module-builder ではビルド時に nginx のバージョンを指定し、導入対象の nginx に合わせた ngx_mruby の動的モジュールを簡単にビルドできます。(ngx_mruby-module-builder を用いたビルドには、ビルド時の --with-compat オプションをサポートした nginx バージョン 1.11.5 以降が必要です。)

他のサードパーティモジュールを静的にビルドする必要があるなど、先に紹介した ngx_mruby-package-builder を使ったパッケージの作成が困難なケースもあります。このような場合でも、動的モジュールとして組み込むことにより ngx_mruby を導入できます。

まとめ

カラーミーショップで使っているいくつかの ngx_mruby 関連ツールを紹介しました。紹介したものはすべて OSS や Docker イメージとして公開していますのでぜひ活用してみてください。