CentOS6で ngx_mruby + mruby-memcached + mruby-mysql をインストールした


こんばんは。GMOペパボ試用期間の久米です。

以下の要件のリバースプロキシサーバを作成したいため、ngx_mrubyを触ってみました。

  • リクエストホスト名に応じて転送先のサーバを変更する。
  • ホスト名と転送先サーバのひも付けの情報をMemcachedのサーバから取得する。
  • キャッシュが存在していなければMySQLデータベースから取得し、キャッシュを書き込む。

この要件を ngx_mruby + mruby-memcached + mruby-mysql で満たすべく、 本エントリではインストール方法について記載します。

環境

#バージョン
OSCentOS 6.6
kernel2.6.32-504.el6.x86_64
Ruby2.2.4
nginx1.9.14
ngx_mruby1.1.17

今回はルートユーザで作業を行います。

sudo su -

Ruby (rbenv) 環境を構築

必要なライブラリをインストール

yum install -y git openssl-devel readline-devel zlib-devel

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をインストール

  • インストールできるRubyのバージョンを確認
  • 今回は"2.2.4"をチョイス
rbenv install --list
 :
2.2.3
2.2.4
2.3.0-dev
2.3.0-preview1
2.3.0-preview2
2.3.0
2.4.0-dev
 :
  • rbenvでRubyをインストールする。
rbenv install 2.2.4
rbenv global 2.2.4
  • バージョン確認
rbenv versions
* 2.2.4 (set by /root/.rbenv/version)

serverspecをインストール

rbenv exec gem install serverspec

ngx_mruby + mruby_memecached + mruby_mysql をインストール

必要なライブラリのインストールとソースのダウンロード

  • mruby-memcachedに必要なライブラリ
yum install -y pcre-devel bison
rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
yum -y install --enablerepo=remi libmemcached-last-devel
  • mruby-mysqlに必要なライブラリ
yum install -y mysql mysql-devel
  • nginx, ngx_mrubyのソースをダウンロード
mkdir /usr/local/src/nginx && cd /usr/local/src/nginx
git clone https://github.com/matsumoto-r/ngx_mruby.git
curl -O http://nginx.org/download/nginx-1.9.14.tar.gz
tar zxf nginx-1.9.14.tar.gz

ビルド

以下を参考にして、ビルドしました。 matsumoto-r/ngx_mruby Wiki Install

  • ngx_mubyは “build_config.rb” で利用するモジュールを選択してビルドする仕組みです。
cd ngx_mruby && vi build_config.rb
  • 以下のモジュールもビルドするようにコメントアウトを外します。
    • mruby-memcached
    • mruby-mysql
 :
conf.gem :github => 'matsumoto-r/mruby-memcached'
 :
conf.gem :github => 'mattn/mruby-mysql'
 :
  • プレフィックスとnginxのソース配置先を環境変数に設定して build.sh を実行します。
NGINX_CONFIG_OPT_ENV='--prefix=/usr/local/nginx' NGINX_SRC_ENV='/usr/local/src/nginx/nginx-1.9.14/' sh build.sh
 :
ngx_mruby building ... Done
build.sh ... successful
  • インストール
make install
  • 動作確認用の記述を nginx.conf に設定します。
vi /usr/local/nginx/conf/nginx.conf
  • location /mruby .. を設定
 :
http {
   :
  server {
     :
    location /mruby {
      mruby_content_handler '/usr/local/nginx/html/unified_hello.rb';
    }
     :
  }
   :
}
 :
  • スクリプトを配置
vi /usr/local/nginx/html/unified_hello.rb
if server_name == "NGINX"
  Server = Nginx
elsif server_name == "Apache"
  Server = Apache
end

Server::rputs "Hello #{Server::module_name}/#{Server::module_version} world!"

起動の設定

  • initスクリプトを作成します
vi /etc/init.d/nginx
  • 以下のURLからコピーしてきます

Red Hat NGINX Init Script https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/

  • 環境に合わせてパスを修正します
 :
#nginx="/usr/sbin/nginx"
nginx="/usr/local/nginx/sbin/nginx"
 :
#NGINX_CONF_FILE="/etc/nginx/nginx.conf"
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
 :
  • 起動スクリプトの設定
chmod +x /etc/init.d/nginx
chkconfig --add nginx
chkconfig nginx on
  • 起動してみる
service nginx start
  • 動作確認
curl http://127.0.0.1/mruby

Hello ngx_mruby/1.17.0 world!

はろーー!ngx_mruby!!