Review Chatwoot Stack
Executa uma auditoria completa do arquivo
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
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 (
):
- — deve ser definido (padrão: )
- — deve ser definido (padrão: )
- — deve existir e não deve ser o placeholder , compare com a senha definida em
- — deve ser definido (padrão: )
- — deve começar com e conter host e porta válidos (ex: )
- — verificar se está definida (recomendado se Redis usa autenticação)
- — deve ser ou
- — deve ser definido se usar S3
- — deve ser preenchido se usar S3 (alertar se vazio)
STORAGE_SECRET_ACCESS_KEY
— deve ser preenchido se usar S3 (alertar se vazio)
- — deve ser definido se usar S3
- — deve ser uma URL válida se usar S3
- — deve ser se usar S3 compatível
- — deve ser definido (padrão: )
- — deve ser
- — deve ser
- — deve ser
- — deve existir, ter pelo menos 32 caracteres e não ser o valor de exemplo
123458bb7ef6402f6a8bcf5d3be54321
- — deve começar com e ser um domínio válido (não localhost, não se for apenas placeholder)
- — deve ser definido (ex: )
- — deve ser
- — verificar se é intencional estar habilitado (risco de segurança)
- — deve ser
- — deve ser
- — deve ser
2. Serviços Obrigatórios
Verifique se todos estes serviços estão presentes:
| Serviço | Obrigatório | Hostname Esperado |
|---|
| Sim | {{.Service.Name}}.{{.Task.Slot}}
|
| Sim | {{.Service.Name}}.{{.Task.Slot}}
|
3. Comandos dos Containers
Verifique o comando (
) e
de cada serviço:
| Serviço | Entrypoint Esperado | Comando Esperado |
|---|
| docker/entrypoints/rails.sh
| bundle exec rails s -p 3000 -b 0.0.0.0
|
| — | deve incluir , e sidekiq -C config/sidekiq.yml
|
Alertar se o comando do
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 |
|---|
| 1 | Pode escalar, mas atenção à sessão |
| 1 | Pode escalar para mais workers |
5. Rotas Traefik
Para o serviço
, verifique:
- A âncora deve existir e conter um domínio válido (não placeholder como )
- O domínio na âncora deve ser idêntico ao domínio dentro de na label
traefik.http.routers.chatwoot_admin.rule
- Se não forem iguais, reportar como ❌ Erro: inconsistência entre e a regra Traefik
- O domínio na âncora deve coincidir também com o domínio em (sem o )
Labels obrigatórias:
traefik.swarm.network=network_swarm_public
traefik.http.routers.chatwoot_admin.rule
— deve conter com domínio válido e coincidir com e
traefik.http.routers.chatwoot_admin.entrypoints=websecure
traefik.http.routers.chatwoot_admin.tls.certresolver=letsencryptresolver
traefik.http.routers.chatwoot_admin.service=chatwoot_admin
traefik.http.services.chatwoot_admin.loadbalancer.server.port=3000
traefik.http.services.chatwoot_admin.loadbalancer.passhostheader=true
Middleware WebSocket:
traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https
— obrigatório para WebSockets
traefik.http.routers.chatwoot_admin.middlewares=sslheader@swarm
— deve estar presente
6. Volumes
Verifique se os volumes estão corretamente configurados:
- — deve ser declarado como e montado em ambos os serviços em
- Ambos os serviços ( e ) 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 |
|---|
| "1" | 1024M | 2048M |
| "1" | 1024M | 2048M |
Alertar se algum serviço não tiver
definido.
8. Configuração de Deploy
Para cada serviço, verifique:
- — ambos devem ser
- — deve incluir
- Verificar se há com e (recomendado)
9. Redes e Imagens
Redes:
- Ambos os serviços devem estar na rede
- A rede deve ser declarada como na seção
Imagens:
- Ambos os serviços devem usar (anchor)
- Verificar se a imagem usa tag específica de versão em vez de (recomendado em produção)
10. Segurança
- não deve ser (placeholder)
- não deve ser o valor de exemplo
123458bb7ef6402f6a8bcf5d3be54321
(deve ser gerado com )
- e
STORAGE_SECRET_ACCESS_KEY
não devem estar vazios se usar S3
- não deve ser (placeholder)
ENABLE_ACCOUNT_SIGNUP: "false"
— recomendado para instalações privadas
- — deve estar presente
- deve 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. ...