Deploy de aplicações
Ruby com Mina
Ismael Stahelin
TDC Floripa 2014
1
Sobre
• Web developer (back and front-end)
• Atualmente na Celtec Rastreamento Ltda
• Desenvolvemos software de rastreamento de
veículos, cargas, etc.
• Usamos: Ruby, Rails, Postgres, Backbone.js,
Google Maps API, Redis, ...
• Estamos contratando :)
2
Sem mais demora...
3
Os 4 passos para o deploy
1. Criar o arquivo config/deploy.rb
2. Definir servidor, repositório, branch, etc.
3. Executar "mina setup" (somente 1 vez)
4. Executar "mina deploy"
4
Agora vamos aos
detalhes...
5
O que é Mina?
• Ferramenta de deploy (implantação)
• Usada também para automatizar a administração
do servidor
• É "rake based"
6
E o que é "rake based"?
• Fluxo de trabalho baseado em tarefas
• Pode seguir o fluxo ou executar tarefas específicas
(é aqui que entra a parte de automação do
servidor)
• Você conta com safe deploys
7
Um exemplo de tarefa
8
O que são safe deploys?
• Nada é alterado no servidor até que o build atual
seja concluído sem erros
• Você pode manter várias versões no servidor e
isso é configurável no seu deploy.rb
• Possui deploy locks para a sua proteção
9
O que são deploy locks?
• Controla os deploys baseado em lock files
• Deploy só inicia se conseguir pegar o lock file
• Garante que apenas 1 deploy ocorre a cada
momento (para cada aplicativo)
10
Parece ótimo mesmo, e
como eu uso essa
maravilha?
11
Usando o mina
• Instale via "gem install mina" ou via bundler com
"gem 'mina'" no seu group :development
• Inicialize em seu projeto com "mina init"
• Ajuste seu arquivo config/deploy.rb
12
Exemplo completo de
deploy.rb
https://gist.github.com/ismaels/
c72bb805ff91a5cab242
13
Entendo o mina init
• Cria um diretório config se não exisitr
• Cria um arquivo deploy.rb nesse diretório
• Esse arquivo possui todas as configurações para o
deploy da sua aplicação
14
Um exemplo...
Quase ao vivo
http://youtu.be/2R-RZfmjAlk
15
Olhando o deploy.rb de
perto
• É um rake file disfarçado :)
• Pode possuir quantas tasks forem necessárias,
mas possui 3 seções principais
• Definições, Ambiente e Deploy
16
Principais seções
17
Mina setup
• Precisa ser executado apenas 1 vez
• Cria a estrutura de diretórios no servidor para
implantar a aplicação
• Pode ser customizado no deploy.rb
18
Estrutura de diretórios no
servidor
19
Mina deploy
• Cria um diretório temporário para fazer o build do
projeto (tudo que está no bloco deploy)
• Move o diretório de build para releases
• Cria um link simbólico para current
• Executa o bloco "to :launch"
20
E se acontecer algum erro?
• Caso isso aconteça o link para o release path será
apagado (mas não a pasta da versão dentro de
releases)
• O bloco "to :clean" será executado caso tenho
sido definido
• Importante apagar ou mover a versão quebrada
que ficou no releases (você não vai querer ter no seu
histórico de versões uma que pode não funcionar)
21
Tips & Tricks (1)
• Certifique-se que o usuário de deploy possui
acesso de leitura e escrita nos diretórios
• Se precisar alterar a estrutura do server, melhor
apagar e começar do zero novamente
• Não esqueça de adicionar a chave ssh do seu
repositório no servidor antes de rodar mina deploy
22
Tips & Tricks (2)
• Você pode ter vários arquivos de deploy.rb (o
nome não importa)
• Use o parâmetro -f para indicar um arquivo com
nome diferente de deploy.rb ou em localização
diferente
• Use os parâmetros -v e -t para ter mais detalhes
da execução remota
23
Obrigado
stahelin.ismael@gmail.com
http://ismaelstahelin.com
http://github.com/ismaels
@ismaels
24

