Review N8N 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 n8n.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 existir e não ser o valor padrão
- — deve existir e não ser o valor padrão
r3djGX2YCWRTvPoeHGRFGHL9zKLYaq31
, deve ser o mesmo valor em todos os serviços
- — deve ser
- — deve ser definido (padrão )
- — deve ser definido (padrão: )
- — deve ser
- — deve ser definido (padrão: )
- — deve existir e não deve ser o placeholder , leia a senha que está no arquivo
- — deve ser
- — deve ser definido (ex: )
- — deve ser
- — deve ser definido (ex: )
- — deve ser
- — deve ser
- — deve ser um domínio válido (não localhost, não
workflows.agenciasynca.com.br
se placeholder)
- — deve começar com e terminar com
- — deve começar com e terminar com
- — deve ser
- — deve ser
N8N_RUNNERS_BROKER_LISTEN_ADDRESS
— deve ser
- — deve ser
OFFLOAD_MANUAL_EXECUTIONS_TO_WORKERS
— deve ser
- — deve ser
- — deve ser definido (ex: )
- — deve ser ou (não em produção)
- — deve ser
- — deve ser
- — deve ser definido (ex: )
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS
— deve ser
- — deve ser um número positivo (ex: )
- — deve ser maior que (ex: )
- — deve ser
- — deve ser definido (ex: )
EXECUTIONS_DATA_PRUNE_HARD_DELETE_INTERVAL
— deve ser definido (ex: )
NODE_FUNCTION_ALLOW_BUILTIN
— deve ser
NODE_FUNCTION_ALLOW_EXTERNAL
— deve ser definido (ex: )
N8N_COMMUNITY_PACKAGES_ENABLED
— deve ser
N8N_REINSTALL_MISSING_PACKAGES
— deve ser
- — deve ser
N8N_BLOCK_ENV_ACCESS_IN_NODE
— alertar se for (risco de segurança)
2. Serviços Obrigatórios
Verifique se todos estes serviços estão presentes:
| Serviço | Obrigatório |
|---|
| Sim |
| Sim |
| Sim |
| Sim |
| Sim |
3. Comandos dos Containers
Verifique o comando (
) de cada serviço:
| Serviço | Comando Esperado |
|---|
| |
| (ou outro valor inteiro positivo) |
| |
| |
| |
Se algum comando estiver ausente ou incorreto, reportar como ❌.
4. Replicas dos Serviços
Verifique a quantidade de réplicas de cada serviço:
| Serviço | Réplicas Mínimas | Observação |
|---|
| 1 | Não deve ter mais de 1 (sessão única) |
| 1 | Pode escalar para mais |
| 2 | Deve ter pelo menos 2 para HA |
| 1 | Deve ter ao menos 1 runner por worker |
| 1 | Separado do webhook principal |
Alertar se
tiver mais de 1 réplica (quebra sessões de usuário).
Alertar se
tiver menos de 2 réplicas (falta de alta disponibilidade).
Verificar se a quantidade de runners é proporcional aos workers.
5. Rotas Traefik
Para cada serviço com labels Traefik (
,
,
), verifique:
Âncoras de endereço:
- A âncora deve existir e conter o domínio do editor (não placeholder como
workflows.agenciasynca.com.br
)
- A âncora deve existir e conter o domínio dos webhooks (não placeholder como
webhooks.agenciasynca.com.br
)
- O domínio em deve ser idêntico ao domínio dentro de na label
traefik.http.routers.n8n_editor.rule
- O domínio em deve ser idêntico ao domínio dentro de na label
traefik.http.routers.n8n_webhook.rule
- O domínio em deve ser idêntico ao domínio dentro de na label
traefik.http.routers.n8n_mcp_api.rule
(MCP usa mesmo domínio de webhook)
- Se houver inconsistência, reportar como ❌ Erro: âncora e regra Traefik não coincidem
- O domínio em deve coincidir com e com o domínio em
- O domínio em deve coincidir com o domínio em
Labels obrigatórias:
traefik.swarm.network=network_swarm_public
traefik.http.routers.<nome>.rule
— deve conter com domínio válido
traefik.http.routers.<nome>.entrypoints=websecure
traefik.http.routers.<nome>.tls.certresolver=letsencryptresolver
traefik.http.routers.<nome>.service=<nome>
— deve bater com o nome do serviço
traefik.http.services.<nome>.loadbalancer.server.port=5678
traefik.http.services.<nome>.loadbalancer.passHostHeader=true
Regras específicas:
- : rule deve ser apenas — sem PathPrefix
- : rule deve ser com o domínio de webhook — sem PathPrefix
- : rule deve ter
Host(...) && PathPrefix('/mcp')
— separado do webhook
Verificar conflito de rotas:
- Os domínios de e não devem ser iguais
- deve usar o mesmo domínio de com PathPrefix
- Serviços sem Traefik (, ) não devem ter labels Traefik
6. Task Runners — Associação com Workers
Verifique se os runners estão corretamente associados:
- deve ter
N8N_RUNNERS_TASK_BROKER_URI
apontando para http://n8n_worker_01:5679
- O do runner deve ser idêntico ao definido em
x-n8n-keys.N8N_RUNNERS_AUTH_TOKEN
- O worker () deve ter as variáveis de runners via (que inclui )
- O editor () também deve ter as variáveis de runners via
7. Serviço MCP Separado
Verifique se o MCP está corretamente isolado:
- deve ser um serviço separado de
- Deve usar (não nem )
- Deve ter rota Traefik com diferenciando do webhook geral
- Deve ter limite de memória maior (2048M) em relação aos outros serviços (1024M)
- Não deve ter mais de 1 réplica por padrão (MCP é stateful por sessão)
8. 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 |
|---|
| "0.5" | 512M | 1024M |
| "0.5" | 512M | 1024M |
| "0.5" | 512M | 1024M |
| "0.5" | 512M | 1024M |
| "0.5" | 1024M | 2048M |
Alertar se algum serviço não tiver
definido.
9. Configuração de Deploy
Para cada serviço, verifique:
- — todos devem ser
- — deve incluir
update_config.order: start-first
— garante zero downtime
update_config.failure_action: rollback
— garante reversão automática
- — deve ser pelo menos
10. Redes e Imagens
Redes:
- Todos os serviços devem estar na rede
- A rede deve ser declarada como na seção
- Não deve haver redes internas desnecessárias
Imagens:
- , , , — devem usar (anchor)
- — deve usar (anchor separado)
- Verificar se alguma imagem usa tag específica de versão em vez de (recomendado em produção)
11. Segurança
- não deve ser (placeholder)
- não deve ser o valor padrão de exemplo
- deve ter pelo menos 32 caracteres
N8N_BLOCK_ENV_ACCESS_IN_NODE: "false"
— alertar como risco de segurança
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
— deve estar presente
N8N_RESTRICT_FILE_ACCESS_TO
— deve estar definido
Formato do Relatório de Saída
Ao final, produza um relatório estruturado:
# Relatório de Auditoria — n8n.yaml
Data: <data atual>
## Resumo
- Total de checks: X
- ✅ OK: X
- ⚠️ Atenções: X
- ❌ Erros: X
## Resultados por Categoria
### 1. Variáveis de Ambiente
✅ N8N_ENCRYPTION_KEY: definido
❌ DB_POSTGRESDB_PASSWORD: usando placeholder SENHA — troque antes do deploy
...
### 2. Serviços
✅ n8n_editor: presente
✅ n8n_worker_01: presente
...
### 3. Comandos
✅ n8n_editor: comando `start` correto
✅ n8n_worker_01: comando `worker --concurrency=10` correto
...
### 4. Replicas
✅ n8n_webhook: 2 réplicas (HA ok)
⚠️ n8n_runners_01: 1 runner para 1 worker (proporcional, ok)
...
### 5. Rotas Traefik
✅ n8n_editor: rota Host correta, TLS ok
✅ n8n_mcp_api: PathPrefix(/mcp) configurado corretamente
...
### 6. Task Runners
✅ n8n_runners_01: BROKER_URI aponta para n8n_worker_01:5679
✅ AUTH_TOKEN consistente entre runner e keys
...
### 7. MCP
✅ n8n_mcp_api: serviço separado
✅ n8n_mcp_api: memória 2048M (maior que demais)
...
### 8. Recursos
✅ Todos os serviços com limits definidos
...
### 9. Deploy
✅ Todos com start-first e rollback
...
### 10. Redes e Imagens
⚠️ Imagens usando `latest` — considere fixar uma versão em produção
...
### 11. Segurança
❌ DB_POSTGRESDB_PASSWORD: placeholder SENHA detectado
❌ N8N_ENCRYPTION_KEY: usando valor padrão `r3djGX2vPoeL9zKL` — gere uma nova chave
❌ N8N_RUNNERS_AUTH_TOKEN: usando valor padrão `r3djGX2YCWRTvPoeHGRFGHL9zKLYaq31` — gere um novo token
⚠️ N8N_BLOCK_ENV_ACCESS_IN_NODE: false — permite acesso a variáveis de ambiente nos nodes
...
## Ações Recomendadas (por prioridade)
### Crítico (fazer antes do deploy)
1. ...
### Recomendado
1. ...
### Opcional
1. ...