
O que é deploy manual — e por que aprendi a ter medo dele
Em 2019 eu deployava via SSH + git pull + restart manual. Funcionava. Até o dia que não funcionou. E o cliente ficou sabendo antes de mim.
Meu processo de deploy em 2019:
ssh usuario@servidor
cd /var/www/projeto
git pull origin main
pip install -r requirements.txt
sudo systemctl restart meu-servico
Dez segundos. Simples. Funcionava.
Por meses funcionou assim. Eu deployava, olhava o log por 30 segundos, se não explodisse eu fechava o terminal e considerava deploy concluído.
O dia que não funcionou: uma das dependências tinha atualizado versão e o pip install puxou a nova sem eu saber. A nova versão tinha uma breaking change. O serviço reiniciou mas ficou respondendo 500 em todos os endpoints.
Não tinha monitoramento. Não tinha alerta. Descobri quando o cliente abriu ticket dizendo que o sistema estava inacessível há duas horas.
O git pull + restart manual tem vários problemas que só ficam visíveis quando algo dá errado: sem atomicidade (o serviço fica fora por alguns segundos entre o pull e o restart — em sistema com tráfego, alguém vai pegar o intervalo), sem rollback imediato (você precisa descobrir o commit anterior, reverter, reinstalar dependências, reiniciar — tudo isso durante o outage), sem verificação pós-deploy (restart com sucesso não significa que o sistema está funcionando — só que o processo subiu), e dependências não fixadas (pip install -r requirements.txt sem versão exata pode instalar versão diferente da que você testou).
O que aprendi a fazer, ainda manualmente, mas com mais controle:
- Fixar versões:
requirements.txtcom==em vez de>= - Deploy em horário de baixo tráfego
- Verificar saúde após restart (
curl localhost:8000/health) - Ter o comando de rollback pronto antes de deployar
Não é CI/CD — isso veio depois (em 2020, com Docker e pipeline). Mas já era infinitamente melhor do que clicar F5 no log e torcer.
A lição mais duradoura não foi técnica — foi de processo.
Qualquer procedimento que você faz manualmente em produção deve ter uma checklist. Não porque você é esquecido, mas porque stress e pressa fazem você pular etapas que parecem óbvias no momento. Com checklist, você executa o mesmo procedimento toda vez, mesmo às sexta às 18h com o cliente esperando.
Deploy sem checklist é confiança em excesso. Confiança em excesso em produção tem preço.