Ubuntu 16.04 LTS にて Passenger + Apache でサブディレクトリを用いて複数の Webアプリ を実行する方法

1. Passenger での Webアプリ 実行

Rails や Sinatra を Apache で起動する際、Apache を Webアプリ 専用にするのではなく、サブディレクトリで切って複数起動する場合の設定です。Passenger のインストールや、単独での Webアプリ の実行確認は済んでいるものとします。

2. 設定方法

2-1. 「000-default.conf」に「RackBaseURI」を書き加える

/etc/apache2/sites-available/000-default.conf<VirtualHost \*:80>*</VirtualHost>で囲われているうちの任意の場所に、以下を書き加えましょう。

RackBaseURI /myapp1
RackBaseURI /myapp2

これは、以下の URI にてそれぞれ Webアプリ を起動することを設定しています(localhostの場合)。

2-2. シンボリックリンクを張る

「1.」の設定に加え、「1.」で設定した場所にシンボリックリンクを張る必要があります。その際の注意点は以下のとおりです。

シンボリックリンクの対象は public ディレクトリです

上記の例の場合は、以下のようにシンボリックリンクを張る必要があります。

# cd /var/www/html
# ln -s /var/www/html/sampleapp1/public myapp1
# ln -s /var/www/html/sampleapp2/public myapp2

これで、sampleapp1およびsampleapp2へのリンクが割り当てられました。

2-3. Apache を再起動する

Apache を再起動しましょう。

# service apache2 restart

3. アプリの実行を確認する。

以下の URI にアクセスしてアプリが実行されているかを確認しましょう。sampleapp1が一番目の URI で、sampleapp2が二番目の URI で実行されていれば成功です。

4. 問題点など

上記の内容から分かりますように、この方法で一般的な Webページ(サイト)と Webアプリ が共存できます。ただ、「RailsEnv」の使い分けなどはできないと思います*1。また、上記の例では元のアプリの場所が/var/www/html配下になっていますが、これはこの場所である必要(公開されている場所である必要)はありません。

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

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

*1:VirtualHost を使い分ける? あるいは Docker を使うなど

Powered by はてなブログ