Ubuntu 16.04 LTS で Passenger + Apache を用いて Sinatraアプリ を公開する方法

0. 前提

Sinatra を Apache で動かしていきます。Passenger と Passenger の Apache モジュール自体のインストールは以下の過程を経て終わっているものとします。

# gem install passenger
# passenger-install-apache2-module

1. 設定方法(Apache)

1-1. Passenger のモジュール設定を Apache の設定ファイルに書き込む

以下のコマンドを実行して表示された結果をコピーして、Apache の設定ファイルに書き込みます。

# passenger-install-apache2-module --snippet

私が実行した際は上記のコマンドの結果で以下の内容が表示されましたが、ご覧の通り、各種設定やバージョンにより変わりますので、各自のものを用いてください。

LoadModule passenger_module /var/lib/gems/2.3.0/gems/passenger-5.0.30/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
 PassengerRoot /var/lib/gems/2.3.0/gems/passenger-5.0.30
 PassengerDefaultRuby /usr/bin/ruby2.3
</IfModule>

書き込む対象の Apache の設定ファイルの場所は以下のとおりです*1

/etc/apache2/apache2.conf

上記ファイルの一番最後に先ほどの内容を貼り付けて保存しましょう。

1-2. Webアプリの場所を Apache の設定ファイルに書き込む

次に Webアプリ の場所(ディレクトリ)を Apache の設定ファイルに書き込んであげます。書き込む対象の Apache の設定ファイルは以下のとおりです*2

/etc/apache2/sites-available/000-default.conf

まず、「DocumentRoot」の値がデフォルトで「/var/www/html」になっていますので、これを削除するかコメントアウトします。その上で改めて「DocumentRoot」を設定してあげましょう。

このときに注意することがあります。

DocumentRoot に設定する場所は public ディレクトリです

すなわち、アプリのディレクトリ名が「mysinatra」だった場合の DocumentRoot の指定は以下のとおりになります。アプリのディレクトリの場所を /var/www/html/mysinatra として作成している場合です。たとえ public ディレクトリが存在しなくても public ディレクトリを指定しましょう。

DocumentRoot /var/www/html/mysinatra/public

もっとも、どうせ将来的に public ディレクトリは作ることになりますし、存在しないことによる不具合の可能性も考えると、さっさと「# mkdir public」をして作っておくべきだとは思います。中身は空っぽで全く問題ありません。

これで設定ファイル(000-default.conf)を保存しましょう。

1-3. 「config.ru」ファイルを作る

最低限の Sinatra アプリの環境を作った場合、現在は以下のファイルがアプリのフォルダにあるのではないでしょうか。ここで「app.rb」は「/」への GET に対して「Hello, World!」を表示するだけの簡単なテストファイルで(まずは)いいでしょう。

  • Gemfile
  • Gemfile.lock
  • app.rb

Passenger で Sinatra のアプリを動かすためには、「config.ru」というファイルが必要です。以下の内容で「config.ru」というファイルを同じディレクトリ内に作ってあげましょう*3

require './app.rb'
run Sinatra::Application

1-4. Apache を再起動する。

忘れずに Apache を再起動しましょう。

# service apache2 restart

2. URL のルートにアクセスする

例えばローカル開発環境ならば「http://localhost/」にアクセスしましょう。IP アドレス指定でも、ドメインを取得している場合はそのドメインを指定しても、もちろん同じです。

所定のアプリが起動できていれば成功です!

3. 設定が把握できたら

上記の方法は動作するための最低限の内容を標準的な方法で示したものです。より発展的に改修したい場合はそれぞれの設定方法を深く調べてみてください*4

4. ハマった場合の脱出のコツ

あれもこれもといじくりすぎてしまうと、何が原因で動かない(動くようになった)のかが分からなくなります。面倒でも変更前のファイルや内容は残しておき、変更後と比較できるようにすることが大切です。

5. パーミションが正しくなくてアプリが動かないとき

Passenger は root 権限では動きませんので(「config.ru」の所有者が権限者)、その場合は public ディレクトリの所有者を変更してあげる必要があります。

*1:最も標準的なファイル

*2:最も標準的なファイル

*3:require の書き方はいろいろありますが、とりあえずこれで

*4:confファイルを独立させたり、アプリのディレクトリを任意の場所にしたりするなど

Powered by はてなブログ