Case real: como implementamos Blue-Green Deployment no BizBiz com Docker e nginx. De 5 minutos para 0 segundos de downtime por deploy.
O que é Blue-Green Deployment e por que o BizBiz migrou para esse modelo?
Se você já passou pela tensão de fazer deploy em produção na sexta-feira tarde, sabe que atualizações de software podem ser arriscadas. Uma falha no deploy pode derrubar o sistema, afetar vendas e comprometer a experiência dos usuários. Foi exatamente para eliminar esse risco que implementamos Blue-Green Deployment no BizBiz, nosso marketplace B2B para pequenas empresas brasileiras.
Blue-Green Deployment é uma estratégia de deploy que mantém dois ambientes de produção idênticos — um "azul" (blue) ativo atendendo usuários, e um "verde" (green) onde você testa as novas versões. Quando a nova versão está pronta, você simplesmente troca o tráfego do ambiente azul para o verde. Se algo der errado, volta para o azul em segundos.
Por que o BizBiz precisava de deploys sem downtime?
O BizBiz conecta fornecedores e pequenos varejistas brasileiros em uma plataforma onde cada minuto offline representa vendas perdidas. Com transações PIX que precisam ser processadas em tempo real e catálogos que são atualizados constantemente, qualquer interrupção impacta diretamente o faturamento dos nossos usuários.
Antes do blue-green, nossos deploys seguiam o modelo tradicional:
- Parar o servidor de produção
- Fazer backup do banco de dados
- Atualizar o código
- Reiniciar os serviços
- Torcer para tudo funcionar
Esse processo gerava entre 2 a 5 minutos de downtime por deploy. Com 2-3 atualizações por semana, estávamos acumulando mais de 30 minutos mensais de indisponibilidade — inaceitável para um marketplace que precisa funcionar 24/7.
Arquitetura Blue-Green: como implementamos no BizBiz
Nossa solução combina Docker, nginx e um sistema automatizado de health checks. A arquitetura funciona assim:
1. Dois ambientes idênticos
Criamos dois stacks completos do BizBiz:
- Blue (Azul): Produção ativa em
bizbiz-blue - Green (Verde): Standby em
bizbiz-green
Cada ambiente roda em containers Docker separados com suas próprias instâncias de React frontend, Node.js backend e PostgreSQL. O nginx atua como load balancer na frente, direcionando o tráfego para o ambiente ativo.
2. nginx como switcher inteligente
Configuramos o nginx com upstream dinâmico que monitora a saúde de ambos os ambientes:
upstream bizbiz_active {
server bizbiz-blue:3000 max_fails=3 fail_timeout=30s;
}
upstream bizbiz_standby {
server bizbiz-green:3000 max_fails=3 fail_timeout=30s;
}
server {
location / {
proxy_pass http://bizbiz_active;
proxy_set_header Host $host;
# Health check endpoint
location /health {
access_log off;
return 200 "healthy\n";
}
}
}
3. Health checks automatizados
Criamos um sistema que verifica a saúde de cada ambiente a cada 10 segundos:
- Conectividade com banco de dados
- Tempo de resposta da API
- Integridade dos serviços PIX
- Cache Redis funcionando
Se algum check falha no ambiente ativo, o tráfego é automaticamente redirecionado para o standby.
Processo de deploy: zero downtime na prática
Com a infraestrutura pronta, nosso processo de deploy virou rotina:
Passo 1: Deploy no ambiente verde (standby)
# Script de deploy automatizado
./deploy.sh green v2.1.4
# O que acontece:
# 1. Pull da nova versão do código
# 2. Build da nova imagem Docker
# 3. Atualização do ambiente verde
# 4. Migração de banco (se necessário)
# 5. Testes automatizados
Passo 2: Testes de sanidade
Antes de trocar ambientes, executamos uma bateria de testes no ambiente verde:
- Criação e login de usuários
- Processo completo de compra
- Integração PIX funcionando
- Sincronização de catálogos
- Performance dos endpoints críticos
Passo 3: Switch instantâneo
Quando tudo está funcionando, trocamos os ambientes editando uma única linha no nginx:
# Troca o upstream ativo
sed -i 's/bizbiz-blue/bizbiz-green/g' /etc/nginx/sites-enabled/bizbiz.conf
nginx -s reload
A troca leva menos de 2 segundos. Os usuários não percebem nada — suas sessões continuam ativas e as transações em andamento são preservadas.
Passo 4: Rollback instantâneo (se necessário)
Se descobrimos um bug após o deploy, o rollback é igualmente rápido:
# Volta para o ambiente anterior
sed -i 's/bizbiz-green/bizbiz-blue/g' /etc/nginx/sites-enabled/bizbiz.conf
nginx -s reload
Em 30 segundos, estamos de volta à versão anterior funcionando.
Resultados: de 5 minutos para 0 segundos de downtime
Os números falam por si:
- Downtime por deploy: 5 minutos → 0 segundos
- Tempo total de deploy: 20 minutos → 8 minutos
- Deploys por semana: 2-3 → 5-8 (maior confiança)
- Rollbacks necessários: 2 em 6 meses (sem impacto nos usuários)
- Uptime mensal: 99.7% → 99.98%
Benefícios além do uptime
O blue-green não melhorou apenas a disponibilidade:
- Deploys na segunda-feira: Sem mais "sexta-feira é day de deploy não"
- Mais features rapidamente: Equipe confiante para lançar melhorias
- Testing em produção: Ambiente verde espelha exatamente a produção
- Menos stress: Equipe dorme melhor sabendo que rollback é instantâneo
Desafios e lições aprendidas
Sincronização de banco de dados
O maior desafio foi lidar com migrações de banco durante o deploy. Nossa solução:
- Backward compatibility: Sempre escrever migrações compatíveis com a versão anterior
- Estratégia de duas fases: Primeiro deploy com estruturas novas (mas não usadas), segundo deploy começa a usar
- Read replicas: Ambiente verde sempre lê de uma replica atualizada
Gerenciamento de assets estáticos
CSS e JavaScript precisam ser versionados corretamente para evitar incompatibilidades:
- Hash nos nomes dos arquivos (webpack automatiza isso)
- CDN configurado para cache-busting automático
- Assets compartilhados via volume Docker persistente
Monitoramento e alertas
Implementamos alertas em tempo real que notificam a equipe sobre:
- Falhas nos health checks
- Switches automáticos de ambiente
- Aumentos súbitos no tempo de resposta
- Erros 5xx acima do threshold
Quando vale a pena implementar blue-green?
Blue-green deployment não é bala de prata. Vale a pena quando:
✅ Faz sentido implementar:
- Alta disponibilidade é crítica: E-commerce, SaaS, APIs de pagamento
- Deploys frequentes: +3 deploys por semana
- Rollbacks são comuns: Bugs chegam em produção ocasionalmente
- Equipe pequena: Não dá para fazer manutenção em horários "mortos"
- Infraestrutura dockerizada: Containers facilitam muito a implementação
❌ Pode não valer a pena:
- Aplicações simples: Sites institucionais, blogs, landing pages
- Deploys raros: Menos de 1 deploy por mês
- Recursos limitados: Dobra o uso de servidor (temporariamente)
- Migrações complexas: Mudanças de schema muito frequentes
Implementação prática: do zero ao blue-green
Se você quer implementar blue-green na sua aplicação, o caminho é:
1. Dockerize sua aplicação
Sem containers, blue-green fica muito mais complexo. Docker simplifica a criação de ambientes idênticos.
2. Externalize configurações
Bancos de dados, Redis, variáveis de ambiente — tudo deve ser configurável via environment variables.
3. Implemente health checks
Crie endpoints que validem a saúde real da aplicação, não apenas se o servidor responde.
4. Configure load balancer
nginx, HAProxy ou ALB da AWS — qualquer um serve. O importante é poder trocar upstreams rapidamente.
5. Automatize o processo
Scripts de deploy, health checks e switch de ambientes devem ser automáticos. Manual = erro humano.
Custos: vale o investimento?
Para o BizBiz, o ROI foi evidente:
- Implementação inicial: ~40 horas de desenvolvimento
- Custo adicional de servidor: +30% durante deploys (temporário)
- Economia em downtime: R$ 15.000/mês em vendas não perdidas
- Produtividade da equipe: +25% (menos tempo debugando problemas de deploy)
O payback foi de 2 meses. Considerando que permite deploys mais frequentes e seguros, o benefício a longo prazo é ainda maior.
Quer implementar blue-green na sua aplicação?
Implementamos blue-green deployment para diversas empresas brasileiras. Podemos avaliar sua arquitetura atual e criar uma estratégia de migração sem riscos.
Quer deploys sem downtime? Podemos ajudar. Fale conosco pelo WhatsApp.