Pumaをソケット通信にしつつデーモン化する

Linux

ぬにょす(挨拶)。

rails s した際に起動するサーバーであるところのPumaをゴニョゴニョします。

Puma側の設定

Railsプロジェクトディレクトリ配下の config/puma.rb を編集します。

## port をコメントアウト
#port        ENV.fetch("PORT") { 3000 }
## 追記ここから
rails_root = Dir.pwd
bind "unix://" + File.join(rails_root, 'tmp', 'sockets', 'puma.sock')
pidfile File.join(rails_root, 'tmp', 'pids', 'puma.pid')
state_path File.join(rails_root, 'tmp', 'pids', 'puma.state')
stdout_redirect(
  File.join(rails_root, 'log', 'puma.log'),
  File.join(rails_root, 'log', 'puma-error.log'),
  true
)
daemonize
## ここまで

Railsプロジェクトディレクトリで rails s するとPumaがデーモンとしてバックグラウンドで動きます。

$ bundle exec rails s
=> Booting Puma
=> Rails 5.2.2.1 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.12.1 (ruby 2.4.1-p111), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Daemonizing...

Pumaを止めたい時は ps ax | grep puma や cat tmp/pids/puma.pid などでプロセスIDを調べて kill します。

Nginx側の設定

設定例を参考にして編集します。

upstream puma {
  server unix:///home/hogehoge/hello-rails/tmp/sockets/puma.sock;
}

server {
  server_name example.com;
  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_pass http://puma;
  }
}

Nginxを再起動します。

$ sudo nginx -t
$ sudo systemctl reload nginx.service

ブラウザでアクセスしたら、前と変わりなくRailsページが表示されました。

コメント

タイトルとURLをコピーしました