Backup & Disaster Recovery¶
Estratégia¶
flowchart LR
DB[(PostgreSQL)] -->|pg_dump diário| Local[backup/local/<br/>7 dias]
Local -->|03:00 BRT| B2[Backblaze B2<br/>us-east-005]
Models[/opt/quantfx/models/<br/>3.080 PKLs] -->|sync| B2
Datasets[data/datasets/<br/>parquet] -->|sync| B2
Configs[/opt/quantfx/configs/<br/>+ .env redigido] -->|tar| B2
Estrutura no B2¶
| Prefixo | Conteúdo | Tamanho | Retenção |
|---|---|---|---|
pg/forex_YYYYMMDD.dump |
DB completo (candles, predictions, executions, api_keys) | ~137 MB | 30d rotating |
artifacts/artifacts_YYYYMMDD.tar.gz |
Champions + meta.json + configs + .env.template |
~447 MB | 30d rotating |
models-history/lgbm_*.pkl + .meta.json |
Histórico permanente (auto-rollback CUSUM) | ~15 GB total | ♾️ sticky |
data/datasets/**/*.parquet |
Datasets pré-processados | ~1 GB | ♾️ sticky |
Sync incremental: após seed inicial, sobem só os deltas (50-200 MB/dia).
Scheduled task¶
QuantFX-Backup-Diario roda às 03:00 BRT diário:
Script: scripts/backup_to_b2.py --full
RTO/RPO¶
- RTO (tempo para voltar): 30 minutos
- RPO (perda máxima): 24 horas
Procedimentos de DR¶
1. Inspecionar backup remoto¶
Output:
pg/forex_20260527.dump (137 MB) - 2026-05-27T03:14
pg/forex_20260526.dump (137 MB) - 2026-05-26T03:14
artifacts/artifacts_20260527.tar.gz (447 MB) - ...
2. Baixar sem restaurar (seguro)¶
Arquivos baixados em backup/restored/.
3. Restaurar em DB temporário (validação)¶
Cria DB temporário forex_restore. Para validar:
4. Restore destrutivo (CUIDADO)¶
PERIGO: substitui forex atual
Só faça isso em DR real. Confirme tendo o backup do estado atual antes.
5. Restaurar models/configs¶
Faz backup do models/ atual em backup/restored/PRE_RESTORE_TIMESTAMP/.
Manutenção mensal (manual)¶
Dia 1 de cada mês:
- Testar
--restore-db 20260XXXem DB temporário - Validar
SELECT COUNT(*) FROM predictions≈ esperado -
schtasks /Query /TN QuantFX-Backup-Diarioainda ATIVO? - Verificar último alerta Telegram "backup OK"
- Conferir crescimento do bucket no B2 dashboard
Configuração de credenciais¶
.env:
B2_KEY_ID=0056e7156fc3a670000000001
B2_APP_KEY=K005ZZSwcsqgqrlUEOr08n1xXrKSL1Y
B2_BUCKET_NAME=quantfx-backups-prod
B2_ENDPOINT=https://s3.us-east-005.backblazeb2.com
B2_UPLOAD_THREADS=8
.env nunca vai pro B2
scripts/backup_to_b2.py exclui .env explicitamente e gera .env.template no lugar.
Disaster Recovery: VPS perdida¶
Cenário pior: VPS Hostinger sumiu (ataque, suspensão, etc.).
Passos (estimado 2-4h)¶
- Provisionar nova VPS (Hostinger Cloud Hosting M, Ubuntu 24.04)
- Configurar WireGuard (mesmo
/etc/wireguard/wg0.confse backup) - Instalar Docker (
curl -fsSL https://get.docker.com | sh) - Clonar repo (
git clone https://github.com/...quantfx) - Restaurar
.env(do password manager — não está em backup!) - Restaurar DB:
- Restaurar artifacts:
- Subir todos os serviços:
- Atualizar Cloudflare apontar
api.quantfx.com.brpra novo IP - Smoke test:
curl https://api.quantfx.com.br/api/health
Backup local (extra)¶
Se quiser ter cópia local além do B2:
robocopy "C:\Users\henri\Documents\PROJETOS\ML-Forex\backup\local\" `
"D:\Backups\QuantFX\" /MIR /R:3 /W:5 /LOG:robocopy.log
Custo: 0 (já tem o HD). Vantagem: independente do B2.