deploy de aplicações ruby com mina - tdc floripa 2014
DESCRIPTION
Apresentação da ferramenta mina, utilizada para realizar o deploy de aplicações Ruby.TRANSCRIPT
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
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