28 Ноя

Настройка Nginx + Puma для Rails

Просто, чтоб не забыть.
Создаем или редактируем файл /path_to_your_rails_app/config/puma.rb (всякие пути и названия нужно указать свои, само собой):

threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 } 
threads threads_count, threads_count
port        ENV.fetch("PORT") { 3000 }
environment ENV.fetch("RAILS_ENV") { "development" }
app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/tmp"
#ниже вместо your_socket.sock пишете название своего файла сокета
bind "unix://#{shared_dir}/your_sock.sock"
#перенаправляем stdout в файлы логов
stdout_redirect "#{app_dir}/log/puma.stdout.log", "#{app_dir}/log/puma.stderr.log", true
# Allow puma to be restarted by `rails restart` command.
plugin :tmp_restart

После этого в /etc/nginx/nginx.conf (или /etc/nginx/sites_enabled/your_conf_file):

upstream your_upstream {
  server unix:///var/www/your_app/tmp/your_sock.sock;
}

server {
 #       listen   443;
        listen   80;
        server_name  your_domain.ru;
        root /var/www/your_app/public;
        client_max_body_size 32m;

#        настройки для HTTPS
#        ssl    on;
#        ssl_certificate   /etc/letsencrypt/live/your_domain.ru/fullchain.pem;
#        ssl_certificate_key    /etc/letsencrypt/live/your_domain.ru/privkey.pem;


        location / {
          proxy_pass http://your_upstream; # match the name of upstream directive which is defined above
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# настройки ниже нужны, если используется Action Cable
#        location /cable {
#          proxy_pass http://your_upstream;
#          proxy_http_version 1.1;
#          proxy_set_header Upgrade $http_upgrade;
#          proxy_set_header Connection "upgrade";
#        }

#эти четыре настройки ниже нужны, если используете SSL
#          proxy_set_header  X-Forwarded-Proto $scheme;
#          proxy_set_header  X-Forwarded-Ssl on; # Optional
#          proxy_set_header  X-Forwarded-Port $server_port;
#          proxy_set_header  X-Forwarded-Host $host;
        }
        location ~* ^/assets/ {
          # Per RFC2616 - 1 year maximum expiry
          expires 1y;
          add_header Cache-Control public;
          add_header Last-Modified "";
          add_header ETag "";
          break;
        }

}

#для автоматического перенаправления на https (если используется): 
server {
        listen       80;
        server_name your_domain.ru;
        rewrite     ^   https://$server_name$request_uri? permanent;
}

После этого могут возникнуть только проблемы с правами доступа к файлу сокета. По логам выяснять и решать.