nginxとRailsを連携させる

pckhtn.hatenablog.com

こちら☝️の記事の続きになります。

やりたい事

nginxとpumaを連携させてRailsアプリを動かす。 動的ページはpumaから、静的ファイルはnginxから配信させる。

1. Pumaの設定

Rails(Puma)とNginxを連携させるために、Pumaの設定ファイルを修正します。

config/puma.rbを以下のようにします。

# 以下の部分をコメントアウトします。
# port  ENV.fetch("PORT") { 3000 } 


# 以下の3行を追加してください。
bind "unix://#{Rails.root}/tmp/sockets/puma.sock"
daemonize true
stdout_redirect "#{Rails.root}/log/stdout", "#{Rails.root}/log/stderr"

2. nginxの設定

私のサーバーでは、/etc/nginx/sites-available/配下に各サイトの設定ファイルがあるので、それに設定を記述していきます。

下記設定ファイルのbooks_appは各自のフォルダ名に変えてください。 また、追記するところ以外は省略しているところもあるのでこのままコピペする事はお勧めしません。 各自の設定ファイルに書いてあった内容はなるべく消さずに追加するところだけを選んで自分の設定ファイルに追加してください。

upstream books_app {
# 先ほどPumaの設定でbindの後に書いたものを追記してください。
    server unix:///opt/books_app/tmp/sockets/puma.sock fail_timeout=0;
}

server {
  listen xx;
   server_name xxxxx;
   access_log /home/demo/public_html/xxxxx/log/access.log;
   error_log /home/demo/public_html/xxxxx/log/error.log;
# rootとtry_filesの設定を追加してください↓
   root /opt/books_app/public;
   try_files $uri/index.html $uri @books_app;

# 下記locationの設定9行を追記してください
  location @books_app {  
    proxy_read_timeout 300;  
    proxy_connect_timeout 300;  
    proxy_redirect off;  
    proxy_set_header Host $host;  
    proxy_set_header X-Forwarded-Proto $scheme;  
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
    proxy_pass http://books_app;  
  }  
}

追記できたら、下記コマンドで設定ファイルのシンボリックリンクを作成します。

$ ln -s /etc/nginx/sites-available/books_app /etc/nginx/sites-enabled/books_app

3. サーバー起動

nginxの設定ファイルを再読込させます。

$ sudo nginx -s reload

nginxの再起動ができず、手こずったのですが、同じ状態になった方はこちらの記事↓が参考になるかもしれません。

他のプロセスがポートを占有してnginxを再起動できない - Qiita

Pumaを起動します。

$ bin/rails s -e production

# 停止する場合
$ kill `cat tmp/pids/server.pid`

これで準備完了です!各自のドメインにアクセスしてみてください。

http://各自のドメイン/

Railsアプリが表示されるはずです。お疲れ様でした😄

参考