Storage e Arquivos
Sistema de armazenamento de arquivos no Cloudflare R2.
Cloudflare R2
S3-compatible object storage da Cloudflare.
Vantagens
- Sem custos de egress
- Alta performance global
- API compatível com S3
- Integração com CDN
Estrutura de Diretórios
YYYY/MM/DD/file-name/
├── file-name.pdf
├── file-name-pg-1.webp
├── file-name-pg-2.webp
└── file-name-pg-N.webpExemplo Real
2026/01/14/relatorio-anual/
├── relatorio-anual.pdf (2.5 MB)
├── relatorio-anual-pg-1.webp (245 KB)
├── relatorio-anual-pg-2.webp (238 KB)
└── relatorio-anual-pg-3.webp (256 KB)Upload Direto
Cliente faz upload direto para R2 usando presigned URLs.
Fluxo
- Cliente requisita URL (backend)
- Backend gera presigned URL (15 min)
- Cliente faz PUT para R2
- Cliente confirma (backend)
- Backend processa em background
Benefícios
- Reduz carga no servidor
- Upload mais rápido
- Escalável
Processamento de PDF
Pipeline
- Download: Worker baixa PDF do R2
- Extração: pdftoppm gera PNGs
- Conversão: Sharp converte PNG → WebP
- Upload: Páginas WebP enviadas para R2
- Registro: Metadados salvos no banco
Configurações
- WebP Quality: 85%
- WebP Effort: 6 (máxima compressão)
- Formato: PNG → WebP
- Nomeação:
{file}-pg-{N}.webp
Backup Externo
Rclone para NAS
Sincronização opcional com storage externo.
bash
# Configurar remote
rclone config
# Sincronizar
rclone sync r2:arqsystem-storage /mnt/nas/backupPolítica de Backup
- Frequência: Diária (cron)
- Retenção: 30 dias
- Tipo: Incremental
Segurança
Presigned URLs
- Upload: 15 minutos de validade
- Download: 1 hora de validade
- Permissões: Read ou Write específico
Acesso Privado
- Bucket privado por padrão
- Acesso apenas via presigned URLs
- CORS configurado para domínio específico
Performance
- CDN: Cloudflare global network
- Cache: Edge caching automático
- Compressão: WebP reduz 70-80% vs JPEG