07 — Segurança e Observabilidade
Secrets, auth, logging, alertas e resposta a incidentes. Deploy: 05-deploy-infrastructure.
Secrets
| Onde | O quê |
|---|---|
| Local | .env por app + .env na raiz (SSH, DB) — templates em .env.example |
| Produção | Dokploy por Application — cloud/dokploy/environments/*.production.env.example |
| Git | Nunca commitar .env ou valores reais |
Service exige: JWT_SECRET, HASURA_GRAPHQL_ADMIN_SECRET, POSTGRES_URL, STRIPE_*, S3_*, GOOGLE_*, BACKOFFICE_ADMIN_EMAILS.
Rotacionar JWT/Hasura ~90–180 dias (invalida sessões). Stripe webhook ao rotacionar no Dashboard. SSH/DB anual ou pós-exposição. Acesso prod: .cursor/rules/server-ssh.mdc — confirmar antes de ações destrutivas.
Autenticação
JWT Bearer pelo apps/service. Clients enviam Authorization: Bearer <access_token>.
| Camada | Mecanismo |
|---|---|
| REST | JwtAuthGuard + @Public() em rotas abertas |
| GraphQL (Hasura) | Mesmo JWT; claims x-hasura-user-id, x-hasura-role, x-hasura-allowed-roles |
| Refresh | POST /auth/refresh-token |
| OAuth | |
| Backoffice | Lista BACKOFFICE_ADMIN_EMAILS + PlatformAdminGuard (não é role Hasura) |
Roles Hasura: user (row-level), anonymous (leitura limitada), admin secret só no service/migrations.
Dados
PII típico: e-mail, nome, avatar, billing Stripe, membros, uploads. Isolamento multi-tenant via Hasura (company_id / user_id). error_logs sem senhas/tokens. Backups Postgres: runbook em 05-deploy.
Observabilidade
Sinais operacionais do dia a dia no backoffice (/admin/observability/*), não só Dokploy/logs.
| Sinal | Onde |
|---|---|
| Errors | ErrorLoggingService → error_logs + painel |
| Health | /health, /healthz, pnpm dokploy:health |
| Logs Docker | Break-glass via pnpm server:docker -- logs |
| Funil ads | 06-tracking-attribution |
Alertas críticos
P0/P1 → webhook WhatsWave "VG · Critical alert" no celular do founder. Payload sem secrets. WHATSWAVE_OPS_WEBHOOK_SECRET só em Dokploy/.env.
Checklist pré-público
- Secrets prod sem placeholders
-
pnpm dokploy:healthverde - Revisão periódica de
error_logsno backoffice - Critical alert testado (firing + resolved)
- Backup Postgres testado uma vez
-
BACKOFFICE_ADMIN_EMAILSsó contas reais