Fabric
Autor: @williamgouvea | Publicado: 2010-06-05T00:55:00-07:00


Em uma tarefa de deployment de uma aplicação em servidor LAMP  no estágio, eu e meu g gerente tivemos a idéia de usar o Fabric, ferramenta de deployment escrita em Python, opensource e que seria em tese o equivalente ao Capistrano para o Rails.

Resumindo, o Fabric é uma biblioteca Python e uma ferramenta de linha de comando para o  uso de SSH para a implantação do aplicativos ou administração de tarefas  de sistemas.




Ele fornece um conjunto básico de operações para executar comandos shell localmente ou remotamente (normalmente ou via sudo) e fazer o upload / download de arquivos, bem como funcionalidades auxiliares, tais como prompt de usuário que está executando para a entrada, ou abortar a execução.

Porem,  pesquisando sobre assunto, podemos ver poucos posts de blogs e informação disseminada sobre o assunto, em relação ao seu irmão do mundo Rails.

Vendo a documentação , podemos notar que o projeto ainda esta no começo(v0.9), e tem muito potencial, devido ao poder que o Python proporciona á ferramenta.

Basicamente você instala o Fabric no Ubuntu 9.10(Karmic)através do comando:



Automaticamente o Fabric já esta no seu $PYTHONPATH e com isso a proxima tarefa seria criar um arquivo fab da seguinte forma:



Dentro do fabfile.py você deve escrever suas tarefas em Python.Sendo assim dentro deste arquivo você pode mesclar ShellScript com codigo Python, solução matadora em ambiente Linux(Ubuntu).

Estando no mesmo diretorio do seu fabfile.py, você pode executar suas tarefas Fabric(metódos python) da seguinte forma:




No tutorial basico encontrado no site, existe um bom exemplo de um script simples para fazer um deployment e montar um pack com a aplicação alem de rodar os testes do Django.




Partindo desse script, a idéia era fazer o deployment de varios build's sucessivos, de forma incremental, baseado nos seguintes requesitos :
Tags do controle de versão , no caso, o Mercurial(HG)

Cobrir e rodar os testes da aplicação

package  com timestamp, versionando assim os releases

Deployment em varios servidores(staging, production)

Restart do Apache e do Memcached.

Alem disso, uma boa estrategia no caso de ocorrer algo de errado no deployment de uma versão, ou até na versão atual, seria uma função de rollback, como acontece no Capistrano que resgataria o server para uma versão estavel da aplicação.

Ao meu ver, qualquer tarefa administrativa pode ser executada de forma automatica usando o Fabric, mas claro, não existe bala de prata, e por isso devemos sempre colocar na balança os motivos e desvantagens de usar alguma tecnica.

Algumas coisas como gerenciar o firewall,  ou proteger de bruteforce attacks, seriam simples, bastando apenas a criação de  uma fab_task que manipula o iptables,ou usa alguma ferramenta como o UFW Uncomplicated Firewall.

Em soluções onde ocorrem grandes e as vezes devastadoras mudanças de DBschema, o uso do SOUTH para criar migrations é interessante, tornando as modificações do DB transacionais ,consistentes e claro ,menos doloridas.

O Fabric tambem pode ser alternativa para o deployment de  aplicações escritas em outras linguagens da plataforma LAMP, como:
Perl
PHP
Python
Erlang¹
Fanatismos á parte, deve se levar em conta  o fato de que no Rails e para o mundo Ruby ,já existe uma otima ferramenta, o Capistrano.

Fabric ao meu ver tem potencial para atuar como peça importante na pilha LAMP, sendo tambem  alternativa para automatização de tarefas em outras plataformas como Java² e PHP/MySQL.

Erlang¹: ver LYME stack, Linux/Yaws/Mnesia(CouchDB)/Erlang

Referencias:Fabric

Stack Solution

South