httpd + mod_mrubyでプログラマブルなWEBサーバを構築する


はじめに

こんばんは。GMOペパボの久米です。 以前、「CentOS6で ngx_mruby + mruby-memcached + mruby-mysql をインストールした。」という記事でプログラマブルに制御できるnginxの紹介をし、リバースプロキシの構築を行いました。

本エントリでは、同様にプログラマブルに制御できるWEBサーバとしてApacheに @matsumotoryさん が作成している、 mod_mruby というモジュールを組み込みたいと思います。

これにより、ngx_mruby 同様にmrubyを使って動的にWEBサーバの設定を変更することができます。

環境

#バージョン
OSCentOS 6.6
httpd2.2.15-54
ruby1.9.3

必要なコンポーネント、ライブラリをインストール

yum install -y httpd httpd-devel php git zlib zlib-devel pcre-devel bison openssl-devel readline-devel

Ruby(rbenv環境)をインストール

rbenv + ruby-buildをダウンロード

git clone https://github.com/rbenv/rbenv.git ~/.rbenv
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

rbenvのPATHの設定

echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
exec $SHELL -l

rubyのバージョンを選択

  • 今回は1.9.xの最新版を利用する。
rbenv install --list
rbenv install 1.9.3-p551
rbenv global 1.9.3-p551

mod_mrubyのビルドに必要なrakeをインストール

rbenv exec gem install rake

mod_mrubyをビルド

ソースをダウンロード

cd /usr/local/src
git clone https://github.com/matsumoto-r/mod_mruby.git

ビルド

cd mod_mruby
sh ./test.sh
sh ./build.sh

httpdにmod_mrubyを組み込む

cp -p /usr/local/src/mod_mruby/src/.libs/mod_mruby.so /etc/httpd/modules/
vi /etc/httpd/conf.d/mruby.conf
mruby.conf
LoadModule mruby_module modules/mod_mruby.so
<Location /mruby-test>
    mrubyHandlerMiddle /etc/httpd/lib/test.rb
</Location>

動作確認

mkdir /etc/httpd/lib
cp -p /usr/local/src/mod_mruby/test/test.rb /etc/httpd/lib/
service httpd start
curl http://127.0.0.1/mruby-test
実行結果
(snip)
__Test Complete. Wellcome to mod_mruby world!!__

はろーーーmod_mruby!!!