nginx
puma
Rails5

Rails5でpuma + nginx連携

Rails5で作成したアプリケーションをpuma + nginxで動かすというのをやってみた。

本記事で知ることのできること
・最低限の設定
・躓いたところ
知ることのできないこと
・nginx, pumaの詳細な設定
・セキュリティを意識した設定

環境
・OS Ubuntu16.04
・Rails 5.1.5
・nginx 1.10.3

pumaの設定

今回はsocketでpumaとnginxを連携させるため、Rails.root/config/puma.rbを編集。

# ポートでのlistenは不要なのでコメントアウト
#port  ENV.fetch("PORT") { 3000 }

# socketの設定
# ディレクトリがない場合は作成しておく
bind "unix://#{Rails.root}/tmp/sockets/puma.sock"

この際に、ポートでのlistenはコメントしておかないとsocketのlistenが行われず(pumaの仕様?)ハマった。
参考: https://qiita.com/kappy0322/items/b6c267dfb330a47fea9f

これでpumaを起動すればsocketファイルができ、待受け完了。
rails s -e production

nginxの設定

設定ファイルは大きく2つあるみたい。
nginxの基本的な設定
・/etc/nginx/nginx.conf
各サイト用の設定
・/etc/nginx/sites-available/*

今回は/etc/nginx/sites-available/配下に myapp ファイルを作成し、設定を記述。

upstream puma {
  # pumaの設定で指定したsocketファイルを指定
  server unix:///home/ubuntu/cash_vest_block_chain_frontend/tmp/puma.sock;
}

server {
  # nginxが待ち受けしたいポートを指定
  listen 3000 default_server;
  listen [::]:3000 default_server;
  server_name puma;

  location / {
    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;
    # 上記server_name で設定した名前で指定
    proxy_pass http://puma;
  }
}

記述ができたら、設定ファイルのシンボリックリンクを作成。
ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/myapp
次に、nginxの設定ファイルを再読込させる。
nginx -s reload

これで、設定完了。
http://あいぴーあどれす:3000 にアクセスするとngnxが受け、pumaへ回してくれる。

課題
・nginxの設定内容の詳細を理解する