Contexto
O serviço script/database-backup/ já roda diariamente via cron, gera o dump .sql.gz e envia para o Google Drive. Em caso de erro (falha no pg_dump, upload via rclone, retenção, etc.), o script aborta (set -euo pipefail), mas o erro só aparece nos logs do CapRover — ninguém é avisado automaticamente.
A API do herbário já usa SMTP (SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS, SMTP_FROM) para envio de e-mails. O serviço de backup pode seguir o mesmo modelo de variáveis.
Objetivo
Adicionar notificação por e-mail apenas em caso de falha do backup, de forma que o time seja avisado sem depender de monitoramento manual dos logs.
Comportamento esperado
- O cron continua executando o backup no horário configurado
- Se o backup terminar com sucesso → não enviar e-mail
- Se qualquer etapa falhar → enviar e-mail com:
- Assunto claro (ex.: falha no backup de
{DATABASE_NAME})
- Horário da tentativa (
TZ)
- Mensagem de erro / saída relevante do script (quando disponível)
- O alerta deve aceitar múltiplos destinatários (lista configurável)
- Falha no envio do e-mail não deve esconder a falha original do backup (o job deve continuar falhando)
Escopo técnico (alto nível)
- Introduzir um passo de notificação no fluxo do cron (ex.: executar o backup e, em caso de falha, chamar um script/função de notify)
- Cliente SMTP:
msmtp no container do backup (não reutilizar nodemailer da API — o serviço é Debian + bash, sem Node)
- Instalar
msmtp no Dockerfile do database-backup
- Configurar o
msmtp a partir das variáveis SMTP_* (no entrypoint ou equivalente)
- Interpretar
NOTIFY_EMAIL_TO como lista de e-mails (ex.: separados por vírgula)
- Documentar as novas variáveis em
.env.example / README do serviço
- Reaproveitar o padrão de nomes das env vars SMTP já usado no projeto
Variáveis de ambiente (proposta)
| Variável |
Descrição |
Exemplo |
SMTP_HOST |
Servidor SMTP |
smtp.gmail.com |
SMTP_PORT |
Porta SMTP |
587 |
SMTP_USER |
Usuário SMTP |
seu-email@gmail.com |
SMTP_PASS |
Senha / app password |
(segredo) |
SMTP_FROM |
Remetente |
Sistema HCF <no-reply@hcf.com> |
NOTIFY_EMAIL_TO |
Destinatários do alerta (1 ou mais, separados por vírgula) |
ops@exemplo.com,curadoria@exemplo.com |
Opcional (se fizer sentido no PR):
NOTIFY_EMAIL_ENABLED=true|false — para desligar temporariamente sem remover config
Critérios de aceite
Checklist de testes
Fora do escopo
- Notificação em caso de sucesso
- Heartbeat / detecção de “backup não rodou” (cron parado)
- Outros canais (Telegram, Discord, Slack, WhatsApp)
- Alteração da política de retenção ou do formato do dump
Referências
- Serviço existente:
script/database-backup/
- SMTP já usado na API: variáveis
SMTP_* em .env.example
Contexto
O serviço
script/database-backup/já roda diariamente via cron, gera o dump.sql.gze envia para o Google Drive. Em caso de erro (falha nopg_dump, upload viarclone, retenção, etc.), o script aborta (set -euo pipefail), mas o erro só aparece nos logs do CapRover — ninguém é avisado automaticamente.A API do herbário já usa SMTP (
SMTP_HOST,SMTP_PORT,SMTP_USER,SMTP_PASS,SMTP_FROM) para envio de e-mails. O serviço de backup pode seguir o mesmo modelo de variáveis.Objetivo
Adicionar notificação por e-mail apenas em caso de falha do backup, de forma que o time seja avisado sem depender de monitoramento manual dos logs.
Comportamento esperado
{DATABASE_NAME})TZ)Escopo técnico (alto nível)
msmtpno container do backup (não reutilizarnodemailerda API — o serviço é Debian + bash, sem Node)msmtpnoDockerfiledodatabase-backupmsmtpa partir das variáveisSMTP_*(noentrypointou equivalente)NOTIFY_EMAIL_TOcomo lista de e-mails (ex.: separados por vírgula).env.example/ README do serviçoVariáveis de ambiente (proposta)
SMTP_HOSTsmtp.gmail.comSMTP_PORT587SMTP_USERseu-email@gmail.comSMTP_PASSSMTP_FROMSistema HCF <no-reply@hcf.com>NOTIFY_EMAIL_TOops@exemplo.com,curadoria@exemplo.comOpcional (se fizer sentido no PR):
NOTIFY_EMAIL_ENABLED=true|false— para desligar temporariamente sem remover configCritérios de aceite
msmtppara todos os destinatários emNOTIFY_EMAIL_TONOTIFY_EMAIL_TOaceita um único e-mail ou vários separados por vírgulamsmtpinstalado e configurado no container dodatabase-backup.env.example(e README, se existir)database-backupChecklist de testes
msmtpFora do escopo
Referências
script/database-backup/SMTP_*em.env.example