# B2BCall — Backup e Restore ## O que é backupado Um único `pg_dump -Fc` do banco `b2bcall` cobre **tudo que precisa persistir**: - Schema `public` — usuários, campanhas, leads, chamadas, configurações. - Schema `asterisk` — troncos/ramais provisionados (ps_endpoints, ps_auths, ps_aors, ...), CDR, CEL. Os arquivos gerados em `Telefonia → Dialplan` e `Call Center → Filas` (`/etc/asterisk-generated/*.conf` dentro do container do Asterisk) **não** precisam de backup separado: são derivados de `DialplanVersion`/`Queue` (Postgres) e recriados automaticamente na próxima publicação, caso o volume Docker seja perdido (agente.md seção 97: "Asterisk não é banco de negócio"). O `.env` é backupado à parte (contém segredos que não estão no banco: `JWT_*_SECRET`, `SECRETS_MASTER_KEY`, credenciais AMI/ARI/SMTP). ## Backup ```bash sudo ./scripts/backup.sh ``` Gera em `backups/` (fora do git, `chmod 600`): - `postgres-.dump` — dump `pg_dump -Fc` (formato custom, comprime e permite restore seletivo). - `env-.bak` — cópia do `.env`. - `FIRST_LOGIN-.txt` — se o arquivo ainda existir no servidor. Retenção: remove automaticamente backups com mais de 30 dias (`BACKUP_RETENTION_DAYS` no ambiente para ajustar). **Agendamento recomendado** (cron, fora do escopo deste repositório): ```cron 0 3 * * * cd /opt/b2bcall && ./scripts/backup.sh >> /var/log/b2bcall-backup.log 2>&1 ``` Copie os backups para fora do servidor (outro host, storage externo) — um backup que só existe no mesmo disco do banco não protege contra falha de disco. ## Restore ```bash sudo ./scripts/restore.sh backups/postgres-20260101-030000.dump ``` **Isso é destrutivo**: substitui completamente o conteúdo atual do banco (`pg_restore --clean --if-exists`). O script pede confirmação explícita (digitar "restaurar") antes de agir, para acidentes de digitação. O que o script faz: 1. Para os serviços de aplicação (`api`, `asterisk-events`, `dialer-worker`, `frontend`, `nginx`) — mantém `postgres`/`redis`/`asterisk` no ar. 2. Executa `pg_restore` contra o Postgres em funcionamento. 3. Reinicia os serviços de aplicação. Após restaurar, rode `scripts/healthcheck.sh` e confira: - `pjsip show endpoints` no Asterisk reflete os troncos/ramais do backup. - Login funciona com um usuário que existia no momento do backup. ## Restaurando o `.env` Se o `.env` também precisar ser restaurado (ex.: perda total do servidor): ```bash cp backups/env-.bak .env chmod 600 .env ``` Isso restaura os segredos (JWT, master key de criptografia) — sem eles, as senhas de tronco/ramal cifradas no banco restaurado **não podem ser decifradas**. Por isso o `.env` deve ser guardado com a mesma prioridade que o dump do banco, não apenas como acessório.