Hoje vou mostrar pra vocês como é extramente simples realizar deploys de sites de forma segura, fail-safe e rápida utilizando Git com alguns poucos comandos na linha de comando.
Este artigo é uma “tradução” (com algumas modificações) do artigo “Using Git to manage a web site”, escrito por Abhijit Menon-Sen. Estou apenas trazendo a idéia geral do autor e explicando o passo-a-passo com o meu ponto de vista.
Não vou entrar no mérito de explicar o conceito de repositórios distribuídos ou as vantagens do Git. Pra quem não conhece a ferramenta, recomendo: esse post e esse screencast (vale o preço).
Repositório local
Se você já possui um repositório local, pule para o pŕoximo passo.
Tudo começa com a criação de um repositório Git simples:
Agora que seu repositório local está pronto, o index.html foi criado e o primeiro commit feito, vamos criar o repositório remoto no ambiente de produção (servidor onde o site está/vai rodar).
Repositório remoto
Partindo do princípio que o seu site vai rodar em um servidor que você possui acesso SSH facilitado, vamos criar o repositório lá que será uma cópia do servidor local:
Agora começa a parte interessante.. Você acabou de criar um repositório bare!
Um repositório bare é um repositório que tem apenas os arquivos versionados, mas não inclui a pasta .git e todos os arquivos de informações e configurações do repositório. Não é um working copy directory.
Agora vamos começar a criar o git-hook que será responsável por copiar todos os arquivos - do repositório bare - para a pasta onde o site vai rodar, no ambiente de produção:
O git-hook post-receive será ativado sempre que o seu repositório receber atualizações (que você enviará da sua máquina) e executará os commandos que você definiu.
Veja que primeiro definimos a variável de ambiente GIT_WORK_TREE como a raíz do site e depois executamos um git checkout -f
que irá mover os arquivos sem nenhum vestígio do seu repositório Git.
Agora é só voltar para a sua máquina e adicionar o repositório remoto:
Esses dois comandos irão adicionar o repositório externo ao repositório local e enviar os arquivos locais para o servidor.
Após os dois comandos o servidor vai conter uma cópia dos arquivos locais.
Atualizando os arquivos
À medida que você for trabalhando no site e quiser atualizar o servidor no ar, é so rodar o comando (após fazer o commit):
Isso irá enviar as modificações feitas para o repositório remoto.
Finalizando…
Agora você consegue atualizar o seu site no servidor de produção sem abrir FTP, sem abrir arquivos ou arrastar pastas pelo cliente de FTP… Sem nem abrir o SSH e fazer algo parecido.
É só rodar o git push web
e tá tudo certo! :)