Deploy de aplicações Ruby com Mina - TDC Floripa 2014

  • 1.
    Deploy de aplicações Rubycom Mina Ismael Stahelin TDC Floripa 2014 1
  • 2.
    Sobre • Web developer(back and front-end) • Atualmente na Celtec Rastreamento Ltda • Desenvolvemos software de rastreamento de veículos, cargas, etc. • Usamos: Ruby, Rails, Postgres, Backbone.js, Google Maps API, Redis, ... • Estamos contratando :) 2
  • 3.
  • 4.
    Os 4 passospara o deploy 1. Criar o arquivo config/deploy.rb 2. Definir servidor, repositório, branch, etc. 3. Executar "mina setup" (somente 1 vez) 4. Executar "mina deploy" 4
  • 5.
  • 6.
    O que éMina? • Ferramenta de deploy (implantação) • Usada também para automatizar a administração do servidor • É "rake based" 6
  • 7.
    E o queé "rake based"? • Fluxo de trabalho baseado em tarefas • Pode seguir o fluxo ou executar tarefas específicas (é aqui que entra a parte de automação do servidor) • Você conta com safe deploys 7
  • 8.
    Um exemplo detarefa 8
  • 9.
    O que sãosafe deploys? • Nada é alterado no servidor até que o build atual seja concluído sem erros • Você pode manter várias versões no servidor e isso é configurável no seu deploy.rb • Possui deploy locks para a sua proteção 9
  • 10.
    O que sãodeploy locks? • Controla os deploys baseado em lock files • Deploy só inicia se conseguir pegar o lock file • Garante que apenas 1 deploy ocorre a cada momento (para cada aplicativo) 10
  • 11.
    Parece ótimo mesmo,e como eu uso essa maravilha? 11
  • 12.
    Usando o mina •Instale via "gem install mina" ou via bundler com "gem 'mina'" no seu group :development • Inicialize em seu projeto com "mina init" • Ajuste seu arquivo config/deploy.rb 12
  • 13.
  • 14.
    Entendo o minainit • Cria um diretório config se não exisitr • Cria um arquivo deploy.rb nesse diretório • Esse arquivo possui todas as configurações para o deploy da sua aplicação 14
  • 15.
    Um exemplo... Quase aovivo http://youtu.be/2R-RZfmjAlk 15
  • 16.
    Olhando o deploy.rbde perto • É um rake file disfarçado :) • Pode possuir quantas tasks forem necessárias, mas possui 3 seções principais • Definições, Ambiente e Deploy 16
  • 17.
  • 18.
    Mina setup • Precisaser executado apenas 1 vez • Cria a estrutura de diretórios no servidor para implantar a aplicação • Pode ser customizado no deploy.rb 18
  • 19.
  • 20.
    Mina deploy • Criaum diretório temporário para fazer o build do projeto (tudo que está no bloco deploy) • Move o diretório de build para releases • Cria um link simbólico para current • Executa o bloco "to :launch" 20
  • 21.
    E se aconteceralgum erro? • Caso isso aconteça o link para o release path será apagado (mas não a pasta da versão dentro de releases) • O bloco "to :clean" será executado caso tenho sido definido • Importante apagar ou mover a versão quebrada que ficou no releases (você não vai querer ter no seu histórico de versões uma que pode não funcionar) 21
  • 22.
    Tips & Tricks(1) • Certifique-se que o usuário de deploy possui acesso de leitura e escrita nos diretórios • Se precisar alterar a estrutura do server, melhor apagar e começar do zero novamente • Não esqueça de adicionar a chave ssh do seu repositório no servidor antes de rodar mina deploy 22
  • 23.
    Tips & Tricks(2) • Você pode ter vários arquivos de deploy.rb (o nome não importa) • Use o parâmetro -f para indicar um arquivo com nome diferente de deploy.rb ou em localização diferente • Use os parâmetros -v e -t para ter mais detalhes da execução remota 23
  • 24.