脳汁portal

アメリカ在住(だった)新米エンジニアがその日学んだIT知識を書き綴るブログ

sinatra + Apache + Passengerでサブディレクトリとしてアプリリリースする方法

sinatraアプリをApache + Passengerを使ってリリースする手順

Apacheのinstall

まずはWebサーバとしてApacheをインストールします

yum list installed | grep httpd
yum install httpd
httpd -v
    #Server version: Apache/2.2.15 (Unix)
    #Server built:   Aug 24 2015 17:52:49

sinatraアプリの配置

上記の手順でApacheをインストールした場合、デフォルトでDocumentRootは'/var/www/html'になっています。
なのでここに作成したsinatraアプリを配置します。

cd /var/www/html
cp -r sinatraAPP .

sinatraアプリの設定

sinatraアプリのrootディレクトリにconfig.ruを作成し、以下のように編集します。

#  config.ru
require "./${作成したsinatraの.rbファイル}"
run Sinatra::Application

passengerのinstall

RailsSinatraなどのRack製アプリケーションを起動するためのPassengerをインストールします

gem install passenger
gem list passenger
    #passenger (5.0.16)

Associate Apache and Passenger

ApacheとPassengerを関連付けます

yum install httpd-devel apr-devel apr-util-devel
passenger-install-apache2-module
passenger-install-apache2-module --snippet
    #LoadModule passenger_module /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-5.0.16/buildout/apache2/mod_passenger.so
    #<IfModule mod_passenger.c>
    #  PassengerRoot /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-5.0.16
    #  PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.2/wrappers/ruby
    #</IfModule>
passenger-install-apache2-module
  • 色々出てきますが、上記のライブラリがちゃんと入っている場合はENTER押してれば大丈夫です
  • ライブラリのinstallが失敗している場合はエラーが出ますが、その後に出てくるコマンドを実行すればOKです。
  • 最後にApacheにPassenger使うためのコメントが書いてないよ!って出てますが、この後書くのでOKです。
passenger-install-apache2-module --snippet
  • Apacheの設定ファイルに書き込めばいい内容をそのまま表示してくれます。コピっておきましょう

setting passenger

/etc/httpd/conf.d/passenger.confを作成して以下を編集します。

  • 名前は*.confだったら何でも構いません。
# 上でコピーした"passenger-install-apache2-module --snippet"の結果
LoadModule passenger_module /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-5.0.16/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/rvm/gems/ruby-2.1.2/gems/passenger-5.0.16
  PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.2/wrappers/ruby
</IfModule>

Header always unset "X-Powered-By"
Header always unset "X-Rack-Cache"
Header always unset "X-Content-Digest"
Header always unset "X-Runtime"

PassengerMaxPoolSize 20
PassengerMaxInstancesPerApp 4
PassengerPoolIdleTime 3600
PassengerHighPerformance on
PassengerStatThrottleRate 10

<VirtualHost *:80>
  ServerName 192.168.33.11 <== ${ご自分の環境に合わせて変更してください}
  DocumentRoot "/var/www/html/sinatraApp/public"  <== ${ご自分の環境に合わせて変更してください}
  RackEnv production
</VirtualHost>

setting Apache

/etc/httpd/conf/httpd.confの以下の部分をアンコメントアウトします。

#
# Use name-based virtual hosting.
#
#NameVirtualHost *:80
NameVirtualHost *:80

Confirm

service httpd restart

http://192.168.33.11/にアクセスすると作成したsinatraアプリが表示されます。



sinatraアプリをサブディレクトリに割り当てる

今のままだと、このサーバにきたアクセスは全てsinatraのアプリへ飛ばされてしまうので、HPに組み込んだりすることができません。
なのでサブディレクトリをきってそこにsinatraを割り当てます。

setting passenger

先ほど作成した/etc/httpd/conf.d/passenger.confの内容を追加・修正します。

.
.
<VirtualHost *:80>
  ServerName 192.168.33.11

  # DocumentRootをApacheのDocumentRootに変更
  DocumentRoot "/var/www/html"  

  # PassengerRootをsinatraアプリのRootに変更
  PassengerAppRoot /var/www/html/sinatraAPP

  RackEnv production

  # RackBaseURIには適当に名前をつけておきます
  RackBaseURI /sinatraSub
</VirtualHost>

publickディレクトリへシムリンクを貼る

Rack製アプリケーションを利用する際は、デフォルトではDocumentRootをpublicディレクトリにしなければいけないので、
そのためのシムリンクを貼ります。

cd /var/www/html
ls -l sinatraApp
# ==> drwxrwsr-x 7 roma roma   4096 Aug 27 10:12 sinatraApp

# 先ほどのRackBaseURIでつけた名前でシムリンクを作成します。
ln -s /var/www/html/sinatraApp/public sinatraSub

ls -l sinatra*
# ==> lrwxrwxrwx 1 root root     29 Aug 27 12:29 sinatraSub -> /var/www/html/sinatraApp/public
# ==> drwxrwsr-x 7 roma roma   4096 Aug 27 10:12 sinatraApp

確認

Apacheを再起動して確認します。

service httpd restart

ちゃんと設定できていれば、「http://192.168.33.11/sinatraSub/」へアクセスするとsinatraアプリが表示されます。
また、/var/www/html/index.htmlなどのファイルがあれば、「http://192.168.33.11/index.html」で表示されます。