2014/12/03追記:
Apache2.4に導入する手順をこちらに書きました。
⇒ mod_mruby を Amazon EC2、Apache2.4 へ導入する
前から気になってた mod_mruby を試してみたメモです。
mod_mruby で、Apacheモジュールを Ruby(厳密にはmruby)で書けるようです。
過去にも少し Apache モジュールは書いたことがあるのですが(しょぼいですが 1つだけ GitHub にも上げてます)、Ruby で書いて、Apache で色々できたら素敵やん.. と思い。
ローカルに環境を作ってもよかったのですが、やはりちゃんとWEBサーバで動作させたかったので、Amazon EC2 に導入してみました。
Apache バージョン:
2.2.27
mod_mruby バージョン:1.4.1
Amazon Linux:AMI 2014.03.2(HVM)64bit
Apache の導入手順は下記の通りなのですが、恐らくデフォルトの prefork
モードで動いていると思います。
環境の構築と mod_mruby の導入
EC2 のセットアップ
ここではセットアップ手順は述べませんが、AMI は Quick Start の一番上にある Amazon Linux を利用しました。
また、Apache を立ち上げたいので、セキュリティグループの設定で 80番 ポートを開けておきます。
※ アクセス元の IP は、出来るなら絞った方がよいと思います。
Apache のインストール
恐らく apxs が必要なんだろうなと思い、devel 版をインストールしました。
$ sudo yum -y install httpd-devel
動作確認
Apache を起動します。
$ sudo /etc/init.d/httpd start
httpd を起動中: [ OK ]
適当なブラウザで、EC2 の Public DNS もしくは Public IP でアクセスしてみます。次のようにおなじみのページが表示されればOKです。
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/sbin/apxs' APACHECTL_PATH_ENV='--with-apachectl=/usr/sbin/apachectl' sh build.sh
※ apxs
と apachectl
のパスは、今回の環境は /user/sbin/
でした。ですので、上記でもそのように指定しています。
私の場合、コンパイルエラーが出たので、次のものをインストールしてから再度、実行しました。
$ sudo yum -y install gcc bison openssl-devel
$ sudo yum -y install hiredis-devel --enablerepo=epel
※ hiredis-devel
は通常の yum リポジトリに存在しない?
コンパイルが成功したら、次のように Apache へ組み込みます。
$ cd mod_mruby
$ sudo make install
すると、/usr/lib64/httpd/modules/
に mod_mruby.so
が配置されます。
Apache の設定ファイル /etc/httpd/conf/httpd.conf
を見てみると、すでにこのモジュールを読み込む記述が追記されているようなので、
Apache を再起動して、有効にします。
$ sudo /etc/init.d/httpd restart
httpd を停止中: [ OK ]
httpd を起動中: [ OK ]
以上で導入は完了です^^
mod_mruby を試してみる
git colone した mod_murby
ディレクトリに、テスト用のスクリプト(test/test.rb)があるので、それを動かしてみます。
テスト用のスクリプトを、Apache の DocumentRoot 直下へコピーします。
$ sudo cp test.rb /var/www/html/
Apache側で、mod_mruby の設定をします。mod_mruby 用の conf ファイルを作成し、
$ sudo touch /etc/httpd/conf.d/mruby.conf
次のように記載します。
<Location /mruby-test>
mrubyHandlerMiddle /var/www/html/test.rb
</Location>
保存したら Apache を再起動し、
$ sudo /etc/init.d/httpd restart
ブラウザで /mruby-test
へアクセスしてみます。
ちゃんと動作しているようです^^
おわりに
今回は環境の構築と動作確認までを行いました。次回は、実際に何かモジュールを書いていきます。