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
RailsやSinatraなどの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>
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」で表示されます。