Runbook Operacional
Introdução ao documento
Este runbook descreve procedimentos operacionais para execução local, deploy, rollback e troubleshooting do serviço. Evidência: codex-promts.md:214 Evidência: .github/workflows/ci-cd-pipeline.yml:1
Versionamento
- Versão do documento:
2.0.0. - Última atualização:
2026-03-18. Evidência: codex-promts.md:16
Referencial teórico
- Operação baseada em scripts versionados do próprio repositório (npm, Docker, Helm, GitHub Actions). Evidência: package.json:7 Evidência: Dockerfile:1 Evidência: .github/workflows/ci-cd-pipeline.yml:69
Execução local
Pré-requisitos
- Node
18. - Dependências NPM instaladas.
- Arquivo
.envcom variáveis necessárias. Evidência: package.json:22 Evidência: README.md:44 Evidência: .env.example:1
Comandos
npm install
npm run dev
Evidência: package.json:10
Smoke test
curl --request GET --url 'http://localhost:4000/api/liveness'
curl --request GET --url 'http://localhost:4000/api/readiness'
Evidência: src/server.ts:168 Evidência: src/server.ts:176
Deploy
Pipeline oficial
- Build/push da imagem Docker em todas as branches e PRs.
- Deploy
pilotocondicionado à branchmain. - Deploy
essenciaeprodcondicionados à branchrelease. Evidência: .github/workflows/ci-cd-pipeline.yml:4 Evidência: .github/workflows/ci-cd-pipeline.yml:55 Evidência: .github/workflows/ci-cd-pipeline.yml:80 Evidência: .github/workflows/ci-cd-pipeline.yml:105
Comando-base de deploy (mesmo padrão do workflow)
helm dependency build helm
helm upgrade --install --create-namespace -n <namespace> <release> helm \
-f kubernetes/<cluster>/<namespace>/values.yaml \
--set image.repository=<registry/repository/service> \
--set image.tag=<sha>
Evidência: .github/workflows/ci-cd-pipeline.yml:71 Evidência: .github/workflows/ci-cd-pipeline.yml:72 Evidência: .github/workflows/ci-cd-pipeline.yml:74
Rollback
Rollback Helm por revisão (inferência operacional baseada em uso de Helm no pipeline)
helm -n <namespace> history <release>
helm -n <namespace> rollback <release> <revision>
helm -n <namespace> status <release>
Evidência: .github/workflows/ci-cd-pipeline.yml:71
Rollback por imagem SHA anterior
helm upgrade --install --create-namespace -n <namespace> <release> helm \
-f kubernetes/<cluster>/<namespace>/values.yaml \
--set image.repository=<registry/repository/service> \
--set image.tag=<sha-anterior>
Evidência: .github/workflows/ci-cd-pipeline.yml:49 Evidência: .github/workflows/ci-cd-pipeline.yml:74
Comandos úteis
- Build local:
npm run build
npm run start
Evidência: package.json:8 Evidência: package.json:9
- Docker local:
docker compose up --build -d
docker compose logs -f onboarding-api
Evidência: docker-compose.yml:2 Evidência: docker-compose.yml:6
- Diagnóstico de status:
curl --request GET --url 'http://localhost:4000/api/status'
Evidência: src/server.ts:204
- Queue worker (logs de falha):
rg -n "GroupLinkWorker|Erro ao enfileirar" src
Evidência: src/workers/groupLinkDispatchWorker.ts:130 Evidência: src/flows/personal.ts:215
Troubleshooting (5 incidentes mais prováveis)
1) 401/403 nos endpoints protegidos
- Sintoma: chamadas para
/otp,/sendtemplateou/sendreminderretornam401/403. - Diagnóstico: validar presença de
Authorizatione valor deSERVICE_TOKEN. - Correção: ajustar token no caller e no runtime. Evidência: src/auth/serviceToken.ts:7 Evidência: src/auth/serviceToken.ts:22 Evidência: src/auth/serviceToken.ts:30
2) Erro 500/421/432 no callback POST /
- Sintoma: falhas no processamento de flow.
- Diagnóstico: validar
PRIVATE_KEY,PASSPHRASE, assinaturax-hub-signature-256e campos criptografados. - Correção: atualizar chave privada/pública e segredo de assinatura. Evidência: src/server.ts:103 Evidência: src/server.ts:116 Evidência: src/server.ts:128 Evidência: src/encryption.ts:45
3) Readiness retornando 503
- Sintoma: pod sem prontidão.
- Diagnóstico: verificar conectividade SQLite/path e erro de
db.authenticate(). - Correção: corrigir
DATABASE_PATH/permissões do volume e reiniciar aplicação. Evidência: src/server.ts:180 Evidência: src/server.ts:192 Evidência: src/config/database.ts:5
4) Jobs de link de grupo acumulando ou falhando
- Sintoma: envios não chegam e logs mostram retries/falha definitiva.
- Diagnóstico: inspecionar tabela
GroupLinkDispatchQueuee logsGroupLinkWorker. - Correção: revisar credenciais WhatsApp e limites de retry/delay. Evidência: src/workers/groupLinkDispatchWorker.ts:121 Evidência: src/workers/groupLinkDispatchWorker.ts:130 Evidência: src/workers/groupLinkDispatchWorker.ts:145
5) Webhook Meta não verifica (GET /webhook retorna 403)
- Sintoma: validação de webhook falha no setup da Meta.
- Diagnóstico: conferir
WEBHOOK_VERIFY_TOKENno ambiente e no painel Meta. - Correção: alinhar token e repetir validação. Evidência: src/routes/webhook.ts:89 Evidência: src/routes/webhook.ts:95
Pendências
- Validar procedimento oficial de rollback com o time de plataforma (o repositório só evidencia comandos de
upgrade/install). - Confirmar se há observabilidade centralizada externa (APM/SIEM) além de
console.*. Evidência: .github/workflows/ci-cd-pipeline.yml:71 Evidência: src/server.ts:62