Eu faço deploy usando mina e docker e na frente do servidor da aplicação eu coloco Cloudflare e nginx.

Eu ainda uso nginx pois, primeiro, que o nginx é melhor na tarefa de servir conteúdo estático e, segundo, que se eu algum dia precisar colocar mais de um servidor é mais fácil configurar do que instalar e configurar.

O nginx é tão fácil de instalar que eu prefiro instalar usando apt (Um dia vou saber o porquê de se usar nginx dentro do docker ou do docker-compose, se você sabe por favor me diga 😐):

# apt install nginx

Eu também sigo o jeito Debian (ou jeito Ubuntu), crie um arquivo: /etc/nginx/sites-available/mywebsite.com:

upstream backend {
  server 127.0.0.1:5001;
}

server {
  listen 80;

  root /mywebsite/current/public;

  server_name mywebsite.com www.mywebsite.com;

  if (-f $document_root/503.html) {
      return 503;
  }
  error_page 503 @maintenance;
  location @maintenance {
      rewrite ^(.*)$ /503.html break;
  }

  location ~ / {
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_redirect off;
          try_files $uri @app;
  }

  location @app {
          charset utf8;
          source_charset utf8;
          proxy_set_header X-Real-IP $remote_addr;
          proxy_set_header Host $host;
          proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
          proxy_redirect off;
          proxy_pass http://backend;
  }
}

E crie o link:

ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/myapp

O arquivo de configuração é bem fácil de entender:

  • O puma tá rodando na mesma máquina 127.0.0.1 na porta 5001
  • A raiz do servidor é em /mywebsite/current e o diretório public fica em /mywebsite/current/public, não esqueça que você tem que apontar para o diretório public mesmo que você não use o mina para fazer deploy
  • Se o diretório public tiver um arquivo 503.html o nginx vai retornar uma página de manutenção
  • proxy_pass tem que apontar para o upstream e
  • O upstream backend é a lista de servidores que você tem
  • Os outros proxy são para passar o endereço ip real da requisição adiante

Eu não mudo nada mais com o nginx, lembre-se que eu uso Cloudflare para proteção DDoS e SSL.

Você também pode querer configurar o seu servidor para somente aceitar conexão dos servidores do Cloudflare (os endereçoes ip estão aqui: IP Ranges).