Rails アプリケーションをサブディレクトリで動かしたいということがある。
以前、Apache でリバースプロキシを用いてサブディレクトリで Node アプリを稼働させたので、今回は Nginx でやってみる。
目次
参考
作るもの
1 台の nginx を設定した CentOS に Rails アプリケーションを 2 つ同居させる。
2 つのアプリケーションは、app1
app2
とする。
rails アプリを作成
2 つのアプリケーションを作ってあるものとする。
環境設定を編集
config/environments
以下のファイルを編集する。
とりあえず development.rb
だけ編集するが、production.rb
でも同様。
config/environments/development.rb
を編集して、以下を追記する。
1 | Rails.application.config.relative_url_root = "/app1" |
app1 のconfig/environments/development.rb
ならば"/app1"
とする。
app2 であれば"/app2"
とする。
puma 設定変更
2 つのアプリケーションを同時に立ち上げると、デフォルトポートがぶつかってしまうので、ポートを変更する。
今回は、app1
はデフォルトと同じく 3000 番。app2
は、3001 番とする。
書き換えるファイルは、config/puma.rb
なので、以下のように編集する。
1 | # 標準は3000番 |
config.ru を編集
config.ru
を編集してサブディレクトに対応させる。
以下のように書き換えを行う。
1 | require_relative 'config/environment' |
1 | require_relative 'config/environment' |
nginx を設定
Nginx の設定追加は,/var/nginx/conf.d
にファイルを追加することで行います。/var/nginx/conf.d/rails_apps.conf
を以下のように作成します。
1 | server{ |
編集が終わったら、systemctl restart nginx
で nginx を再起動しておきます。
確認
コンソールを開いてapp1
app2
それぞれのアプリケーションのディレクトリで、bundle exec rails s
で起動します。
[サーバーのIP]/app1
と[サーバーのIP]/app2
にアクセスしてみます。app1
とapp2
に対応したアプリケーションへアクセスできました。
今回は、nginx で受けたポート 80 へのアクセスをポート 3000 と 3001 に転送しました。
サブディレクトリで、rails アプリケーションを同時に 2 つ立ち上げました。
unix ドメインソケットを使った rails と nginx の連携ができていないので、次はそこに挑戦します。
ではでは。