Introdução
Trabalho com o desenvolvimento de sistemas Web há 8 anos aproximadamente, e, chega um momento na sua vida em que as coisas devem ser feitas de maneiras diferentes, agilizar processos, parar de ‘camelar’ tanto.
Cenário de Desenvolvimento
Meu atual cenário de desenvolvimento é o seguinte:
- Servidor Local de Desenvolvimento, onde é realizado todo o processo de implementação e testes dos softwares que desenvolvemos; (servidor de desenvolvimento)
- n Servidores de produção que ficam ou em nosso parque de máquinas ou na infra estruturas próprias dos clientes. (servidor de produção)
Um dos meus maiores problemas era manter os códigos dos sistemas atualizados nos servidores de produção pois o processo era todo manual, sempre usávamos ftp, sftp, ssh, fish, já mandamos arquivo até pelo correio (brincadeira mas serai legal né), o que acontecia frequentemente era esquecer de atualizar um arquivo e pronto lá se iam 30 minutos preciosos de minha vida, que por sinal está cada dia mais curta, vejo isso em meus fios de cabelos antes louros e lépidos agora brancos e caquéticos!
O Rsync me salvou!
Em fim cansado de tudo isso resolvi meus problemas de sincronização de arquivos utilizando uma única ferramenta chamda rsync.
Vou parafraseando o site oficial da ferramenta:
rsync is an open source utility that provides fast incremental file transfer. rsync is freely available under the GNU General Public License and is currently being maintained by Wayne Davison.
No nosso caso ele serve como uma luva pois olha o que o danadinho consegue fazer:
- Listar todos os arquivos do servidor de desenvolvimento que estejam diferentes do servidor de produção;
- Enviar todos estes arquivos de maneira rápida e segura e transparente lol (fecho o barraco pra balanço).
Agora como fazer tudo isso, bom como pré-requisitos é necessário que a ferramenta rsync esteja instalado tanto no seu servidor de desenvolvimento quanto no seu servidor de produção, depois disso o processo é bem simples:
Listando os Arquivos Diferentes
rsync -rnvC pasta_local/./* usuario@ip_do_servidor:path_servidor
Os parâmetros são:
- r : recursivo
- n: apenas lista os arquivos (não transfere nada)
- v: verbose (lista o que está acontecendo)
- C: isso aqui é para você impedir que os arquivos gerados pelas ferramentas de controle de versão, SVN ou CVS por exemplo. sejam enviados para o servidor de produção.
Sincronizar as Coisas
rsync -tavC pasta_local/./* usuario@ip_do_servidor:path_servidor
Os parâmetros são:
- t: transferência de dados;
- a: atalho para ‘-rlptgoD.
Mantendo Alguns Arquivos Desincronizados!
Uma coisa que acontece muito é que alguns arquivos não devem ser sincroinzados, em geral são arquivos de configuração onde estão armazenadas senhas e caminhos, para isso utilize o parâmetro –exclude-from=arquivo.txt, dentro do arquivo.txt você faz algo parecido com isso:
– config.php
– modulo/ged/arquivos/*
– backup/*
– templates/templates_c/*.tpl.php
O sinal de – indica que você NÂO quer sincronizar o arquivo, você pode usar coringas para facilitar um pouco as coisas.
Conclusão
Meu amigo alexandre diz:
– Se tá funcionando não mexe
O problema é quanto TEM que mexer, é nessas horas que um bom controle de versão e uma ferramenta de deploy ajudam bastante.
Bibliografia
[…] postei anteriormente sobre como “fazer deploy” de uma aplicação PHP utilizando o RSYNC. Pois bem, venho hoje apresentar uma “nova” ferramenta que te mostra a diferença entre […]
Muito boa a dica, era exatamente o que eu estava procurando e com certeza tem muita gente que procura uma ferramenta para atualização de sistemas Web.