こんにちわ。これは 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 の導入手順は下記の通りなのですが、恐らくデフォルトの 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
apxs
とapachectl
のパスはその環境へ合わせてください。
私の場合、コンパイルエラーが出ました。エラーの度に必要なものをインストールして再実行すればいいのですが、結果的に下記の2つをインストールすればOKでした。
$ sudo yum -y install bison openssl-devel
gcc は Apache のコンパイルの際に導入済みだった。
また、mod_mruby では mruby用のgem を組み込めるのですが、どれを組み込むかは build_config.rb
で設定するようです(わたし調べ)。
この中で、mruby-redis
は hiredis
(KVS の Redis のこと?)が必要そうなので外しています。
〜
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 をロードする記述が自動で追記されています。
〜
LoadModule mruby_module modules/mod_mruby.so
〜
Apache を再起動して、有効にします。
$ sudo /usr/local/apache2/bin/httpd -k restart
以上で導入は完了です!
mod_mruby の動作確認
/usr/local/apache2
あたりに mruby
ディレクトリを作成し、その配下に mod_mruby 用のスクリプトを置くことにします。(このあたりは任意)
次のように書きます。
Apache.echo "Hello World"
Apache側で、mod_mruby の設定ファイルを新規に作ります。
$ sudo touch /usr/local/apache2/conf/extra/mruby.conf
次のように記載します。
<Location /test>
mrubyHandlerMiddle /usr/local/apache2/mruby/test.rb
</Location>
Apache 本体の設定ファイルから、上記の mod_mruby 用の設定ファイルを読むこむようにします。
〜
Include conf/extra/mruby.conf
〜
保存したら Apache を再起動し、
$ sudo /usr/local/apache2/bin/httpd -k restart
ブラウザで /test
へアクセスしてみます。
上記の 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
に書いていけばよいかと。
開発の参考になりそうなもの:
- mod_mruby の Wiki(GitHub)
- mruby用の gem
- https://github.com/mruby/mgem-list
- いろいろあるので、便利そうなものを組み込んでみたり、足りないものは自分で作ってみてもいいかもですね。
4日目は hfm さんによる ngx_mruby の記事になります!