Deploy com Git — Configurando e executando um deploy automatizado

Wesley Serafim de Araújo
agits
Published in
5 min readMay 2, 2016

A ideia aqui nesse post é mostrar um passo a passo de como configurar um deploy automatizado usando somente o Git, é um procedimento bem simples e que irá melhorar muito seu processo de deploy. Embora saiba que existe diversas ferramentas especializada para tal finalidade como Capstrano e o próprio Deployer (para PHP), o git ainda me ajuda bastante na realização desse processo.

Então vamos lá, a primeira coisa a se fazer é acessar o seu servidor remotamente via ssh (Sim, você vai precisar de acesso ssh), sendo assim faça o acesso, no meu exemplo estou fazendo essa configuração num servidor caseiro que tenho aqui em uma Raspberry Pi 3, e estou utilizando o sistema operacional Raspbian Jessie baseado em Debian, mas uma vez tendo o git instalado no servidor os passos que serão mostrado aqui servirão para qualquer distribuição Linux. Então tenha em mente que vai precisar instalar o git no servidor.

Uma vez logado no servidor, você deve navegar até a pasta raiz do seu projeto (Document Root), no meu caso, está localizado em /var/www/html/exemplodeploy/

Até o momento não tenho nada nesse diretório, ele está completamente vazio, nesse diretório eu vou criar uma pasta que eu gosto de nomear sempre como app.git, crie esse diretório e entre nele usando o comando:
mkdir app.git && cd app.git

Uma vez dentro do diretório app.git, executamos o comando git init — bare esse comando irá inicializar um repositório mínimo do Git, digo mínimo porque ele não possui todas as funcionalidades do Git, por exemplo, não será possível executar comandos como push e pull nele, a única e exclusiva funcionalidade desse repositório é receber os push do seu ambiente de desenvolvimento e manter sua aplicação atualizada com segurança no servidor.

Ok, até aqui já temos boa parte do trabalho pronta, o que vamos fazer agora é criar um arquivo chamado post-receive dentro do diretório hooks, então execute o comando nano hooks/post-receive.

Veja no exemplo como fica o script, repare que o GIT_WORK_TREE é o local onde seu site/app ficará armazenado, seguido do comando git checkout -f

Um detalhe muito importante é que na primeira linha do post-receive deve ter o comentário #!/bin/sh para que esse arquivo seja executado corretamente. Ao preencher o post-receive como indica a imagem salve o documento com o atalho CTRL+o e em seguida para sair CTRL+x.

Explicando de forma simples o que ocorre e o papel do hook post-receive, é que esse post-receive trabalha como um espece observer e atua sempre que um novo post é recebido no diretório app.git, então sempre que você executar o comando git push deploy master (jajá vamos configurar isso), o post-receive vai pegar os arquivos e enviar para o diretório indicado no GIT_WORK_TREE e checar esse cara como versão atual a se trabalhar, vale lembrar que um repositório do tipo — bare não guarda as versões, por isso que se deve trabalhar com Github ou Bitbucket para fazer o versionamente, o repositório que criamos no servidor só é responsável em manter atualizado a ultima versão que é enviada pra ele.
Geralmente eu deixo o remote origin para o Bitbucket/Github e crio o remote deploy para fazer deploy pro servidor, em caso que tenho diferentes servidores (stage e prod), eu uso remote deploy-stage e o deploy é sempre o produção, esses nomes podem mudar de acordo com sua necessidade e costume. Antes de fechar essa parte no servidor precisamos dar permissão de execução para o hook que criamos, então fazemos isso usando o comando:

sudo chmod +x hook/post-receive.

OK, a acabamos a parte do servidor, agora vamos para nosso ambiente local na qual estamos desenvolvendo. Navegue até o diretório do seu projeto e caso ainda não tenha iniciado um repositório git nele faça (git init), uma vez já com o git iniciado no projeto precisamos adicionar uma indicação remote nele, para isso use o comando abaixo (tudo na mesma linha) como se faz quando vamos adicionar o origin (Github/Bitbucket):

git remote add deploy usuario@dominio:/var/www/html/exemploydeploy/app.git

Uma vez isso feito basta fazer seu commit pro servidor da mesma forma que faz para Github, apenas substituindo origin por deploy e sempre indicando o branch master. Note que antes eu dei ls no servidor e não tem nada além do app.git no diretório principal do projeto.

git add .
git commit -am “Commitando as alterações par ao servidor”
git push deploy master

Veja na imagem acima os arquivos já publicados no servidor de forma simples, rápida e segura.

Como esse push/deploy pro repositório do tipo — bare só é permitido usando o branch master, sempre se trabalhar com outros branchs é importante fazer o merge com o master antes de realizar o deploy.

Eu ainda utilizo esse procedimento para fazer deploy das minhas aplicações, em alguns casos já usei o Capstrano que é um pouquinho mais trabalhoso para configurar mas é uma ótima ferramenta.

Espero ter ajudado e até a próxima.

--

--

Wesley Serafim de Araújo
agits
Editor for

Web Developer de paixão, cientificamente curioso e viciado em cafeína (mas não tomo café).