Help us understand the problem. What is going on with this article?

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

More than 5 years have passed since last update.

こんにちわ。これは 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 の記事になります!

hkusu
Software Engineer @ Yumemi, Inc JavaScript / Android / Kotlin / AWS etc..
http://hkusu.github.io
yumemi
みんなが知ってるあのサービス、実はゆめみが作ってます。スマホアプリ/Webサービスの企画・UX/UI設計、開発運用。Swift, Kotlin, PHP, Vue.js, React.js, Node.js, AWS等エンジニア・クリエイターの会社です。Twitterで情報配信中https://twitter.com/yumemiinc
http://www.yumemi.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした