linux:rails_with_puma_deploy

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.

Link para esta página de comparações

Ambos lados da revisão anterior Revisão anterior
Próxima revisão
Revisão anterior
Próxima revisão Ambos lados da revisão seguinte
linux:rails_with_puma_deploy [2017/06/13 13:54]
1891982 [Deploy inicial da estrutura (criação da estrutura de diretórios inicial)]
linux:rails_with_puma_deploy [2017/09/20 09:53]
1891982 [Configurando SSL (opcional)]
Linha 124: Linha 124:
  
 <code> <code>
-command curl -sSL https://rvm.io/mpapis.asc | gpg --import -+curl -sSL https://rvm.io/mpapis.asc | gpg --import -
 </code> </code>
  
Linha 148: Linha 148:
  
 <code> <code>
-$ sudo apt-get install libpq-dev imagemagick git-core+$ sudo apt-get install libpq-dev imagemagick git-core redis-server
 </code> </code>
  
Linha 154: Linha 154:
  
 Crie o Banco de Dados do Sistema no Postgresql Crie o Banco de Dados do Sistema no Postgresql
 +
 +Caso queira configura o Postgresql na mesma máquina do sistema, siga esse tutorial clicando
 +[[https://www.digitalocean.com/community/tutorials/como-instalar-e-utilizar-o-postgresql-no-ubuntu-16-04-pt|aqui]].
 +
  
  
Linha 265: Linha 269:
         exit         exit
       end       end
-    end 
-  end 
- 
-  desc 'Initial Deploy' 
-  task :initial do 
-    on roles(:app) do 
-      before 'deploy:restart', 'puma:start' 
-      invoke 'deploy' 
-      sudo "ln -nfs #{release_path}/config/puma_init.sh /etc/init.d/puma_#{fetch(:application)}" 
-      sudo "ln -nfs #{release_path}/config/puma.rb.example #{shared_path}/puma.rb" 
     end     end
   end   end
Linha 298: Linha 292:
   end   end
  
-  desc "Instalando crontab" 
-  task :install_crontab do 
-    on roles(:app) do 
-      run "cd #{release_path} && bundle exec whenever --update-crontab #{fetch(:application)}" 
-    end 
-  end 
- 
-  after "deploy:initial", :install_crontab 
   after "deploy:migrating", :populate_db   after "deploy:migrating", :populate_db
   after  "symlink:linked_dirs",  :config_symlink   after  "symlink:linked_dirs",  :config_symlink
Linha 315: Linha 301:
 </code> </code>
  
-Crie o arquivo config/nginx.conf e utilize o conteúdo abaixo (substitua os a localização da aplicação):+Crie o arquivo config/nginx.conf e utilize o conteúdo abaixo (substitua o caminho da aplicação no arquivo abaixo pelo caminho da sua app):
  
 <code> <code>
 upstream puma { upstream puma {
-  server unix:///home/deploy/apps/appname/shared/tmp/sockets/appname-puma.sock;+  server unix:///mnt/apps/appname/shared/tmp/sockets/appname-puma.sock;
 } }
  
Linha 325: Linha 311:
   listen 80 default_server deferred;   listen 80 default_server deferred;
  
-  root /home/deploy/apps/appname/current/public; +  root /mnt/apps/appname/current/public; 
-  access_log /home/deploy/apps/appname/current/log/nginx.access.log; +  access_log /mnt/apps/appname/current/log/nginx.access.log; 
-  error_log /home/deploy/apps/appname/current/log/nginx.error.log info;+  error_log /mnt/apps/appname/current/log/nginx.error.log info;
  
   location ^~ /assets/ {   location ^~ /assets/ {
Linha 385: Linha 371:
 </code> </code>
  
-Crie o arquivo config/puma__init.sh com o seguinte conteúdo, substituindo <app_name> pelo nome da sua app:+Crie o arquivo config/puma__init.sh com o seguinte conteúdo, substituindo <app_name> pelo nome da sua app e <user_name> pelo usuário que será utilizado para fazer o deploy da aplicação (deve ser o mesmo usuário que você faz ssh no servidor):
  
  
Linha 496: Linha 482:
 git commit -m "Configuração de deploy com capistrano" git commit -m "Configuração de deploy com capistrano"
 git push origin master git push origin master
 +</code>
 +
 +Execute o deploy inicial que irá criar a estrutura de diretórios do capistrano
 +
 +<code>
 +cap production deploy
 </code> </code>
  
Linha 502: Linha 494:
 <code> <code>
 mkdir /mnt/apps/<app_name>/shared/config mkdir /mnt/apps/<app_name>/shared/config
 +cd /mnt/apps/<app_name>/shared/config
 touch database.yml touch database.yml
 touch secrets.yml touch secrets.yml
Linha 513: Linha 506:
 mkdir /mnt/apps/<app_name>/shared/tmp/pids mkdir /mnt/apps/<app_name>/shared/tmp/pids
 </code> </code>
- 
-Execute o deploy inicial que irá criar a estrutura de diretórios do capistrano 
- 
-<code> 
-cap production deploy:initial 
-</code> 
- 
  
 <fc #ff0000> <fc #ff0000>
Linha 634: Linha 620:
 </code> </code>
  
 +* Configurando logrotate para rotacionar os logs da aplicação. Coloque o seguinte código no arquivo: /etc/logrotate.d/<app_name>
 +
 +<code>
 +/mnt/apps/<app_name>/shared/log/*.log {
 +  daily
 +  nomissingok
 +  rotate 7
 +  compress
 +  delaycompress
 +  notifempty
 +  copytruncate
 +}
 +</code>
 +
 +==== Configurando SSL (opcional) ====
 +
 +* Crie o arquivo .key, trocando <seu_dominio> pelo domínio da sua aplicação (Pode ser executado da sua máquina local)
 +
 +<code>
 +openssl genrsa -des3 -out <seu_dominio>.orig.key 2048
 +</code>
 +
 +* Remova a senha da .key, trocando <seu_dominio> pelo domínio da sua aplicação (Pode ser executado da sua máquina local)
 +
 +<code>
 +openssl rsa -in <seu_dominio>.orig.key -out server.key
 +</code>
 +
 +* Crie o arquivo .csr, trocando <seu_dominio> pelo domínio da sua aplicação (Pode ser executado da sua máquina local)
 +
 +<code>
 +openssl req -new -key <seu_dominio>.key -out <seu_dominio>.csr
 +</code>
 +
 +* Envie o arquivo .key e .csr para a geração do certificado. Após o certificado ser emitido, crie o arquivo: <seu_dominio>.crt
 +
 +* Crie a o diretório certs dentro da raiz do seu projeto rails:
 +
 +<code>
 +mkdir certs
 +</code>
 +
 +* Copie os arquivos .key e .crt do certificado para esse diretório recém-criado
 +
 +<code>
 +cp www.seu-dominio.ifce.edu.br.key certs
 +cp www.seu-dominio.ifce.edu.br.crt certs
 +</code>
 +
 +* Troque a configuração do nginx em config/nginx.conf para usar essa nova configuração que suporta ssl, trocando <app_name> pelo nome da sua app:
 +
 +<code>
 +upstream puma {
 +  server unix:///mnt/apps/<app_name>/shared/tmp/sockets/<app_name>-puma.sock;
 +}
 +
 +# for redirecting to https version of the site
 +server {
 +  listen 80;
 +  rewrite ^(.*) https://$host$1 permanent;
 +}
 +
 +# for redirecting to non-www version of the site
 +server {
 +  listen  80;
 +  server_name  www.<app_name>.ifce.edu.br;
 +  rewrite ^(.*) http://<app_name>.ifce.edu.br$1 permanent;
 +}
 +
 +server {
 +  listen  443 default ssl;
 +  server_name <app_name>.ifce.edu.br;
 +  root /mnt/apps/<app_name>/current/public;
 +
 +  ssl on;
 +  ssl_certificate /mnt/apps/<app_name>/current/certs/www.<app_name>.ifce.edu.br.crt;
 +  ssl_certificate_key /mnt/apps/<app_name>/current/certs/www.<app_name>.ifce.edu.br.key;
 +
 +  ssl_session_timeout  5m;
 +
 +  # modern configuration. tweak to your needs.
 +  ssl_protocols TLSv1.2;
 +  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';
 +  ssl_prefer_server_ciphers on;
 +
 +  location ^~ /assets/ {
 +    gzip_static on;
 +    expires max;
 +    add_header Cache-Control public;
 +  }
 +
 +  try_files $uri/index.html $uri @puma;
 +  location @puma {
 +    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 +    proxy_set_header Host $host;
 +    proxy_set_header X-Forwarded-Proto https;
 +    proxy_redirect off;
 +    proxy_pass http://puma;
 +  }
 +
 +  error_page 500 502 503 504 /500.html;
 +  client_max_body_size 10M;
 +  keepalive_timeout 10;
 +}
 +</code>
 +
 +* Modifique a configuração do config/environments/production.rb e adicione a seguinte linha:
 +
 +<code>
 +config.force_ssl = true
 +</code>
 +
 +* Modifique a configuração do enviroment de produção da sua app, provavelmente o config/enviroments/production.rb. Adicione ou modifique as duas linhas conforme abaixo para ficarem com https ao invés de http
 +
 +<code>
 +config.action_mailer.default_url_options = { host: 'https://<seu_dominio>' }
 +config.action_mailer.asset_host = "https://<seu_dominio>"
 +</code>
 +
 +* Agora comite tudo e faça um novo deploy
 +
 +<code>
 +git add -A .
 +git commit -m "Adicionando suporte a ssl"
 +git push origin master
 +cap production deploy
 +</code>
 +
 +* Após o deploy terminar logue no servidor via ssh e reinicie o nginx:
 +
 +<code>
 +sudo service nginx restart
 +</code>
 +
 +* PRONTO! Sua app já deve responder via https://seu-dominio.ifce.edu.br bem como redirecionar o tráfego http para https.
  • linux/rails_with_puma_deploy.txt
  • Última modificação: 2021/08/25 10:33
  • (edição externa)