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
linux:rails_with_puma_deploy [2017/06/13 12:51]
1891982 [Adicionando configuração de deploy na aplicação]
linux:rails_with_puma_deploy [2021/08/25 10:33] (atual)
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 497: Linha 483:
 git push origin master git push origin master
 </code> </code>
- 
-Crie o diretório /mnt/apps/<app_name>/shared/config, com os arquivos database.yml e secrets.yml. E coloque o conteúdo correto em cada um dos arquivos. 
  
 Execute o deploy inicial que irá criar a estrutura de diretórios do capistrano Execute o deploy inicial que irá criar a estrutura de diretórios do capistrano
  
 <code> <code>
-cap production deploy:initial+cap production deploy
 </code> </code>
  
 +Crie o diretório /mnt/apps/<app_name>/shared/config, com os arquivos database.yml e secrets.yml. E coloque o conteúdo correto em cada um dos arquivos.
 +
 +<code>
 +mkdir /mnt/apps/<app_name>/shared/config
 +cd /mnt/apps/<app_name>/shared/config
 +touch database.yml
 +touch secrets.yml
 +</code>
 +
 +Crie o diretório tmp e tmp/sockets
 +
 +<code>
 +mkdir /mnt/apps/<app_name>/shared/tmp
 +mkdir /mnt/apps/<app_name>/shared/tmp/sockets
 +mkdir /mnt/apps/<app_name>/shared/tmp/pids
 +</code>
  
 <fc #ff0000> <fc #ff0000>
Linha 620: 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>.key 2048
 +</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>
 +
 +* 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>
 +
 +* 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.1497369104.txt.gz
  • Última modificação: 2021/08/25 10:33
  • (edição externa)