mod_mruby を Amazon EC2、Apache2.4 へ導入する

  • 7
    いいね
  • 2
    コメント
この記事は最終更新日から1年以上が経過しています。

こんにちわ。これは mod_mruby ngx_mruby Advent Calendar 2014 の3日目(12/3)の投稿です。アドベントカレンダーなので mod_murby に関する説明は省きます。

今回は Aazon EC2 (OS: Amazon Linux) 上の Apache2.4 に mod_mruby を導入する手順について書きたいと思います。

ちなみに私はインフラ専業ではないので、おかしなところがあったら適当に読み替えてください^^; また Apache2.2 に導入する手順については以前に書きました。
mod_mruby を Amazon EC2、Apache2.2 へ導入する

詳細なバージョンは次のとおりです。

Apache バージョン:2.4.10
mod_mruby バージョン:1.9.7
Amazon Linux:
スクリーンショット 2014-11-27 19.28.17.png

Apache の導入手順は下記の通りなのですが、恐らくデフォルトの event mpm モードで動いていると思います。(後から思うと無難に prefork にしておけば良かったと思わなくもない。)

EC2 へ Apache2.4 をインストール

Apache 2.4 のインストール手順については以前に書いたので、こちらを参考にしてください。
Apache2.4 & Amazon EC2 で Apacheモジュール開発

結果的に、各パスは次のようになっています。

設定ファイルの場所:/usr/local/apache2/conf/
ドキュメントルート:/usr/local/apache2/htdocs/
各コマンドのパス:/usr/local/apache2/bin/

mod_mruby の導入

まず、Git が必要なので、Git を yum でインストールします。

$ sudo yum -y install git

GitHub から mod_mruby を clone し、

$ git clone git://github.com/matsumoto-r/mod_mruby.git

コンパイル用のスクリプトを実行します。

$ cd mod_mruby
$ APXS_PATH_ENV='--with-apxs=/usr/local/apache2/bin/apxs' APACHECTL_PATH_ENV='--with-apachectl=/usr/local/apache2/bin/apachectl' sh build.sh

apxsapachectl のパスはその環境へ合わせてください。

私の場合、コンパイルエラーが出ました。エラーの度に必要なものをインストールして再実行すればいいのですが、結果的に下記の2つをインストールすればOKでした。

$ sudo yum -y install bison openssl-devel

gcc は Apache のコンパイルの際に導入済みだった。

また、mod_mruby では mruby用のgem を組み込めるのですが、どれを組み込むかは build_config.rb で設定するようです(わたし調べ)。
この中で、mruby-redishiredis(KVS の Redis のこと?)が必要そうなので外しています。

build_config.rb
〜
conf.gem :github => 'mattn/mruby-json'
+#conf.gem :github => 'matsumoto-r/mruby-redis'
conf.gem :github => 'matsumoto-r/mruby-vedis'
〜

コンパイルが成功したら、次のように Apache へ組み込みます。

$ cd mod_mruby
$ sudo make install

すると、/usr/local/apache2/modules/ 配下に mod_mruby.so が配置され、Apache の設定ファイル(/usr/local/apache2/conf/httpd.conf)を見てみると、mod_mruby をロードする記述が自動で追記されています。

/usr/local/apache2/conf/httpd.conf

LoadModule mruby_module       modules/mod_mruby.so

Apache を再起動して、有効にします。

$ sudo /usr/local/apache2/bin/httpd -k restart

以上で導入は完了です!

mod_mruby の動作確認

/usr/local/apache2 あたりに mruby ディレクトリを作成し、その配下に mod_mruby 用のスクリプトを置くことにします。(このあたりは任意)

次のように書きます。

/usr/local/apache2/mruby/test.rb
Apache.echo "Hello World"

Apache側で、mod_mruby の設定ファイルを新規に作ります。

$ sudo touch /usr/local/apache2/conf/extra/mruby.conf

次のように記載します。

/usr/local/apache2/conf/extra/mruby.conf
<Location /test>
    mrubyHandlerMiddle /usr/local/apache2/mruby/test.rb
</Location>

Apache 本体の設定ファイルから、上記の mod_mruby 用の設定ファイルを読むこむようにします。

/usr/local/apache2/conf/httpd.conf

Include conf/extra/mruby.conf

保存したら Apache を再起動し、

$ sudo /usr/local/apache2/bin/httpd -k restart

ブラウザで /test へアクセスしてみます。

スクリーンショット_2014-11-27_19_00_12.png

上記の test.rb は、修正した場合でも Apache の再起動なしで適用されますし、設定ファイルから読み込む際に .. /usr/local/apache2/mruby/test.rb cache という風に cache オプションをつけておけば、スクリプトは Apache(mod_mruby) にキャッシュされるようです。
(キャシュした場合は、スクリプト修正の度に Apache の再起動は必要?)

おわりに

あとは /usr/local/apache2/mruby/ 配下に任意のスクリプトを置き、mod_mruby に関する Apache の設定は /usr/local/apache2/conf/extra/mruby.conf に書いていけばよいかと。

開発の参考になりそうなもの:

4日目は hfm さんによる ngx_mruby の記事になります!

この投稿は mod_mruby ngx_mruby Advent Calendar 20143日目の記事です。