segunda-feira, 6 de agosto de 2012

Deploy automatizado com GIT

Procurando um jeito de automatizar a atualização do servidor de produção usando GIT, me deparei com os seguintes artigos que me ajudaram a fazer esse resumo: artigo de Akita, artigo de Thiago Belém, artigo de Abhijit Menon-Sen e artigo de Daniel Miesser. Resumi e modifiquei ligeiramente para meu próprio entendimento posterior e escrevi esse guia-lembrete. Notar que a minha configuração de ambiente é um Windows 7 como máquina local, um programa de SSH disponível (uso o GIT for Windows, mas pode ser o Putty), servidor remoto Linux hospedado no Uol Host. Mas deixemos de conversa e vamos pros comandos!

Criação de um repositório git vazio no servidor usando SSH:
mkdir home/meu_usuario/repos/meu_projeto.git
cd home/meu_usuario/repos/meu_projeto.git
git init --bare
 
Adicionando na máquina local o novo repositório remoto: 
cd meu_projeto
git remote add origin ssh://meu_usuario@meu_dominio/home/meu_usuario/repos/meu_projeto.git 
 
Ou com um outro nome diferente de origin:
cd meu_projeto
git remote add nome ssh://meu_usuario@meu_dominio/home/meu_usuario/repos/meu_projeto.git 
 
Escrevendo o git-hook responsável pela atualização:
cd ~/repos/meu_projeto.git/hooks
nano post-receive
#!/bin/sh
GIT_WORK_TREE=/home/meu_usuario/meu_projeto git checkout -f
(crtl+X para salvar)
chmod +x post-receive  
 

Dando o primeiro push:
git push nome +master:refs/heads/master
 
Remoção de um repositório remoto:
git remote rm nome

Configurando SSH no UolHost com GIT

Usando o GIT para Windows (link aqui), consegui configurar meu acesso automático ao SSH do meu servidor no UolHost. Usando um tutorial próprio do UolHost e alguns comando aprendidos num curso de administração em redes usando Linux, cheguei a esses passos para a configuração (lembrando que usei como prompt o Git for Windows e estou rodando no Windows 7). E vamos ao que interessa!

No cliente, usar a linha de comando para gerar a chave:
ssh-keygen -t dsa

É interessante notar que, caso modifique o nome do arquivo, a chave será salva na pasta na qual foi executado o comando. É recomendável deixar o nome padrão que acompanha a recomendação, no caso id_dsa. No fim da execução desse comando, dois arquivos deverão ter sido criados, preferencialmente no caminho padrão C:/Users/usuario/.ssh (no caso do Windows 7 - isso pode ser diferente a depender da versão do Windows utilizada), o arquivo id_dsa e id_dsa.pub, sendo o último a sua chave pública e que deverá ser compartilhada.

Antes do envio da chave, é necessário se logar via SSH e criar na pasta raiz do servidor a pasta .ssh, se esta não existir. Os comandos para isso são: 

Logar no servidor (a senha será pedida e no caso do UolHost é a mesma senha usada para FTP):
ssh usuario-servidor@servidor

Criação da pasta e configuração de permissão:
mkdir .ssh
chmod 700 .ssh

Sem estar logado no servidor, enviamos o arquivo id_dsa.pub do computador local para a pasta .ssh do servidor, neste caso usando SCP.

Envio da chave pública para o servidor via SCP:
scp ~/.ssh/id_dsa.pub usuario-servidor@servidor:/home/usuario-servidor/.ssh

Depois da transferência, logamos novamente no servidor e de lá executamos os seguintes comandos que correspondem na cópia do conteúdo do arquivo id_dsa.pub para o arquivo authorized_keys2 e configuração de permissão:
cd ~/.ssh
cat id_dsa.pub >> authorized_keys2
chmod 644 authorized_keys2

No caso o nome do arquivo deve ser authorized_keys2 por uma determinação do UolHost, segundo seu tutorial de configuração de chave pública do SSH, mas poderia ser somente authorized_keys em qualquer outro servidor Linux, a depender da configuração do mesmo. 

E pronto! Deslogue e logue via SSH e confirmará que não irá precisar digitar novamente a senha :)
É só.