Ruby: CentOS + Apache で Rack アプリが動作するようにする

Passenger を使います。

Passenger 入れる

$ gem install passenger

依存モジュール入れる

$ [sudo] yum install curl-devel httpd-devel apr-devel apr-util-devel

インストールコマンド叩く

Apache の Passenger モジュールを入れます。普通はこのコマンドだけ。

$ passenger-install-apache2-module

 

ruby いっぱい入れちゃってたら(よくない)、コマンドを find で探して、フルパスで叩く。

$ sudo find / -name passenger-install-apache2-module
/home/XXXXXX/.rbenv/versions/2.0.0-p451/bin/passenger-install-apache2-module
/home/XXXXXX/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.37/bin/passenger-install-apache2-module
/usr/local/bin/passenger-install-apache2-module
/usr/local/lib/ruby/gems/1.9.1/gems/passenger-3.0.15/bin/passenger-install-apache2-module
$ /home/XXXXXX/.rbenv/versions/2.0.0-p451/bin/passenger-install-apache2-module

 

無事にインストールが終わりつつあれば、最後にまずこんなのが出る。

--------------------------------------------
Almost there!

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

   LoadModule passenger_module /home/XXXXXX/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so
   <IfModule mod_passenger.c>
     PassengerRoot /home/XXXXXX/.rbenv/versions/2.0.0-p451/lib/ruby/gems/2.0.0/gems/passenger-4.0.37
     PassengerDefaultRuby /home/XXXXXX/.rbenv/versions/2.0.0-p451/bin/ruby
   </IfModule>

After you restart Apache, you are ready to deploy any number of web
applications on Apache, with a minimum amount of configuration!

Press ENTER to continue.

add these lines: の部分を Apache のコンフファイルに追加する。
その後 Apache 再起動すればあとは何個でも Rack アプリ立ち上げられるぜヨーメーン!と言っている。

これを後で以下コンフファイルに追加。

$ sudo vi /etc/httpd/conf/httpd.conf

 

Enter キーで進めて、最後の最後でウェブアプリのデプロイ方法例が出る。

--------------------------------------------

Deploying a web application: an example

Suppose you have a web 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>

バーチャルホスト設定は以下。

$ sudo vi /etc/httpd/conf.d/vhosts.conf

ドメインを ServerName に指定して、 DocumentRoot と Directory のところに Rack アプリの public ディレクトリを指定する。

公開したい Rack アプリの public ディレクトリのシンボリックリンクを web サーバで公開されているディレクトリ (/var/www/html) に作るのが一般的。

$ sudo ln -s /home/XXXXXX/racktest/public /var/www/html/racktest

ホームディレクトリの権限一応チェック。

$ sudo chmod 755 "/home/XXXXXX"

 

ちなみに、同一ドメインでディレクトリ切る形 (sample.com/racktest) のようにデプロイしたい場合は、RackBaseURI を使う。この場合は、バーチャルホスト設定はいらないので直前の作業は行わず、以下の設定をコンフファイルに追加する。

$ sudo vi /etc/httpd/conf/httpd.conf
RackBaseURI /racktest

先ほど作成したシンボリックリンクの名前を RackBaseURI で設定する形で設定する。
Rails の場合は RackBaseURI ではなく RailsBaseURI にする。

 

Apache 再起動

$ sudo service httpd restart

ファイアーウォール設定

port 9292 を確認、解放、再起動。

$ sudo vi /etc/sysconfig/iptables
$ sudo /etc/rc.d/init.d/iptables restart

 

Rack アプリ起動

$ cd /home/XXXXXX/racktest
$ rackup

domain.com/racktest とかが表示できれば完了。