promovaweb-devops-review-chatwoot-stack
Review Chatwoot Stack
Executa uma auditoria completa do arquivo chatwoot.yaml e reporta conformidade, problemas e sugestões.
Instruções de Execução
Quando esta skill for invocada, siga exatamente este roteiro:
Passo 1 — Ler o arquivo
Leia o arquivo chatwoot.yaml completo.
Passo 2 — Executar todos os checks abaixo
Execute cada bloco de verificação e registre os resultados (✅ OK / ⚠️ Atenção / ❌ Erro).
Passo 3 — Gravar o resultado
Grave o relatório completo em um arquivo chamado chatwoot.audit.md.
Checks de Verificação
1. Variáveis de Ambiente Obrigatórias
Verifique se todas as variáveis abaixo estão definidas nos anchors YAML (x-chatwoot-*):
Banco de dados (x-chatwoot-db)
POSTGRES_HOST— deve ser definido (padrão:postgres)POSTGRES_USERNAME— deve ser definido (padrão:postgres)POSTGRES_PASSWORD— deve existir e não deve ser o placeholderSENHA, compare com a senha definida empostgres.yamlPOSTGRES_DATABASE— deve ser definido (padrão:chatwoot)
Redis (x-chatwoot-redis)
REDIS_URL— deve começar comredis://e conter host e porta válidos (ex:redis://redis:6379)REDIS_PASSWORD— verificar se está definida (recomendado se Redis usa autenticação)
Object Storage (x-chatwoot-storage)
ACTIVE_STORAGE_SERVICE— deve sers3_compatibleoulocalSTORAGE_BUCKET_NAME— deve ser definido se usar S3STORAGE_ACCESS_KEY_ID— deve ser preenchido se usar S3 (alertar se vazio)STORAGE_SECRET_ACCESS_KEY— deve ser preenchido se usar S3 (alertar se vazio)STORAGE_REGION— deve ser definido se usar S3STORAGE_ENDPOINT— deve ser uma URL válida se usar S3STORAGE_FORCE_PATH_STYLE— deve ser"true"se usar S3 compatível
Ambiente Geral (x-chatwoot-env)
INSTALLATION_NAME— deve ser definido (padrão:chatwoot)NODE_ENV— deve serproductionRAILS_ENV— deve serproductionINSTALLATION_ENV— deve serdockerSECRET_KEY_BASE— deve existir, ter pelo menos 32 caracteres e não ser o valor de exemplo123458bb7ef6402f6a8bcf5d3be54321FRONTEND_URL— deve começar comhttps://e ser um domínio válido (não localhost, nãochat.agenciasynca.com.brse for apenas placeholder)DEFAULT_LOCALE— deve ser definido (ex:pt-BR)FORCE_SSL— deve ser"true"ENABLE_ACCOUNT_SIGNUP— verificar se é intencional estar habilitado (risco de segurança)RAILS_LOG_TO_STDOUT— deve ser"true"USE_INBOX_AVATAR_FOR_BOT— deve ser"true"ENABLE_PUSH_RELAY_SERVER— deve ser"true"
2. Serviços Obrigatórios
Verifique se todos estes serviços estão presentes:
| Serviço | Obrigatório | Hostname Esperado |
|---|---|---|
chatwoot_admin |
Sim | {{.Service.Name}}.{{.Task.Slot}} |
chatwoot_sidekiq |
Sim | {{.Service.Name}}.{{.Task.Slot}} |
3. Comandos dos Containers
Verifique o comando (command) e entrypoint de cada serviço:
| Serviço | Entrypoint Esperado | Comando Esperado |
|---|---|---|
chatwoot_admin |
docker/entrypoints/rails.sh |
bundle exec rails s -p 3000 -b 0.0.0.0 |
chatwoot_sidekiq |
— | deve incluir db:prepare, db:chatwoot_prepare e sidekiq -C config/sidekiq.yml |
Alertar se o comando do chatwoot_sidekiq não incluir a preparação do banco de dados antes de iniciar o Sidekiq.
4. Replicas dos Serviços
Verifique a quantidade de réplicas de cada serviço:
| Serviço | Réplicas Mínimas | Observação |
|---|---|---|
chatwoot_admin |
1 | Pode escalar, mas atenção à sessão |
chatwoot_sidekiq |
1 | Pode escalar para mais workers |
5. Rotas Traefik
Para o serviço chatwoot_admin, verifique:
Âncora de endereço (x-chatwoot-app-url):
- A âncora
x-chatwoot-app-urldeve existir e conter um domínio válido (não placeholder comochat.agenciasynca.com.br) - O domínio na âncora deve ser idêntico ao domínio dentro de
Host(...)na labeltraefik.http.routers.chatwoot_admin.rule - Se não forem iguais, reportar como ❌ Erro: inconsistência entre
x-chatwoot-app-urle a regra Traefik - O domínio na âncora deve coincidir também com o domínio em
FRONTEND_URL(sem ohttps://)
Labels obrigatórias:
traefik.enable=truetraefik.swarm.network=network_swarm_publictraefik.http.routers.chatwoot_admin.rule— deve conterHost(...)com domínio válido e coincidir comx-chatwoot-app-urleFRONTEND_URLtraefik.http.routers.chatwoot_admin.entrypoints=websecuretraefik.http.routers.chatwoot_admin.tls.certresolver=letsencryptresolvertraefik.http.routers.chatwoot_admin.service=chatwoot_admintraefik.http.services.chatwoot_admin.loadbalancer.server.port=3000traefik.http.services.chatwoot_admin.loadbalancer.passhostheader=true
Middleware WebSocket:
traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https— obrigatório para WebSocketstraefik.http.routers.chatwoot_admin.middlewares=sslheader@swarm— deve estar presente
6. Volumes
Verifique se os volumes estão corretamente configurados:
chatwoot_data— deve ser declarado comoexternal: truee montado em ambos os serviços em/app/storage- Ambos os serviços (
chatwoot_adminechatwoot_sidekiq) devem compartilhar o mesmo volume para consistência de storage
7. Recursos dos Containers
Para cada serviço, verifique os limites de recursos:
| Serviço | CPU Mínimo | Memória Mínima | Memória Máxima |
|---|---|---|---|
chatwoot_admin |
"1" | 1024M | 2048M |
chatwoot_sidekiq |
"1" | 1024M | 2048M |
Alertar se algum serviço não tiver resources.limits definido.
8. Configuração de Deploy
Para cada serviço, verifique:
mode: replicated— ambos devem serreplicatedplacement.constraints— deve incluirnode.role == manager- Verificar se há
update_configcomorder: start-firstefailure_action: rollback(recomendado)
9. Redes e Imagens
Redes:
- Ambos os serviços devem estar na rede
network_swarm_public - A rede deve ser declarada como
external: truena seçãonetworks:
Imagens:
- Ambos os serviços devem usar
*chatwoot-image(anchor) - Verificar se a imagem usa tag específica de versão em vez de
latest(recomendado em produção)
10. Segurança
POSTGRES_PASSWORDnão deve serSENHA(placeholder)SECRET_KEY_BASEnão deve ser o valor de exemplo123458bb7ef6402f6a8bcf5d3be54321(deve ser gerado comopenssl rand -hex 32)STORAGE_ACCESS_KEY_IDeSTORAGE_SECRET_ACCESS_KEYnão devem estar vazios se usar S3STORAGE_BUCKET_NAMEnão deve serchatwoot(placeholder)ENABLE_ACCOUNT_SIGNUP: "false"— recomendado para instalações privadasFORCE_SSL: "true"— deve estar presenteFRONTEND_URLdeve usar HTTPS e domínio real.
Formato do Relatório de Saída
Ao final, produza um relatório estruturado:
# Relatório de Auditoria — chatwoot.yaml
Data: <data atual>
## Resumo
- Total de checks: X
- ✅ OK: X
- ⚠️ Atenções: X
- ❌ Erros: X
## Resultados por Categoria
### 1. Variáveis de Ambiente
✅ POSTGRES_HOST: definido
❌ POSTGRES_PASSWORD: usando placeholder SENHA — troque antes do deploy
...
### 2. Serviços
✅ chatwoot_admin: presente
✅ chatwoot_sidekiq: presente
### 3. Comandos
✅ chatwoot_admin: entrypoint e comando corretos
✅ chatwoot_sidekiq: inclui db:prepare e db:chatwoot_prepare
...
### 4. Replicas
✅ chatwoot_admin: 1 réplica
✅ chatwoot_sidekiq: 1 réplica
...
### 5. Rotas Traefik
✅ chatwoot_admin: rota Host correta, TLS ok
✅ chatwoot_admin: middleware WebSocket configurado
...
### 6. Volumes
✅ chatwoot_data: declarado como external e compartilhado
...
### 7. Recursos
✅ Todos os serviços com limits definidos
...
### 8. Deploy
⚠️ update_config não definido — recomendado configurar start-first e rollback
...
### 9. Redes e Imagens
⚠️ Imagem usando `latest` — considere fixar uma versão em produção
...
### 10. Segurança
❌ POSTGRES_PASSWORD: placeholder SENHA detectado
❌ SECRET_KEY_BASE: valor parece ser exemplo — gere um novo com openssl rand -hex 32
...
## Ações Recomendadas (por prioridade)
### Crítico (fazer antes do deploy)
1. ...
### Recomendado
1. ...
### Opcional
1. ...
More from promovaweb/skills-devops
promovaweb-devops-docker
Verifica o ambiente Docker do servidor — versão do Docker Engine, status do Swarm, nós do cluster, rede network_swarm_public, volumes externos e conformidade geral com as recomendações da Promovaweb.
10promovaweb-devops-review-evolution-go-stack
Verifica a Stack do Evolution Go. Além disso analisa parâmetros, rotas Traefik, volumes, recursos e conformidade do stack Evolution Go de Acordo com as Recomendações da Promovaweb.
9promovaweb-devops-docker-volumes
Implemente armazenamento persistente com Docker volumes, bind mounts e estratégias de backup
9promovaweb-devops-dockerfile-basics
Aprenda os fundamentos do Dockerfile e as melhores práticas para criar imagens de container prontas para produção
9promovaweb-devops-docker-networking
Configure a rede (networking) do Docker para containers, incluindo bridge, overlay e service discovery
9promovaweb-devops-review-kestra-stack
Verifica a Stack do Kestra. Além disso analisa parâmetros, rotas Traefik, volumes, recursos e conformidade do stack Kestra de Acordo com as Recomendações da Promovaweb.
9