O que é o Fabric?
O Fabric é uma biblioteca Python que ajuda no gerenciamento de implantações em servidores. Ele foi criado originalmente para gerenciar implantações do Django, mas pode ser usado com outras estruturas de aplicativos da web, bem como com aplicativos da web personalizados.
O Fabric permite a execução de tarefas em vários servidores, o que torna o processo de implantação muito mais eficiente. Além disso, ele tem suporte integrado para SSH, o que significa que não é necessário instalar nenhum software adicional no servidor para usar o Fabric.
Como instalar o Fabric?
Para instalar o Fabric, você precisa ter o Python instalado primeiro. Você pode instalar o Fabric usando o pip, que é o gerenciador de pacotes do Python. Para instalar o Fabric, abra o terminal e digite o seguinte comando:
pip install fabric
Isso instalará o Fabric junto com suas dependências.
Como criar um arquivo de tarefas com o Fabric?
Para criar um arquivo de tarefas com o Fabric, crie um arquivo chamado “fabfile.py” na raiz do seu projeto. O arquivo “fabfile.py” deve conter funções que correspondem a cada tarefa que você deseja executar. Por exemplo, se você deseja executar a tarefa “deploy”, você pode criar uma função chamada “deploy” no arquivo fabfile.py:
from fabric.api import run
def deploy():
run("git pull")
run("npm install")
run("npm run build")
run("sudo service apache2 restart")
Neste exemplo, a função “deploy” corresponde a uma série de comandos necessários para implantar o projeto. Para executar esta tarefa, basta executar o seguinte comando no terminal:
fab deploy
Como executar uma tarefa em um servidor remoto com o Fabric?
Para executar uma tarefa em um servidor remoto com o Fabric, você precisa usar a função “env.hosts” para definir o servidor remoto que você deseja usar. Por exemplo, o seguinte código define o servidor remoto como “example.com” e executa a tarefa “deploy” nesse servidor:
from fabric.api import run, env
env.hosts = ['example.com']
def deploy():
run("git pull")
run("npm install")
run("npm run build")
run("sudo service apache2 restart")
Para executar esta tarefa, basta executar o seguinte comando no terminal:
fab deploy
Como executar várias tarefas com o Fabric?
Para executar várias tarefas com o Fabric, basta separar as tarefas com um espaço na linha de comando. Por exemplo:
fab deploy migrate restart
Isso executará as tarefas “deploy”, “migrate” e “restart” em sequência.
Como definir opções de linha de comando no Fabric?
Para definir opções de linha de comando no Fabric, você precisa usar a função “env”. Por exemplo, o seguinte código define uma opção chamada “branch” que pode ser configurada usando a linha de comando:
from fabric.api import run, env
env.hosts = ['example.com']
env.branch = 'master'
def deploy():
run("git checkout {0}".format(env.branch))
run("git pull")
run("npm install")
run("npm run build")
run("sudo service apache2 restart")
Para definir a opção “branch” usando a linha de comando, basta adicionar o seguinte:
fab deploy --set branch=dev
Isso configurará a opção “branch” como “dev”.
Como lidar com erros no Fabric?
Se uma tarefa no Fabric gerar um erro, a execução da tarefa será interrompida. É possível lidar com erros no Fabric usando o bloco “try-except”. Por exemplo, o seguinte código lida com o erro “FileNotFoundError” e imprime uma mensagem de erro:
from fabric.api import run
def deploy():
try:
run("rm /var/www/html/index.html")
except FileNotFoundError:
print("O arquivo não foi encontrado")
run("sudo service apache2 restart")
Isso permitirá que a tarefa continue, mesmo que o arquivo não seja encontrado.
Como lidar com senhas no Fabric?
Para evitar a necessidade de digitar uma senha toda vez que você executar uma tarefa no Fabric, você pode usar chaves SSH. Para gerar uma chave SSH, basta executar o seguinte comando no terminal:
ssh-keygen
Isso gerará uma chave SSH em ~/.ssh/id_rsa.pub. Adicione a chave SSH ao servidor remoto para que o Fabric possa se conectar ao servidor sem precisar de uma senha. Além disso, você pode usar a opção “password” para criar uma senha no arquivo fabfile.py:
from fabric.api import run, env, sudo
env.key_filename = '/path/to/private_key'
env.hosts = ['example.com']
env.password = 'mypassword'
def deploy():
run("git pull")
sudo("service apache2 restart")
Isso configurará a senha como “mypassword”. No entanto, isso só deve ser usado para fins de teste, e a senha não deve ser armazenada no arquivo fabfile.py em um ambiente de produção. Em vez disso, use chaves SSH para se conectar ao servidor.
Como executar comandos locais no Fabric?
Para executar comandos locais no Fabric, você precisa usar a função “local”. Por exemplo, o seguinte código executa um comando local para criar um arquivo chamado “myfile.txt”:
from fabric.api import local
def create_file():
local("touch myfile.txt")
Isso criará um arquivo chamado “myfile.txt” no diretório atual.
Como executar tarefas em paralelo com o Fabric?
Para executar tarefas em paralelo com o Fabric, você precisa usar a função “execute” em conjunto com a função “parallel”. Por exemplo, o seguinte código executa as tarefas “deploy” e “restart” em paralelo em vários servidores remotos:
from fabric.api import run, env, execute, parallel
env.hosts = ['example.com', 'example2.com', 'example3.com']
@parallel
def deploy():
run("git pull")
run("npm install")
run("npm run build")
@parallel
def restart():
run("sudo service apache2 restart")
def deploy_and_restart():
execute(deploy)
execute(restart)
Isso executará as tarefas “deploy” e “restart” em todos os servidores remotos em paralelo.