Para colocar em produção uma aplicação Rails com Puma e Nginx no Ubuntu (aqui utilizei o Ubuntu 16.04) de uma forma bem simples basta a seguintes configurações, todas elas retiradas de pontos diferentes da internet:
Primeiro em /diretorio/do/app/rails/config/puma.rb:
# Change to match your CPU core countÉ necessário criar uma estrutura de diretórios para os arquivos necessários para execução do Puma. No caso vamos criar dentro do diretório \var\www\ os seguintes diretórios:
workers 1
threads_count = ENV.fetch("RAILS_MAX_THREADS") { 5 }.to_i
threads threads_count, threads_count
app_dir = File.expand_path("../..", __FILE__)
shared_dir = "#{app_dir}/shared"
rails_env = ENV['RAILS_ENV'] || "production"
environment rails_env
# Set up socket location
bind "unix://#{shared_dir}/sockets/puma.sock"
# Logging
stdout_redirect "#{shared_dir}/log/puma.stdout.log", "#{shared_dir}/log/puma.stderr.log", true
# Set master PID and state locations
pidfile "#{shared_dir}/pids/puma.pid"
state_path "#{shared_dir}/pids/puma.state"
activate_control_app
on_worker_boot do
require "active_record"
ActiveRecord::Base.connection.disconnect! rescue ActiveRecord::ConnectionNotEstablished
ActiveRecord::Base.establish_connection(YAML.load_file("#{app_dir}/config/database.yml")[rails_env])
end
\var\www\shared\pidsDepois, na configuração do site no Nginx no arquivo /etc/nginx/sites-enabled/default:
\var\www\shared\sockets
\var\www\shared\log
upstream app {Após isso precisamos criar um script para iniciar o Puma no boot do sistema. Vamos criar um arquivo em /etc/systemd/system/puma.service com o seguinte conteúdo:
# Path to Puma SOCK file, as defined previously
server unix:/var/www/shared/sockets/puma.sock fail_timeout=0;
}
server {
listen 80;
server_name [domínio];
root /var/www/[rails_app]/public;
try_files $uri/index.html $uri @app;
location @app {
proxy_pass http://app;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
}
error_page 500 502 503 504 /500.html;
client_max_body_size 4G;
keepalive_timeout 10;
}
[Unit]Após configurarmos o sistema podemos iniciar o Puma com o comando
Description=Puma HTTP Server
After=network.target
# Uncomment for socket activation (see below)
# Requires=puma.socket
[Service]
# Foreground process (do not use --daemon in ExecStart or config.rb)
Type=simple
# Preferably configure a non-privileged user
User=www-data
Group=www-data
# Specify the path to your puma application root
WorkingDirectory=/var/www/[app]
# Helpful for debugging socket activation, etc.
# Environment=PUMA_DEBUG=1
# EnvironmentFile=/home/deployer/app/.env
# The command to start Puma
# ExecStart=/sbin/puma -b tcp://0.0.0.0:9292 -b ssl://0.0.0.0:9293?key=key.pem&cert=cert.pem
# ExecStart=/usr/local/bin/bundle exec --keep-file-descriptors puma -e production
ExecStart=/usr/local/bin/puma -C /var/www/[app]/config/puma.rb
Restart=always
[Install]
WantedBy=multi-user.target
systemctl start pumaDepois, para configurarmos o Puma para iniciar na inicialização do sistema, basta rodar o seguinte comando:
systemctl enable pumaPronto, os sistema já está configurado.
Lembrando que essa é uma configuração bem básica, e é interessante buscar mais opções para melhorar essa configuração.
Comentários