Deploy Fácil Com Git

Já faz algum tempo que quando estou programando em PHP, mudei a forma de enviar meu código para o servidor de produção ou desenvolvimento.

Ficar usando FTP até mesmo plugins como o SFTP do Sublime Text 2 sempre foi bastante entendiante pra mim.

Pra quem ainda não viu nada sobre git o Akita tem este excelente screencast começando com git.

Aliás recomendo não somente este screencast como os outros que ele já fez sobre código e desenvolvimento de software.

Enviar seus arquivos versionados em git para um servidor remoto é extremamente simples, para fazer isso é necessário ter acesso ssh ao servidor.

Partindo da premissa de que seu servidor tem acesso SSH, crie um repositório bare no seu servidor.

$ mkdir ~/app.git && cd ~/app.git
$ git init --bare

Um repositório bare contém apenas os arquivos versionados, por exemplo não contém aquele diretório .git.

Configurando o git-hook

Os hooks do git são pequenos scripts acionados por eventos, por exemplo antes de realizar um commit (pre-commit) ou após realizar um commit (post-commit), o hook que utilizaremos é o post-receive que é disparado após realizarmos um push completo no servidor remoto.

$ cat > hooks/post-receive
#!/bin/sh
GIT_WORK_TREE=/home/danjesus/myapp git checkout -f

Dê um ctrl+c ou cmd+c para fechar o arquivo e aplique a permissão de escrita.

$ chmod +x hooks/post-receive

O valor que foi setado para a variável GIT_WORK_TREE é o caminho da sua app no servidor.

Finalizando

Pra finalizar agora é só adicionar o repositório remoto e fazer um push.

$ git remote add deploy ssh://danjesus@danjesus.com/home/app.git
$ git push deploy master

Pronto, agora toda vez que você fizer um push para o seu servidor as atualizacões serão refletidas automaticamente na sua app.

Notas

O Thiago Belem tem um excelente tutorial sobre deploy e ssh.

Pra quem usa heroku, bitbucket ou github, existe um excelente projeto chamado Deploy Button, que vale a pena dar uma olhada, depois vou postar um tuto aqui de exemplo, mesmo sendo extremamente simples:D

Referências e dicas

Comments