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 11:59]
1891982 [Adicionando configuração de deploy na aplicação]
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 208: Linha 212:
  
 # Adittional plugins # Adittional plugins
-require "capistrano/rvm"+require 'capistrano/rails'
 require "capistrano/bundler" require "capistrano/bundler"
 +require "capistrano/rvm"
 +require "capistrano/puma"
 +install_plugin Capistrano::Puma  # Default puma tasks
 +install_plugin Capistrano::Puma::Workers  # if you want to control the workers (in cluster mode)
 require "capistrano/rails/assets" require "capistrano/rails/assets"
 require "capistrano/rails/migrations" require "capistrano/rails/migrations"
-require "capistrano/puma"+require 'capistrano/sidekiq' 
 +require 'capistrano/sidekiq/monit' 
  
 # Load custom tasks from `lib/capistrano/tasks` if you have any defined # Load custom tasks from `lib/capistrano/tasks` if you have any defined
Linha 259: 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 292: 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 309: 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 319: 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 379: 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 491: 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 614: 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)