DevOps - Backup e Recovery¶
Este documento descreve a estratégia de backup e recuperação de dados do Billings Ease.
Índice¶
Visão Geral¶
O Billings Ease utiliza backups automáticos do Railway para o banco de dados e Cloudflare R2 para arquivos.
Estratégia: - Banco de Dados: Backups automáticos diários (Railway) - Arquivos: Replicação automática (Cloudflare R2) - Retenção: 7 dias (banco), indefinido (arquivos)
Backup do Banco de Dados¶
Railway PostgreSQL¶
Backups Automáticos: - Railway faz backups automáticos diários - Retenção: 7 dias - Armazenamento: Railway infrastructure
Acesso: 1. Railway Dashboard 2. Selecionar serviço PostgreSQL 3. Aba "Backups" 4. Ver backups disponíveis
Backup Manual¶
Via Railway CLI:
railway db:backup
Via pg_dump:
# Obter connection string do Railway
pg_dump $DATABASE_URL > backup_$(date +%Y%m%d).sql
Via Script Go:
// Criar script de backup
// Executar periodicamente
Restaurar Backup¶
Via Railway Dashboard: 1. Selecionar backup 2. Clicar em "Restore" 3. Confirmar restauração
Via psql:
psql $DATABASE_URL < backup_20240115.sql
Backup de Arquivos¶
Cloudflare R2¶
Replicação: - R2 replica automaticamente entre zonas - Durabilidade: 99.999999999% (11 nines) - Sem necessidade de backup manual
Versionamento: - Habilitar versionamento no bucket (futuro) - Manter versões anteriores de arquivos
Backup Manual (Opcional)¶
Exportar arquivos:
# Usar AWS CLI (compatível com R2)
aws s3 sync s3://bucket-name ./backup/ \
--endpoint-url https://account-id.r2.cloudflarestorage.com
Recovery¶
Recuperação do Banco de Dados¶
Cenário 1: Restaurar backup recente 1. Acessar Railway Dashboard 2. Selecionar backup 3. Restaurar
Cenário 2: Restaurar backup local
# 1. Baixar backup
# 2. Restaurar
psql $DATABASE_URL < backup.sql
Cenário 3: Recuperação de dados específicos
-- Restaurar tabela específica
pg_restore -t users backup.dump
Recuperação de Arquivos¶
Cloudflare R2: - Arquivos estão replicados - Recuperação automática em caso de falha - Sem ação manual necessária
Disaster Recovery¶
Plano: 1. Identificar falha - Monitoramento detecta problema - Alertas acionados
- Avaliar impacto
- Dados afetados
-
Tempo de inatividade aceitável
-
Executar recovery
- Restaurar backup mais recente
-
Verificar integridade
-
Validar
- Testar funcionalidades críticas
-
Verificar dados
-
Comunicar
- Notificar usuários (se necessário)
- Documentar incidente
Testes de Backup¶
Teste Mensal¶
Procedimento: 1. Criar ambiente de teste 2. Restaurar backup 3. Validar dados 4. Testar funcionalidades 5. Documentar resultados
Validação de Backup¶
Checklist: - [ ] Backup foi criado - [ ] Tamanho do backup é razoável - [ ] Backup pode ser restaurado - [ ] Dados estão íntegros após restore - [ ] Todas as tabelas presentes - [ ] Relacionamentos preservados
Retenção¶
Banco de Dados¶
Railway: - 7 dias de backups automáticos - Backups manuais: conforme necessário
Recomendação: - Manter backups semanais por 1 mês - Manter backups mensais por 1 ano
Arquivos¶
Cloudflare R2: - Retenção indefinida (até deletar manualmente) - Versionamento (futuro) manterá versões anteriores
Segurança¶
Criptografia¶
Backups: - Backups do Railway são criptografados - Transferência via TLS
Armazenamento: - Backups em infraestrutura segura - Acesso restrito
Acesso¶
Permissões: - Apenas administradores podem restaurar backups - Logs de acesso mantidos
Automatização¶
Scripts de Backup¶
Backup diário (futuro):
#!/bin/bash
# Backup diário
DATE=$(date +%Y%m%d)
pg_dump $DATABASE_URL > backups/backup_$DATE.sql
# Upload para storage externo
Cron job:
# Executar diariamente às 2h
0 2 * * * /path/to/backup.sh