# 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 /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:///` - API: `http:///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.