Pular para o conteúdo principal

Rails + Puma + Ngnix + Ubuntu

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
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
É 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:
\var\www\shared\pids
\var\www\shared\sockets
\var\www\shared\log
Depois, na configuração do site no Nginx no arquivo /etc/nginx/sites-enabled/default:
upstream app {
  # 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;
}
 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:
[Unit]
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
 Após configurarmos o sistema podemos iniciar o Puma com o comando
systemctl start puma
Depois, para configurarmos o Puma para iniciar na inicialização do sistema, basta rodar o seguinte comando:
systemctl enable puma
Pronto, 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

Postagens mais visitadas deste blog

Tutorial Bacula: Iniciando o serviço e operando o sistema

Chegamos a última parte do tutorial. Aqui vou falar sobre como iniciar o serviço e operar o servidor Bacula. Não veremos tudo, mas somente o essencial para que, a partir deste ponto, quem leu o tutorial possa configurar e operar o sistema, mesmo que basicamente. Então, mãos-à-obra. Para iniciarmos o sistema, os comando são: # bacula-dir # bacula-fd # bacula-sd que iniciam o Director Daemon, o File Daemon e o Storage Daemon respectivamente. Caso exista algum erro no arquivo de configuração, irá aparecer uma mensagem apontando qual o erro e o serviço não irá subir. Se for esse o caso, corrija os erros e execute o comando novamente. Se não exibiu mensagem de erro alguma, então o sistema deve estar no ar. Caso queira confirmar, digite o comando: # ps aux | grep bacula Esse comando exibirá todos os processos que estejam rodando e que contenham a sequência "bacula". Se tudo deu certo, vamos operar o sistema. Para operar o sistema, utilizamos o console do Bacula, no caso o bconsole....

Linux de bolso

Comecei a faculdade (ciência da computação, escolha meio obvia) esse ano e logo de cara fiquei sabendo que iriamos utilizar linux nos computadores da faculdade, o que achei muito bom. Mas chegando no laboratório de informática vi que estava instalado o CentOS , se não me engano é baseado no Red Hat Enterprise (e não Fedora, como tinha postado antes). Até ai tudo bem, nada contra em usar uma distribuição que não conheço, o problema foi quando percebi que o sistema estava da forma como foi instalado, sem nenhuma configuração extra. Primeiro percebi que a resolução estava em 800x600, e não havia como mudar a resolução para 1024x768, que julgo ser ideal de ser usada. Isso até que podia ser suportado, mas ao tentar usar meu pendrive ele não foi reconhecido automaticamente, ou pelo menos não foi montado automaticamente, e depois tentando monsta-lo manualmente, o sistema só dá permição para o root montar dispositivos, e a senha do root, como não podia ser diferente, não temos acesso. Com es...

Tutorial sobre Bacula

Conforme prometido irei postar aqui um tutorial sobre Bacula . Ou melhor, uma série de post que juntos se tornarão um tutorial mais completo. Decidi fazer dessa forma, dividindo em várias partes, pois o assunto é muito complexo e grande, e colocar tudo em um post só seria complicado. Quando terminar tentarei unir o tutorial em um só, e para ficar melhor gostaria de receber dicas, criticas, correções... nos comentários para fazer devidas alterações. Para começar, vamos a uma introdução sobre o que exatamente é o Bacula e suas principais funções. Essa parte já esta pronta, somente irei fazer correções e algumas alterações para melhora-lo, e, hoje ou no máximo amanhã, irei postar aqui. Mas antes de ler (ou depois de ler, você é quem decide), sugiro que leiam os seguintes links: Site oficial do Bacula Conceitos importantes sobre backup - É sobre um sistema de backup diferente, mas os conceitos são os mesmo do Bacula. Aqui você encontra o menu completo desse outro sistema de backup. Tut...