Apache 2.2 に Phusion Passenger をプラグインする手順 (CentOS/RedHat)

投稿者 : OSCA

[PR] "東野・岡村の旅猿"で登場したロケ地を紹介するファンサイト「あの場所へ行こう!」はこちら。

ここでは CentOS/RedHat の Apache 2.2 に Phusion Passenger をプラグインし、Apache 上で Ruby on Rails アプリケーションを動かせるようにするまでの手順を説明します。

Phusion Passenger のインストール手順は「Phusion Passenger の概要とインストール手順」を参考にして下さい。 ここでは Phusion Passenger は既にインストールしていあることを前提に説明を進めます。

事前準備

後述する Phusion Passenger の Apache 版モジュールを作成するために、Ruby や Gem、Apache がインストールされている事に加えて以下のライブラリが必要です。前もってインストールしておいてください。

  • C compiler
  • C++ compiler
  • Curl development headers with SSL support
  • OpenSSL development headers
  • Zlib development headers

手っ取り早く yum でインストールしてしまう場合のコマンドは下記の通りです。

yum install gcc gcc-c++ libcurl-devel openssl-devel zlib-devel

また、Apache 2.2 はインストールされていたとしても別途以下のライブラリが必要になります。

  • Apache 2 development headers
  • Apache Portable Runtime (APR) development headers
  • Apache Portable Runtime Utility (APU) development headers

yum でインストールする場合のコマンドは以下です。

yum install httpd-devel apr-devel apr-util-devel

そして本記事の最後で Ruby on Rails のデモアプリを動かします。 その際に SQLite を利用しますので、SQLite のライブラリもインストールしておきます。

yum install sqlite-devel

Phusion Passenger の Apache モジュール版を作成してプラグインする

Phusion Passenger を Apache と連携させるには、Apache モジュール版をインストールします。 Phusion Passenger をインストールした際に passenger-install-apache2-module というコマンドがインストールされていますので、そのコマンドを使用します。

passenger-install-apache2-module のコマンドを叩くと、親切にも下記の実行例のようにこれからの手順を表示してくれます。 そのまま Enter することでモジュールの作成が開始されます。

# passenger-install-apache2-module
This installer will guide you through the entire installation process. It shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

1. The Apache 2 module will be installed for you.
2. You'll learn how to configure Apache.
3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to solve any problems.

Press Enter to continue, or Ctrl-C to abort.

モジュールの作成が完了すると、以下のようなメッセージが表示されます。 今回は /opt 配下に rbenv をインストールした ruby の環境ですので、作成したモジュールのパスが下記のようになっていますが、皆さんの実行環境に合わせてモジュールの作成先が違って表示されていると思います。

The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /opt/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/passenger-4.0.48/buildout/apache2/mod_passenger.so
   PassengerRoot /usr/local/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/passenger-4.0.48
   PassengerDefaultRuby /usr/local/rbenv/versions/2.1.2/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails applications on Apache, without any further Ruby on Rails-specific configuration!

Press ENTER to continue.

メッセージには Apache の設定ファイルに3行追加しなさいと書かれていますので、Apache の設定ファイルに表示されたままを追記します。 /etc/httpd/conf/httpd.conf に上記で表示された3行をファイルの末尾に追記します。

LoadModule passenger_module /opt/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/passenger-4.0.48/buildout/apache2/mod_passenger.so
PassengerRoot /opt/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/passenger-4.0.48
PassengerDefaultRuby /opt/rbenv/versions/2.1.2/bin/ruby

上の3行の追記が完了したら、モジュールのインストールのコンソールに戻り、また Enter を押すと以下のようなメッセージが表示されます。 VirtualHost の設定をする例が表示されています。

Deploying a Ruby on Rails application: an example

Suppose you have a Rails application in /somewhere. Add a virtual host to your Apache configuration file and set its DocumentRoot to /somewhere/public:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      # !!! Be sure to point DocumentRoot to 'public'!
      DocumentRoot /somewhere/public
      <Directory /somewhere/public>
         # This relaxes Apache security settings.
         AllowOverride all
         # MultiViews must be turned off.
         Options -MultiViews
      </Directory>
   </VirtualHost>

And that's it! You may also want to check the Users Guide for security and optimization tips, troubleshooting and other useful information:

  /opt/rbenv/versions/2.1.2/lib/ruby/gems/2.1.0/gems/passenger-4.0.29/doc/Users guide Apache.html
  http://www.modrails.com/documentation/Users%20guide%20Apache.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)

次の節で、デモの Ruby on Rails アプリを作りながらバーチャルホストの設定を同時に説明します。

Ruby on Rails のアプリを動かしてみよう

ここまでの設定で Apache 2.2 で Ruby on Rails のアプリケーションが動くようになったはずです。 Ruby on Rails のデモアプリを利用してそれを確かめてみましょう。

Ruby on Rails のための rails コマンドをまだインストールしていない場合は、下記のコマンドでインストールしてください。 (インストールしたら、ターミナルを開き直します)

# gem install rails

ここでは /var/www/html の下に demo という Ruby on Rails のデモアプリを設置します。 (下記のコマンドについては Ruby on Rails アプリを作成するためのコマンドであり本稿の趣旨とは異なる為、コマンドの詳細は別稿にゆずります。)

# cd /var/www/html
# rails new demo
# echo "gem 'therubyracer'" >> ./demo/Gemfile
# cd demo
# bundle install
# rails generate scaffold Blog title:string content:text
# rake db:create RAILS_ENV=production
# rake db:migrate RAILS_ENV=production

Apache の httpd.conf に、以下のようにバーチャルホストの設定を記述します。(※ホスト名はあなたの持つドメイン、もしくはIPアドレスを指定してください)

<VirtualHost *:80>
   ServerName your.host.name
   DocumentRoot /var/www/html/demo/public
   <Directory /var/www/html/demo/public>
      AllowOverride all
      Options -MultiViews
   </Directory>
</VirtualHost>

以上で Apache を起動(再起動)して、http://(あなたのホスト)/blogs にアクセスしてみてください。 作成したブログ・エントリーを管理できるデモアプリが表示されると思います。

トラブルシューティング

Apache を起動した際に SELinux が有効になっていると mod_passenger.so を読み込もうとして Permission denied のエラーになる場合があるので、その場合 SELinux を無効にするなり再設定するなりが必要です。

Ruby環境構築入門へ戻る

更新履歴

  • 2013年12月31日 – 初版を投稿しました。
  • 2014年08月01日 – 記事を校正して最新化しました。

Rubyのトップへ戻る

著者 : OSCA

OSCA

Java, PHP 系のWEBエンジニア。 WEBエンジニア向けコミュニティ「WEBエンジニア勉強会」を主催。 個人として何か一つでも世の中の多くの人に使ってもらえるものを作ろうと日々奮闘中。
@engineer_osca