Files
b2bcall/docs/INSTALL.md
B2BCall Bootstrap 80e72881b2 feat: Fase 9/10 — métricas, scripts operacionais, callback/wrap-up e aceite final
Fase 9 (segurança e produção):
- GET /api/metrics: endpoint Prometheus com métricas reais (chamadas,
  agentes, filas, CPS por campanha), protegido por permissão
- scripts/backup.sh, restore.sh, healthcheck.sh, install.sh, update.sh —
  testados contra o ambiente real (backup.sh e healthcheck.sh rodados de
  verdade; install.sh/update.sh validados por inspeção, ambiente atual já
  provisionado)
- POST /api/agent-console/dispose: aplica disposição de chamada de verdade
  (lacuna deixada aberta desde a Fase 6), com ações CALLBACK (agenda
  retorno) e DO_NOT_CALL (suprime automaticamente)
- apps/dialer-worker/src/callback-sweep.ts: reativa leads com callback
  vencido; GET /api/callbacks para consulta
- apps/dialer-worker/src/wrap-up-sweep.ts: transição automática
  WRAP_UP -> AVAILABLE + despausa real na fila do Asterisk. Exigiu corrigir
  main.ts para conectar ao AMI mesmo em DIALER_SIMULATION=true
  (DIALER_SIMULATION deve impedir só originação de chamada, não ações
  administrativas de fila)
- nftables revisado (sem alterações necessárias)
- Documentação completa: INSTALL, OPERATIONS, BACKUP_RESTORE, SECURITY,
  DATABASE, API, ASTERISK, OPENSIPS (não implementado, motivo
  documentado), TROUBLESHOOTING
- README.md e CHANGELOG.md reescritos

Fase 10 (testes e aceite):
- Quality gate completo executado: build/typecheck (7 workspaces), lint,
  46 testes unitários, docker compose config/ps, healthcheck — tudo verde
- Aceite de segurança (seção 92): 13 itens verificados ao vivo contra o
  sistema real, não só por inspeção de código
- Aceite Asterisk (seção 93): os 5 comandos executados e documentados,
  comunicação API->AMI->Asterisk validada
- docs/RELATORIO_FINAL.md: relatório final no formato da seção 96

Todos os fixtures de teste desta fase foram removidos/desativados ao
final. Credenciais de acesso entregues separadamente em CREDENCIAIS.txt
(fora do git, nunca versionado).
2026-08-27 19:16:14 -03:00

93 lines
3.5 KiB
Markdown

# B2BCall — Instalação
## Requisitos
- Debian 13 (trixie) limpo, acesso root.
- **Mínimo para dev/testes/simulação**: 2 vCPU, 2 GiB RAM, 20 GiB disco.
- **Recomendado para produção real com volume de discagem**: 4 vCPU, 8 GiB
RAM (ver `docs/ARCHITECTURE.md` §1 — o ambiente original de
desenvolvimento deste projeto tinha só 1.9 GiB e isso limitou decisões de
arquitetura, como resource limits conservadores por container).
- Rede: um IP privado para o servidor; troncos SIP/OpenSIPS acessíveis por
IP privado (o Asterisk nunca tem IP público — seção 5).
## Instalação automatizada
```bash
git clone <url-do-repositorio> /opt/b2bcall
cd /opt/b2bcall
sudo ./scripts/install.sh
```
O script (`scripts/install.sh`) faz, em ordem:
1. Verifica que está rodando como root.
2. Instala dependências de sistema (git, curl, openssl, Node.js 24 LTS via
NodeSource, pnpm via corepack).
3. Instala Docker Engine + Compose plugin (repositório oficial Docker,
detecta o codename da distro automaticamente).
4. Gera `.env` a partir de `.env.example` com segredos aleatórios fortes
(`scripts/generate-secrets.sh`) — só na primeira instalação, nunca
sobrescreve um `.env` existente.
5. Instala as regras de firewall (`infrastructure/nftables/`) — protege
AMI/ARI/SIP contra a LAN, nunca bloqueia SSH.
6. Aplica `vm.overcommit_memory=1` (recomendado pelo Redis).
7. `pnpm install` no monorepo.
8. `docker compose build` (compila Asterisk do fonte — a etapa mais
demorada, ~5-10 minutos dependendo do hardware).
9. Sobe Postgres e Redis, aguarda ficarem saudáveis.
10. Aplica migrations do Prisma e roda o seed (permissões, perfis,
bootstrap do `super_admin`).
11. Sobe Asterisk e os demais serviços (`docker compose up -d`).
12. Roda `scripts/healthcheck.sh`.
13. Imprime a URL de acesso e o caminho do `FIRST_LOGIN.txt`.
## Primeiro acesso
```bash
cat FIRST_LOGIN.txt
```
Contém e-mail e senha do `super_admin`, gerados aleatoriamente
(agente.md seção 70) — nunca uma senha padrão. O primeiro login **exige**
troca de senha (`mustChangePassword: true`).
**Remova o arquivo do servidor depois do primeiro acesso**:
```bash
shred -u FIRST_LOGIN.txt # ou: rm -f FIRST_LOGIN.txt
```
## Acesso
- Interface web: `http://<ip-do-servidor>/`
- API: `http://<ip-do-servidor>/api` (Swagger em `/api/docs` se
`SWAGGER_ENABLED=true`)
Nenhuma outra porta deve estar acessível pela LAN além de 80 (e 443 quando
HTTPS for configurado — ver `docs/OPERATIONS.md`).
## Instalação manual (passo a passo, se preferir não usar o script)
Ver o conteúdo de `scripts/install.sh` — cada etapa pode ser executada
isoladamente. Pontos que merecem atenção especial se for fazer manualmente:
- **Ordem de subida**: Postgres/Redis saudáveis → migrations → Asterisk →
demais serviços. Subir tudo de uma vez com `docker compose up -d` também
funciona (o `depends_on: condition: service_healthy` do
`docker-compose.yml` já orquestra isso), mas as migrations/seed do Prisma
precisam rodar manualmente contra o Postgres antes da API funcionar de
verdade (a API não roda migrations automaticamente no boot — decisão
deliberada para nunca alterar schema de produção sem um passo explícito).
- **DATABASE_URL para comandos rodados do host** (fora dos containers):
use `127.0.0.1` como host, não `postgres` — ver
`docs/ARCHITECTURE.md` §3.2.1.
## Atualizando uma instalação existente
```bash
sudo ./scripts/update.sh
```
Ver `docs/OPERATIONS.md` para detalhes.