chore(skills): consolidar n8n-* (6→1) e cwp-* (8→1) em meta-skills

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-07 05:00:35 +01:00
parent faef9b47dc
commit 2ec16674c2
16 changed files with 754 additions and 3398 deletions
-313
View File
@@ -1,313 +0,0 @@
---
name: n8n-chatbot
description: Criação de chatbots e workflows com inteligência artificial usando LangChain no n8n.
---
# /n8n-chatbot - Chatbots e AI Agents n8n
Criar chatbots e workflows com AI usando LangChain.
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| n8n Deep Research | f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1 | Sempre |
```
mcp__notebooklm__notebook_query({
notebook_id: "f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1",
query: "<adaptar ao contexto do pedido do utilizador>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
---
## Uso
```
/n8n-chatbot create <descrição> # Criar chatbot
/n8n-chatbot agent <tipo> # Criar AI agent
/n8n-chatbot rag <knowledge_base> # Criar sistema RAG
```
---
## Workflow Obrigatório
```
1. Health check → mcp__n8n__n8n_health_check()
2. Pesquisar template → mcp__n8n__search_templates({ task: "ai_automation" })
3. Se template OK → mcp__n8n__n8n_deploy_template()
4. Se criar do zero → Seguir fluxo abaixo
```
---
## Nodes LangChain
### Core
| Node | Uso |
|------|-----|
| `@n8n/n8n-nodes-langchain.agent` | AI Agent principal |
| `@n8n/n8n-nodes-langchain.chainLlm` | Chain LLM simples |
| `@n8n/n8n-nodes-langchain.chainRetrievalQa` | RAG Q&A |
### Modelos
| Node | Provider |
|------|----------|
| `@n8n/n8n-nodes-langchain.lmChatOpenAi` | OpenAI GPT |
| `@n8n/n8n-nodes-langchain.lmChatAnthropic` | Claude |
| `@n8n/n8n-nodes-langchain.lmChatOllama` | Ollama local |
### Memória
| Node | Tipo |
|------|------|
| `@n8n/n8n-nodes-langchain.memoryBufferWindow` | Últimas N mensagens |
| `@n8n/n8n-nodes-langchain.memoryPostgresChat` | PostgreSQL |
| `@n8n/n8n-nodes-langchain.memoryRedisChat` | Redis |
### Tools
| Node | Função |
|------|--------|
| `@n8n/n8n-nodes-langchain.toolCalculator` | Cálculos |
| `@n8n/n8n-nodes-langchain.toolCode` | Executar código |
| `@n8n/n8n-nodes-langchain.toolHttpRequest` | Chamar APIs |
| `@n8n/n8n-nodes-langchain.toolWorkflow` | Chamar workflows |
### Vector Stores (RAG)
| Node | Sistema |
|------|---------|
| `@n8n/n8n-nodes-langchain.vectorStoreSupabase` | Supabase |
| `@n8n/n8n-nodes-langchain.vectorStorePinecone` | Pinecone |
| `@n8n/n8n-nodes-langchain.vectorStorePgVector` | PostgreSQL |
---
## Chatbot Básico
### Estrutura
```
Webhook/Trigger
LLM Chat Model (OpenAI/Claude)
Memory (Buffer)
Agent
Resposta
```
### Implementação
```javascript
// 1. Modelo LLM
mcp__n8n__get_node({
nodeType: "@n8n/n8n-nodes-langchain.lmChatOpenAi",
detail: "standard"
})
// 2. Memória
mcp__n8n__get_node({
nodeType: "@n8n/n8n-nodes-langchain.memoryBufferWindow",
detail: "standard"
})
// 3. Agent
mcp__n8n__get_node({
nodeType: "@n8n/n8n-nodes-langchain.agent",
detail: "standard"
})
```
---
## RAG (Retrieval Augmented Generation)
### Estrutura
```
Documentos
Embeddings
Vector Store
Query (pergunta)
Retriever
LLM (resposta contextualizada)
```
### Configuração Vector Store
```javascript
mcp__n8n__validate_node({
nodeType: "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
config: {
mode: "insert", // ou "retrieve"
tableName: "documents",
queryName: "match_documents"
},
mode: "minimal"
})
```
---
## AI Agent com Tools
### Estrutura
```
Input
Agent
├── Tool: Calculator
├── Tool: HTTP Request
├── Tool: Code
└── Tool: Workflow
Output
```
### Configuração Agent
```javascript
mcp__n8n__validate_node({
nodeType: "@n8n/n8n-nodes-langchain.agent",
config: {
agentType: "conversationalAgent",
systemMessage: "Tu és um assistente prestável...",
options: {
returnIntermediateSteps: true
}
},
mode: "minimal"
})
```
---
## Exemplos Práticos
### Chatbot de Suporte
```
Webhook (mensagem cliente)
Memory PostgreSQL (histórico)
Vector Store (docs suporte)
Chain Retrieval QA
Webhook Response
```
### Agent CRM
```
Webhook (comando)
Agent
├── Tool: Pesquisar clientes
├── Tool: Criar lead
└── Tool: Actualizar tarefa
Slack (resultado)
```
### Resumo de Documentos
```
Webhook (upload PDF)
PDF Extract
Text Splitter
LLM Chain (resumo)
Email (enviar resumo)
```
---
## Templates Recomendados
```javascript
// AI templates
mcp__n8n__search_templates({
searchMode: "by_task",
task: "ai_automation"
})
// Por keyword
mcp__n8n__search_templates({
searchMode: "keyword",
query: "chatbot langchain openai"
})
```
---
## Credenciais Necessárias
| Provider | Credencial | Node |
|----------|------------|------|
| OpenAI | API Key | lmChatOpenAi |
| Anthropic | API Key | lmChatAnthropic |
| Supabase | URL + Key | vectorStoreSupabase |
| Pinecone | API Key | vectorStorePinecone |
---
## Boas Práticas
| Prática | Razão |
|---------|-------|
| System prompt claro | Define comportamento |
| Temperatura baixa (0.1-0.3) | Respostas consistentes |
| Memória limitada | Performance |
| Retry on error | Resiliência |
| Logs de conversas | Debug e melhoria |
---
## Troubleshooting
| Problema | Solução |
|----------|---------|
| Respostas inconsistentes | Baixar temperatura |
| Contexto perdido | Verificar memória |
| RAG não encontra | Verificar embeddings |
| Timeout | Aumentar limite |
| Token limit | Resumir contexto |
---
*Skill v1.0 | Descomplicar®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
-126
View File
@@ -1,126 +0,0 @@
---
name: n8n-health
description: Diagnóstico de conectividade e estado da instância n8n. Verificação de saúde do sistema.
---
# /n8n-health - Diagnóstico n8n
Verificar conectividade e estado da instância n8n.
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| n8n Deep Research | f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1 | Sempre |
```
mcp__notebooklm__notebook_query({
notebook_id: "f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1",
query: "<adaptar ao contexto do pedido do utilizador>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
---
## Uso
```
/n8n-health # Status rápido
/n8n-health verbose # Diagnóstico completo
```
---
## Instância
| Aspecto | Valor |
|---------|-------|
| URL | `https://automator.descomplicar.pt` |
| MCP | `mcp__n8n__*` |
---
## Execução
### Status Rápido (default)
```
1. mcp__n8n__n8n_health_check({ mode: "status" })
2. Reportar: status, URL, versão, response time
```
### Diagnóstico Completo (verbose)
```
1. mcp__n8n__n8n_health_check({ mode: "diagnostic", verbose: true })
2. Reportar: env vars, tool status, cache, erros
```
---
## Output Esperado
```
n8n Health Check
----------------
Status: OK | ERRO
URL: https://automator.descomplicar.pt
MCP: 2.33.x
Response: XXXms
Workflows: XX activos
```
---
## Se Falhar
| Erro | Causa | Solução |
|------|-------|---------|
| Connection refused | n8n offline | Verificar servidor |
| 401 Unauthorized | API key inválida | Regenerar no n8n |
| Timeout | Rede lenta | Verificar latência |
### Diagnóstico Manual
```bash
# Verificar se n8n responde
curl -I https://automator.descomplicar.pt
# Verificar API
curl -H "X-N8N-API-KEY: $KEY" https://automator.descomplicar.pt/api/v1/workflows
# Logs MCP
~/.claude/logs/mcp-n8n.log
```
---
## Skills Relacionadas
| Skill | Quando Usar |
|-------|-------------|
| `/n8n-webhook` | Criar webhooks |
| `/n8n-schedule` | Automações cron |
| `/n8n-sync` | Sincronização dados |
| `/n8n-notify` | Alertas |
| `/n8n-chatbot` | AI/Chatbots |
---
*Skill v1.0 | Descomplicar®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
-246
View File
@@ -1,246 +0,0 @@
---
name: n8n-notify
description: Criação de sistemas de notificações e alertas n8n via Slack, email e SMS.
disable-model-invocation: true
---
# /n8n-notify - Notificações e Alertas n8n
Criar sistemas de alertas via Slack, email, SMS.
---
## Uso
```
/n8n-notify create <descrição> # Criar sistema de alertas
/n8n-notify slack <mensagem> # Quick Slack notification
/n8n-notify email <para> <assunto> # Quick email
```
---
## Workflow Obrigatório
```
1. Health check → mcp__n8n__n8n_health_check()
2. Pesquisar template → mcp__n8n__search_templates({ query: "notification" })
3. Se template OK → mcp__n8n__n8n_deploy_template()
4. Se criar do zero → Seguir fluxo abaixo
```
---
## Canais Disponíveis
| Canal | Node | Uso |
|-------|------|-----|
| Slack | `nodes-base.slack` | Notificações equipa |
| Email | `nodes-base.emailSend` | Alertas formais |
| Telegram | `nodes-base.telegram` | Alertas mobile |
| Discord | `nodes-base.discord` | Comunidades |
| SMS | `nodes-base.twilio` | Alertas críticos |
---
## Slack
### Documentação
```javascript
mcp__n8n__get_node({
nodeType: "nodes-base.slack",
detail: "standard",
includeExamples: true
})
```
### Configuração
```javascript
mcp__n8n__validate_node({
nodeType: "nodes-base.slack",
config: {
resource: "message",
operation: "post",
channel: "#alertas",
text: "Mensagem de alerta"
},
mode: "minimal"
})
```
### Mensagem Formatada (Blocks)
```javascript
{
blocksUi: {
blocksValues: [
{
type: "header",
text: { type: "plain_text", text: "Alerta" }
},
{
type: "section",
text: { type: "mrkdwn", text: "*Detalhes:*\n{{ $json.message }}" }
}
]
}
}
```
---
## Email
### Configuração
```javascript
mcp__n8n__validate_node({
nodeType: "nodes-base.emailSend",
config: {
fromEmail: "alertas@descomplicar.pt",
toEmail: "emanuel@descomplicar.pt",
subject: "Alerta: {{ $json.title }}",
text: "{{ $json.message }}"
},
mode: "minimal"
})
```
---
## Padrões Comuns
### Webhook → Slack
```
Webhook (evento externo)
Set (formatar)
Slack (enviar)
```
### Monitor → Multi-canal
```
Schedule (cada 5min)
HTTP Request (check health)
IF (erro?)
↓ TRUE
Slack + Email (alertar)
```
### Error Handler
```
Qualquer workflow
↓ (erro)
Error Trigger
Slack (alertar erro)
```
---
## Níveis de Alerta
| Nível | Canal | Quando |
|-------|-------|--------|
| Info | Slack | Eventos normais |
| Warning | Slack + Email | Atenção necessária |
| Critical | Todos + SMS | Acção imediata |
### Implementação
```
IF (severity = "critical")
↓ TRUE
Slack + Email + SMS
↓ FALSE
IF (severity = "warning")
↓ TRUE
Slack + Email
↓ FALSE
Slack
```
---
## Exemplos
### Alerta de Servidor Down
```
Schedule (5min)
HTTP Request (ping servidor)
IF (falhou?)
↓ TRUE
Slack (#infra)
Email (admin)
```
### Novo Lead
```
Webhook (lead criado)
Set (formatar)
Slack (#vendas)
```
### Factura Vencida
```
Schedule (diário 9h)
HTTP Request (facturas vencidas)
Loop (cada factura)
Email (cliente)
Slack (#contabilidade)
```
---
## Templates
```javascript
mcp__n8n__search_templates({
searchMode: "keyword",
query: "slack notification alert"
})
```
---
## Troubleshooting
| Problema | Solução |
|----------|---------|
| Slack não envia | Verificar token e canal |
| Email em spam | Configurar SPF/DKIM |
| Rate limited | Agrupar notificações |
---
*Skill v1.0 | Descomplicar®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
-181
View File
@@ -1,181 +0,0 @@
---
name: n8n-schedule
description: Criação de workflows n8n com execução agendada via cron para automações recorrentes.
disable-model-invocation: true
---
# /n8n-schedule - Automações Agendadas n8n
Criar workflows com execução agendada (cron).
---
## Uso
```
/n8n-schedule create <descrição> # Criar automação agendada
/n8n-schedule list # Listar agendamentos
/n8n-schedule disable <id> # Desactivar
```
---
## Workflow Obrigatório
```
1. Health check → mcp__n8n__n8n_health_check()
2. Pesquisar template → mcp__n8n__search_templates({ task: "scheduling" })
3. Se template OK → mcp__n8n__n8n_deploy_template()
4. Se criar do zero → Seguir fluxo abaixo
```
---
## Expressões Cron Comuns
| Expressão | Descrição |
|-----------|-----------|
| `0 9 * * *` | Diário às 9h |
| `0 9 * * 1-5` | Seg-Sex às 9h |
| `0 */2 * * *` | A cada 2 horas |
| `*/15 * * * *` | A cada 15 minutos |
| `0 0 1 * *` | Dia 1 de cada mês |
| `0 3 * * 0` | Domingos às 3h |
### Formato
```
┌───────── minuto (0-59)
│ ┌─────── hora (0-23)
│ │ ┌───── dia mês (1-31)
│ │ │ ┌─── mês (1-12)
│ │ │ │ ┌─ dia semana (0-6)
* * * * *
```
---
## Configuração Schedule Trigger
```javascript
mcp__n8n__validate_node({
nodeType: "nodes-base.scheduleTrigger",
config: {
rule: {
interval: [{
field: "cronExpression",
expression: "0 9 * * 1-5"
}]
}
},
mode: "minimal"
})
```
---
## Timezone
```javascript
{
options: {
timezone: "Europe/Lisbon"
}
}
```
---
## Exemplos
### Relatório Diário
```
Schedule (0 9 * * 1-5)
PostgreSQL (query)
Set (formatar)
Email (enviar)
```
### Backup Semanal
```
Schedule (0 3 * * 0)
SSH (backup)
IF (sucesso?)
Slack (confirmar/alertar)
```
### Limpeza de Logs
```
Schedule (0 2 * * *)
SSH (limpar)
Slack (reportar)
```
---
## Gestão
### Desactivar
```javascript
mcp__n8n__n8n_update_partial_workflow({
id: "wf-xxx",
operations: [{ type: "deactivateWorkflow" }]
})
```
### Reactivar
```javascript
mcp__n8n__n8n_update_partial_workflow({
id: "wf-xxx",
operations: [{ type: "activateWorkflow" }]
})
```
### Ver Execuções
```javascript
mcp__n8n__n8n_executions({
workflowId: "wf-xxx",
limit: 10,
status: "all"
})
```
---
## Troubleshooting
| Problema | Solução |
|----------|---------|
| Não executa | Verificar workflow activo |
| Hora errada | Verificar timezone |
| Duplicado | Verificar múltiplos triggers |
---
*Skill v1.0 | Descomplicar®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
-180
View File
@@ -1,180 +0,0 @@
---
name: n8n-sync
description: Sincronização de dados entre sistemas via workflows n8n. Mantém dados consistentes entre plataformas.
disable-model-invocation: true
---
# /n8n-sync - Sincronização de Dados n8n
Manter dados sincronizados entre sistemas.
---
## Uso
```
/n8n-sync create <origem> <destino> # Criar sync
/n8n-sync list # Listar syncs
/n8n-sync status <workflow_id> # Ver estado
```
---
## Workflow Obrigatório
```
1. Health check → mcp__n8n__n8n_health_check()
2. Pesquisar template → mcp__n8n__search_templates({ task: "data_sync" })
3. Se template OK → mcp__n8n__n8n_deploy_template()
4. Se criar do zero → Seguir fluxo abaixo
```
---
## Padrões de Sync
### One-Way (Unidireccional)
```
Origem → Transform → Destino
```
### Two-Way (Bidireccional)
```
A ←→ B (com resolução de conflitos)
```
### Hub-and-Spoke
```
A ↔ HUB ↔ B
C
```
---
## Nodes por Sistema
### APIs/CRM
| Node | Sistema |
|------|---------|
| `nodes-base.httpRequest` | APIs genéricas |
| `nodes-base.webhook` | Receber dados |
### Bases de Dados
| Node | Sistema |
|------|---------|
| `nodes-base.postgres` | PostgreSQL |
| `nodes-base.mySql` | MySQL |
| `nodes-base.mongoDb` | MongoDB |
### Ficheiros
| Node | Sistema |
|------|---------|
| `nodes-base.googleSheets` | Google Sheets |
| `nodes-base.spreadsheetFile` | Excel/CSV |
| `nodes-base.ftp` | FTP/SFTP |
---
## Exemplo: CRM → Sheets
```
Schedule (horário)
HTTP Request (GET leads)
IF (há dados?)
Set (mapear campos)
Google Sheets (append)
Slack (confirmar)
```
---
## Estratégias
| Estratégia | Uso |
|------------|-----|
| Full Sync | Apagar tudo + inserir tudo |
| Incremental | Apenas modificados (updated_at) |
| Delta | Comparar hashes |
---
## Upsert Pattern
```javascript
{
nodeType: "nodes-base.postgres",
config: {
operation: "upsert",
table: "clientes",
columns: "email,nome,empresa",
conflictColumns: "email"
}
}
```
---
## Gestão de Erros
### Retry
```javascript
{
options: {
retry: {
maxRetries: 3,
retryInterval: 1000
}
}
}
```
### Dead Letter Queue
```
Operação
↓ (erro)
Error Trigger
BD (guardar erro)
Slack (alertar)
```
---
## Troubleshooting
| Problema | Solução |
|----------|---------|
| Duplicados | Usar upsert |
| Timeout | Batches menores |
| Rate limit | Adicionar delays |
---
*Skill v1.0 | Descomplicar®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
-172
View File
@@ -1,172 +0,0 @@
---
name: n8n-webhook
description: Criação e gestão de webhooks n8n para receber dados de sistemas externos.
---
# /n8n-webhook - Webhooks n8n
Criar e gerir webhooks para receber dados externos.
---
## Uso
```
/n8n-webhook create <descrição> # Criar novo webhook
/n8n-webhook list # Listar webhooks existentes
/n8n-webhook test <workflow_id> # Testar webhook
```
---
## Workflow Obrigatório
```
1. Health check → mcp__n8n__n8n_health_check()
2. Pesquisar template → mcp__n8n__search_templates({ query: "webhook" })
3. Se template OK → mcp__n8n__n8n_deploy_template()
4. Se criar do zero → Seguir fluxo abaixo
```
---
## Criar Webhook do Zero
### Passo 1: Documentação do Node
```javascript
mcp__n8n__get_node({
nodeType: "nodes-base.webhook",
detail: "standard",
includeExamples: true
})
```
### Passo 2: Validar Configuração
```javascript
mcp__n8n__validate_node({
nodeType: "nodes-base.webhook",
config: {
httpMethod: "POST",
path: "meu-webhook",
responseMode: "onReceived"
},
mode: "minimal"
})
```
### Passo 3: Nodes de Processamento
| Node | Uso |
|------|-----|
| `nodes-base.set` | Transformar dados |
| `nodes-base.if` | Condicionais |
| `nodes-base.code` | JavaScript custom |
| `nodes-base.httpRequest` | Chamar APIs |
### Passo 4: Deploy
```javascript
mcp__n8n__n8n_create_workflow({
name: "Webhook - Descrição",
nodes: [...],
connections: {...},
active: true
})
```
---
## Configurações Webhook
| Parâmetro | Opções | Default |
|-----------|--------|---------|
| `httpMethod` | GET, POST, PUT, DELETE | POST |
| `path` | String única | (obrigatório) |
| `authentication` | none, basicAuth, headerAuth | none |
| `responseMode` | onReceived, lastNode | onReceived |
---
## URL do Webhook
Após deploy:
```
https://automator.descomplicar.pt/webhook/<path>
```
Modo teste (workflow inactivo):
```
https://automator.descomplicar.pt/webhook-test/<path>
```
---
## Exemplos
### Webhook → Slack
```
Webhook (POST /notify)
Set (formatar)
Slack (enviar)
```
### Webhook → CRM
```
Webhook (POST /lead)
HTTP Request (criar no Desk)
Email (notificar)
```
---
## Testar
```javascript
mcp__n8n__n8n_test_workflow({
workflowId: "wf-xxx",
inputData: {
body: { "test": "data" },
headers: { "Content-Type": "application/json" }
}
})
```
```bash
curl -X POST https://automator.descomplicar.pt/webhook/meu-webhook \
-H "Content-Type: application/json" \
-d '{"test": "data"}'
```
---
## Troubleshooting
| Problema | Solução |
|----------|---------|
| 404 Not Found | Workflow não está activo |
| 401 Unauthorized | Verificar autenticação |
| Dados não chegam | Verificar responseMode |
---
*Skill v1.0 | Descomplicar®*
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+270
View File
@@ -0,0 +1,270 @@
---
name: n8n
description: Meta-skill n8n para criação e gestão de workflows na instância automator.descomplicar.pt. Cobre health check, webhooks, schedule (cron), sync de dados, notify (Slack/email/SMS) e chatbots/AI agents (LangChain/RAG). Triggers — n8n, workflow, automação, webhook, schedule, cron, sync, notify, alerta, slack, chatbot, ai agent, langchain, rag, automator, health check n8n.
---
# /n8n - Meta-skill n8n
Skill unificada para a instância n8n Descomplicar (`https://automator.descomplicar.pt`, MCP `mcp__n8n__*`). Substitui as antigas n8n-chatbot, n8n-health, n8n-notify, n8n-schedule, n8n-sync, n8n-webhook.
## Contexto NotebookLM (sempre antes de executar)
| Notebook | ID |
|----------|-----|
| n8n Deep Research | `f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1` |
```
mcp__notebooklm__notebook_query({ notebook_id: "f2c809b8-1cb5-4dd0-aa7e-be2cfb6704d1", query: "<adaptar ao pedido>" })
```
## Workflow obrigatório (qualquer criação)
```
1. mcp__n8n__n8n_health_check()
2. mcp__n8n__search_templates({ task: "<webhook|scheduling|data_sync|notification|ai_automation>" })
3. Se template adequado -> mcp__n8n__n8n_deploy_template()
4. Caso contrário, criar do zero seguindo a secção apropriada abaixo
```
---
## 1. Health (diagnóstico)
```
/n8n health # status rápido
/n8n health verbose # diagnóstico completo
```
```js
mcp__n8n__n8n_health_check({ mode: "status" })
mcp__n8n__n8n_health_check({ mode: "diagnostic", verbose: true })
```
Output esperado: status (OK/ERRO), URL, versão MCP, response time, workflows activos.
Erros comuns: Connection refused (n8n offline), 401 (API key inválida — regenerar), timeout (rede). Diagnóstico manual:
```bash
curl -I https://automator.descomplicar.pt
curl -H "X-N8N-API-KEY: $KEY" https://automator.descomplicar.pt/api/v1/workflows
tail ~/.claude/logs/mcp-n8n.log
```
---
## 2. Webhook
Receber dados de sistemas externos.
```
/n8n webhook create <descrição>
/n8n webhook list
/n8n webhook test <workflow_id>
```
```js
mcp__n8n__get_node({ nodeType: "nodes-base.webhook", detail: "standard", includeExamples: true })
mcp__n8n__validate_node({ nodeType: "nodes-base.webhook", config: { httpMethod: "POST", path: "meu-webhook", responseMode: "onReceived" }, mode: "minimal" })
mcp__n8n__n8n_create_workflow({ name: "Webhook - X", nodes: [...], connections: {...}, active: true })
```
Parâmetros: `httpMethod` (GET/POST/PUT/DELETE, default POST), `path` (obrigatório), `authentication` (none/basicAuth/headerAuth), `responseMode` (onReceived/lastNode).
URLs: produção `https://automator.descomplicar.pt/webhook/<path>` | teste `https://automator.descomplicar.pt/webhook-test/<path>`.
Nodes processamento: `nodes-base.set`, `nodes-base.if`, `nodes-base.code`, `nodes-base.httpRequest`.
Teste:
```js
mcp__n8n__n8n_test_workflow({ workflowId: "wf-xxx", inputData: { body: {test:"data"}, headers: {"Content-Type":"application/json"} } })
```
```bash
curl -X POST https://automator.descomplicar.pt/webhook/meu-webhook -H "Content-Type: application/json" -d '{"test":"data"}'
```
Troubleshooting: 404 (workflow não activo), 401 (auth), dados não chegam (responseMode).
---
## 3. Schedule (cron)
Workflows com execução agendada.
```
/n8n schedule create <descrição>
/n8n schedule list
/n8n schedule disable <id>
```
Cron comuns: `0 9 * * *` (diário 9h), `0 9 * * 1-5` (Seg-Sex 9h), `0 */2 * * *` (cada 2h), `*/15 * * * *` (15min), `0 0 1 * *` (dia 1), `0 3 * * 0` (domingos 3h).
```js
mcp__n8n__validate_node({
nodeType: "nodes-base.scheduleTrigger",
config: { rule: { interval: [{ field: "cronExpression", expression: "0 9 * * 1-5" }] }, options: { timezone: "Europe/Lisbon" } },
mode: "minimal"
})
```
Gestão:
```js
mcp__n8n__n8n_update_partial_workflow({ id: "wf-xxx", operations: [{ type: "deactivateWorkflow" }] })
mcp__n8n__n8n_update_partial_workflow({ id: "wf-xxx", operations: [{ type: "activateWorkflow" }] })
mcp__n8n__n8n_executions({ workflowId: "wf-xxx", limit: 10, status: "all" })
```
Exemplos: relatório diário (Schedule -> Postgres -> Set -> Email), backup semanal (Schedule -> SSH -> IF -> Slack), limpeza logs.
Troubleshooting: não executa (workflow inactivo), hora errada (timezone), duplicado (múltiplos triggers).
---
## 4. Sync (sincronização de dados)
```
/n8n sync create <origem> <destino>
/n8n sync list
/n8n sync status <workflow_id>
```
Padrões: One-Way (origem -> transform -> destino), Two-Way (com resolução conflitos), Hub-and-Spoke.
Nodes:
- APIs: `nodes-base.httpRequest`, `nodes-base.webhook`
- BD: `nodes-base.postgres`, `nodes-base.mySql`, `nodes-base.mongoDb`
- Ficheiros: `nodes-base.googleSheets`, `nodes-base.spreadsheetFile`, `nodes-base.ftp`
Estratégias: Full Sync, Incremental (updated_at), Delta (hashes).
Upsert:
```js
{ nodeType: "nodes-base.postgres", config: { operation: "upsert", table: "clientes", columns: "email,nome,empresa", conflictColumns: "email" } }
```
Erros: retry (`{ options: { retry: { maxRetries: 3, retryInterval: 1000 } } }`), Dead Letter Queue (Error Trigger -> BD -> Slack).
Exemplo CRM->Sheets: Schedule -> HTTP GET leads -> IF -> Set -> Google Sheets append -> Slack.
Troubleshooting: duplicados (upsert), timeout (batches menores), rate limit (delays).
---
## 5. Notify (alertas)
```
/n8n notify create <descrição>
/n8n notify slack <mensagem>
/n8n notify email <para> <assunto>
```
Canais: Slack (`nodes-base.slack`), Email (`nodes-base.emailSend`), Telegram, Discord, SMS Twilio.
Slack:
```js
mcp__n8n__validate_node({
nodeType: "nodes-base.slack",
config: { resource: "message", operation: "post", channel: "#alertas", text: "..." },
mode: "minimal"
})
```
Mensagem formatada (Blocks): header + section com `mrkdwn` e `{{ $json.message }}`.
Email:
```js
mcp__n8n__validate_node({
nodeType: "nodes-base.emailSend",
config: { fromEmail: "alertas@descomplicar.pt", toEmail: "emanuel@descomplicar.pt", subject: "Alerta: {{ $json.title }}", text: "{{ $json.message }}" },
mode: "minimal"
})
```
Padrões: Webhook->Slack, Monitor->Multi-canal (Schedule -> HTTP -> IF -> Slack+Email), Error Handler (Error Trigger -> Slack).
Níveis: Info (Slack), Warning (Slack+Email), Critical (Slack+Email+SMS) — implementar com IF aninhado por `severity`.
Troubleshooting: Slack não envia (token/canal), email em spam (SPF/DKIM), rate limited (agrupar).
---
## 6. Chatbot / AI Agents (LangChain)
```
/n8n chatbot create <descrição>
/n8n chatbot agent <tipo>
/n8n chatbot rag <knowledge_base>
```
### Nodes LangChain
Core: `@n8n/n8n-nodes-langchain.agent`, `chainLlm`, `chainRetrievalQa`.
Modelos: `lmChatOpenAi`, `lmChatAnthropic`, `lmChatOllama`.
Memória: `memoryBufferWindow`, `memoryPostgresChat`, `memoryRedisChat`.
Tools: `toolCalculator`, `toolCode`, `toolHttpRequest`, `toolWorkflow`.
Vector Stores: `vectorStoreSupabase`, `vectorStorePinecone`, `vectorStorePgVector`.
### Chatbot básico
```
Webhook -> LLM Chat -> Memory Buffer -> Agent -> Resposta
```
### RAG
```
Documentos -> Embeddings -> Vector Store -> Query -> Retriever -> LLM
```
```js
mcp__n8n__validate_node({
nodeType: "@n8n/n8n-nodes-langchain.vectorStoreSupabase",
config: { mode: "insert", tableName: "documents", queryName: "match_documents" },
mode: "minimal"
})
```
### AI Agent com tools
```js
mcp__n8n__validate_node({
nodeType: "@n8n/n8n-nodes-langchain.agent",
config: { agentType: "conversationalAgent", systemMessage: "Tu és um assistente prestável...", options: { returnIntermediateSteps: true } },
mode: "minimal"
})
```
### Exemplos práticos
- Suporte: Webhook -> Memory Postgres -> Vector Store -> Chain Retrieval QA -> Webhook Response.
- Agent CRM: Webhook -> Agent (tools: pesquisar/criar lead/actualizar tarefa) -> Slack.
- Resumo PDFs: Webhook -> PDF Extract -> Text Splitter -> LLM Chain -> Email.
### Credenciais
OpenAI/Anthropic (API Key), Supabase (URL+Key), Pinecone (API Key).
### Boas práticas
System prompt claro | temperatura 0.1-0.3 | memória limitada | retry on error | logs de conversas.
### Troubleshooting
Inconsistente (baixar temperatura), contexto perdido (memória), RAG vazio (embeddings), timeout (limite), token limit (resumir).
---
## Templates
```js
mcp__n8n__search_templates({ searchMode: "by_task", task: "ai_automation" })
mcp__n8n__search_templates({ searchMode: "keyword", query: "chatbot langchain openai" })
```
---
**Versão:** 2.0.0 (consolidação 6->1, 07-04-2026) | **Autor:** Descomplicar®
## Healing Log
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
-271
View File
@@ -1,271 +0,0 @@
---
name: cwp-accounts
description: Gestão de contas de utilizador no CWP via API oficial /scripts/cwp_api — criar, suspender, remover contas e corrigir permissões.
disable-model-invocation: true
---
# /cwp-accounts - Gestão de Contas CWP (Documentação Oficial)
Gestão de contas de utilizador no CWP usando API oficial. **Zero assumptions, zero hallucinations** - apenas comandos documentados.
**REGRA #38 - ZERO INVENCAO:** NUNCA improvisar comandos. Verificar estado actual ANTES de alterar. Pesquisar wiki CWP se necessario. Usar APENAS scripts oficiais.
---
## Servidor Alvo
| Servidor | IP | MCP | User |
|----------|-----|-----|------|
| **CWP Principal** | 176.9.3.158 | ssh-unified | root |
---
## Documentação Base
- [CWP Admin API](https://wiki.centos-webpanel.com/cwp-admin-api)
- [CWP Scripts](https://wiki.centos-webpanel.com/cwp-scripts)
### Documentação Hub (Consultar SEMPRE)
**Manuais locais** (`Hub/06-Operacoes/Documentacao/Manuais/CWP/`):
- `CWP-Manual-Completo.md` - Admin Guide (seccao User Accounts, Packages, Migration) + Wiki (User & Account Management) - **503KB**
- `CWP-Ferramentas-Desenvolvimento.md` - API Account (add/del/list/susp/unsp) - **82KB**
- `CWP-Guia-do-Revendedor.md` - Gestao de contas reseller - **17KB**
**Quick Reference:** `Hub/06-Operacoes/Documentacao/Quick-Reference/QR-CWP.md`
**NotebookLM (pesquisa AI sobre toda a documentacao CWP):**
```
mcp__notebooklm__notebook_query notebook_id:"0ded7bd6-69b3-4c76-b327-452396bf7ea7" query:"conta utilizador criar suspender permissoes"
```
---
## Scripts de Consulta (Apenas Leitura)
| Script | Descrição | Uso |
|--------|-----------|-----|
| `/scripts/list_users` | Lista todas as contas | `sh /scripts/list_users` |
| `/scripts/list_domains` | Lista todos os addon domains | `sh /scripts/list_domains` |
| `/scripts/list_subdomains` | Lista todos os subdomínios | `sh /scripts/list_subdomains` |
| `/scripts/whoowns` | Descobre owner de domínio | `sh /scripts/whoowns DOMINIO` |
---
## API de Gestão de Contas
### Remover Conta
```bash
/scripts/cwp_api account remove_user USERNAME
```
### Suspender Conta
```bash
/scripts/cwp_api account suspend_user USERNAME
```
### Reactivar Conta
```bash
/scripts/cwp_api account unsuspend_user USERNAME
```
### Corrigir Permissões
```bash
/scripts/cwp_api account fix_perms USERNAME
```
### Listar Domínios de Conta
```bash
/scripts/cwp_api account list_domains USERNAME
```
---
## API de Gestão de Bandwidth
### Reactivar Conta (Bandwidth Excedido)
```bash
# Nota: Requer aumentar bandwidth do utilizador/package primeiro
/scripts/cwp_api account unsuspend_bandwidth USERNAME
```
### Reset Bandwidth (Zero)
```bash
# Reseta bandwidth para 0 e reactiva conta
/scripts/cwp_api account reset_bandwidth USERNAME
```
---
## API de Gestão em Massa
### Actualizar Quotas (Todos)
```bash
# Aplica quotas do package a todos os utilizadores
/scripts/cwp_api account update_diskquota_all
```
### Actualizar Limites (Todos)
```bash
# Actualiza: quota, hourly_emails, cgroups, nproc, apache_nproc, inode, nofile
/scripts/cwp_api account update_limits_all
```
### Corrigir Permissões Mail
```bash
/scripts/cwp_api account mail_fix_permissions
```
### Actualizar Policyd (Todos)
```bash
/scripts/cwp_api account update_policyd_all
```
---
## API de DNS
### Rebuild named.conf
```bash
/scripts/cwp_api account rebuild_etc_named_conf
```
### Rebuild Zonas DNS (Todas)
```bash
/scripts/cwp_api account rebuild_var_named_all
```
### Rebuild Zona DNS (Específica)
```bash
/scripts/cwp_api account rebuild_var_named USERNAME DOMAIN
```
---
## Workflows
### 1. Listar Todas as Contas
```bash
sh /scripts/list_users
```
### 2. Descobrir Owner de Domínio
```bash
sh /scripts/whoowns descomplicar.pt
```
### 3. Suspender Conta Temporariamente
```bash
# 1. Suspender
/scripts/cwp_api account suspend_user USERNAME
# 2. Verificar
sh /scripts/list_users | grep USERNAME
```
### 4. Reactivar Conta Suspensa
```bash
# 1. Reactivar
/scripts/cwp_api account unsuspend_user USERNAME
# 2. Corrigir permissões (após reactivação)
/scripts/cwp_api account fix_perms USERNAME
```
### 5. Corrigir Permissões Após Operação SSH
```bash
# OBRIGATÓRIO após qualquer operação manual via SSH
/scripts/cwp_api account fix_perms USERNAME
```
---
## Scripts Auxiliares Documentados
| Script | Descrição |
|--------|-----------|
| `/scripts/ulimit_user_check` | Verifica limites de utilizador específico |
| `/scripts/cwpsrv_rebuild_user_conf` | Rebuild configuração de todos os utilizadores |
```bash
# Verificar limites de utilizador
sh /scripts/ulimit_user_check USERNAME
# Rebuild configs de utilizadores
sh /scripts/cwpsrv_rebuild_user_conf
```
---
## Anti-Patterns (NUNCA FAZER)
| Anti-Pattern | Risco | Alternativa |
|--------------|-------|-------------|
| Remover conta sem backup | Perda de dados | Backup primeiro |
| Editar ficheiros manualmente | Inconsistência | Usar API |
| Ignorar fix_perms após SSH | Erros permissões | SEMPRE fix_perms |
| Suspender sem avisar cliente | Problema comercial | Comunicar primeiro |
---
## Validação Pós-Operação
```bash
# Após qualquer operação de conta:
# 1. Verificar conta existe/estado
sh /scripts/list_users | grep USERNAME
# 2. Verificar domínios
/scripts/cwp_api account list_domains USERNAME
# 3. Testar acesso web
curl -sI http://DOMINIO | head -5
```
---
## Checklist de Execução
- [ ] Identificar username correcto
- [ ] Backup se operação destrutiva
- [ ] Executar comando API
- [ ] Verificar resultado
- [ ] fix_perms se necessário
- [ ] Testar acesso ao site
---
**Versão:** 1.0.0 | **Autor:** Descomplicar®
**Fonte:** wiki.centos-webpanel.com/cwp-admin-api, wiki.centos-webpanel.com/cwp-scripts
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
-241
View File
@@ -1,241 +0,0 @@
---
name: cwp-backup
description: Criação e gestão de backups no CWP com scripts oficiais — backups de utilizador, gestão de localizações e restauro.
disable-model-invocation: true
---
# /cwp-backup - Backups CWP (Documentação Oficial)
Gestão de backups no CWP usando scripts oficiais. **Zero assumptions, zero hallucinations** - apenas comandos documentados.
**REGRA #38 - ZERO INVENCAO:** NUNCA improvisar comandos. Verificar estado actual ANTES de alterar. Pesquisar wiki CWP se necessario. Usar APENAS scripts oficiais.
---
## Servidor Alvo
| Servidor | IP | MCP | User |
|----------|-----|-----|------|
| **CWP Principal** | 176.9.3.158 | ssh-unified | root |
---
## Documentação Base
- [CWP Scripts](https://wiki.centos-webpanel.com/cwp-scripts)
- [CWP Backups](https://wiki.centos-webpanel.com/category/backups)
### Documentação Hub (Consultar SEMPRE)
**Manuais locais** (`Hub/06-Operacoes/Documentacao/Manuais/CWP/`):
- `CWP-Manual-Completo.md` - Admin Guide (seccao Backup and Restore, Google Drive) + Wiki (Backup & Migration) - **503KB**
- `CWP-Guia-do-Utilizador.md` - Painel utilizador (seccao Backup and Restore) - **72KB**
**Quick Reference:** `Hub/06-Operacoes/Documentacao/Quick-Reference/QR-CWP.md`
**NotebookLM (pesquisa AI sobre toda a documentacao CWP):**
```
mcp__notebooklm__notebook_query notebook_id:"0ded7bd6-69b3-4c76-b327-452396bf7ea7" query:"backup restore configuracao"
```
---
## Paths Oficiais
| Path | Descrição |
|------|-----------|
| `/backup/` | Localização padrão de backups |
| `/scripts/user_backup` | Script de backup de utilizador |
| `/usr/local/cwpsrv/htdocs/resources/admin/include/cron_backup.php` | Cron de backup |
---
## Comando Principal de Backup
### Criar Backup de Utilizador
```bash
# COMANDO OFICIAL DOCUMENTADO
sh /scripts/user_backup USERNAME
```
**Nota:** Este comando cria um backup completo da conta incluindo:
- Ficheiros do site
- Bases de dados
- Emails
- Configurações
---
## Scripts de Consulta
```bash
# Listar utilizadores disponíveis para backup
sh /scripts/list_users
# Verificar owner de domínio
sh /scripts/whoowns DOMINIO
```
---
## Localização dos Backups
```bash
# Ver backups existentes
ls -lh /backup/
# Espaço usado por backups
du -sh /backup/
```
---
## Workflows
### 1. Criar Backup Completo de Conta
```bash
# 1. Identificar username
sh /scripts/whoowns DOMINIO
# 2. Criar backup
sh /scripts/user_backup USERNAME
# 3. Verificar criação
ls -lh /backup/ | grep USERNAME
```
### 2. Backup Antes de Operação Crítica
```bash
# SEMPRE fazer backup antes de:
# - Actualizar WordPress
# - Migrar site
# - Alterações massivas
sh /scripts/user_backup USERNAME
```
### 3. Verificar Espaço Disponível
```bash
# Antes de criar backup, verificar espaço
df -h /backup
# Tamanho de conta específica
du -sh /home/USERNAME/
```
---
## Configuração de Backups Automáticos
**Via CWP Admin:**
- CWP.admin → CWP Settings → Backup Configuration
**Cron (documentado):**
```bash
# O CWP usa este script para backups agendados
/usr/local/cwpsrv/htdocs/resources/admin/include/cron_backup.php
```
---
## Limitações Conhecidas (Documentadas)
| Limitação | Descrição |
|-----------|-----------|
| **GUI Restore** | Documentação menciona que "não funciona confiavelmente" |
| **Tamanho** | Backups grandes podem demorar |
| **Espaço** | Verificar espaço antes de criar |
---
## Anti-Patterns (NUNCA FAZER)
| Anti-Pattern | Risco | Alternativa |
|--------------|-------|-------------|
| Backup sem verificar espaço | Disco cheio | `df -h` primeiro |
| Confiar só em backups locais | Perda total | Backup remoto também |
| Restaurar via GUI | Falha | Restaurar manualmente |
| Não testar backups | Backup inválido | Testar periodicamente |
---
## Validação Pós-Backup
```bash
# 1. Verificar ficheiro criado
ls -lh /backup/ | grep USERNAME | tail -1
# 2. Verificar integridade (tar)
tar -tzf /backup/BACKUP_FILE.tar.gz > /dev/null && echo "OK" || echo "CORRUPTO"
# 3. Verificar tamanho razoável
# (deve ser similar ao tamanho da conta)
du -sh /home/USERNAME/
ls -lh /backup/BACKUP_FILE.tar.gz
```
---
## Restauro Manual (Procedimento Seguro)
**Nota:** O restauro via GUI não é fiável segundo documentação. Procedimento manual:
```bash
# 1. Extrair backup para pasta temporária
mkdir /tmp/restore_test
tar -xzf /backup/BACKUP_FILE.tar.gz -C /tmp/restore_test
# 2. Verificar conteúdo
ls -la /tmp/restore_test/
# 3. Restaurar ficheiros manualmente
# (copiar para localização correcta)
# 4. Corrigir permissões
chown -R USERNAME:USERNAME /home/USERNAME/public_html/
# 5. Limpar temporário
rm -rf /tmp/restore_test
```
---
## Checklist de Execução
- [ ] Verificar espaço em disco (`df -h`)
- [ ] Identificar username correcto
- [ ] Executar `sh /scripts/user_backup USERNAME`
- [ ] Verificar ficheiro criado
- [ ] Testar integridade do backup
- [ ] Documentar backup realizado
---
## Boas Práticas
1. **Backup antes de qualquer operação destrutiva**
2. **Manter backups remotos** (Google Drive, S3)
3. **Testar restauro periodicamente**
4. **Documentar localização de backups**
5. **Limpar backups antigos** (>30 dias)
---
**Versão:** 1.0.0 | **Autor:** Descomplicar®
**Fonte:** wiki.centos-webpanel.com/cwp-scripts, wiki.centos-webpanel.com/category/backups
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
-254
View File
@@ -1,254 +0,0 @@
---
name: cwp-email
description: Gestão de email no CWP — configuração de DKIM, SPF, mail queue e Postfix baseada na documentação oficial.
disable-model-invocation: true
---
# /cwp-email - Email CWP (Documentação Oficial)
Gestão de email no CWP. **Zero assumptions, zero hallucinations** - apenas comandos documentados.
**REGRA #38 - ZERO INVENCAO:** NUNCA improvisar comandos. Verificar estado actual ANTES de alterar. Pesquisar wiki CWP se necessario. Usar APENAS scripts oficiais.
---
## Servidor Alvo
| Servidor | IP | MCP | User |
|----------|-----|-----|------|
| **CWP Principal** | 176.9.3.158 | ssh-unified | root |
---
## Documentação Base
- [Resolve Emails marked as SPAM](https://wiki.centos-webpanel.com/resolve-emails-marked-as-spam)
- [How to install DKIM 2048 bits](https://wiki.centos-webpanel.com/how-to-install-dkim-2048-bits-long-key)
- [CWP Scripts](https://wiki.centos-webpanel.com/cwp-scripts)
### Documentação Hub (Consultar SEMPRE)
**Manuais locais** (`Hub/06-Operacoes/Documentacao/Manuais/CWP/`):
- `CWP-Manual-Completo.md` - Admin Guide (seccao Email: Accounts, DKIM, SPF, Mail Queue, AntiSpam, Policyd) + Wiki (Email & Postfix) - **503KB**
- `CWP-Guia-do-Utilizador.md` - Painel utilizador (seccao Email Accounts, Auto Responders, Filters, Routing) - **72KB**
- `CWP-Ferramentas-Desenvolvimento.md` - API Email Admin Server - **82KB**
**Quick Reference:** `Hub/06-Operacoes/Documentacao/Quick-Reference/QR-CWP.md`
**NotebookLM (pesquisa AI sobre toda a documentacao CWP):**
```
mcp__notebooklm__notebook_query notebook_id:"0ded7bd6-69b3-4c76-b327-452396bf7ea7" query:"email dkim spf postfix mail queue spam"
```
---
## Scripts Oficiais de Email
| Script | Descrição | Uso |
|--------|-----------|-----|
| `/scripts/install_cbpolicyd` | Instala limite de emails por hora | `sh /scripts/install_cbpolicyd` |
| `/scripts/check_postqueue` | Verifica mail queue | `sh /scripts/check_postqueue` |
| `/scripts/mail_queue_stats` | Estatísticas da mail queue | `sh /scripts/mail_queue_stats` |
| `/scripts/mail_roundcube_update` | Actualiza RoundCube | `sh /scripts/mail_roundcube_update` |
| `/scripts/mail_vmail_import` | Importa contas de /var/vmail | `sh /scripts/mail_vmail_import` |
| `/scripts/mail_rebuild_sni_certs` | Rebuild certificados mail | `sh /scripts/mail_rebuild_sni_certs` |
---
## DKIM & SPF
### Procedimento Documentado
1. **Rebuild Mail Server** via CWP.admin → Postfix Manager (com DKIM & SPF activado)
2. **Adicionar DKIM key** para cada domínio via DKIM Manager
### Testar DKIM
```bash
# Enviar email para teste
# Destino: check-auth@verifier.port25.com
# Deve receber resposta com "DKIM check: pass"
```
### DKIM 2048 bits (Chave Longa)
Quando adicionar TXT record para DKIM 2048-bit, dividir chave ao meio e envolver ambas as partes em quotes.
---
## Mail Queue Management
### Verificar Mail Queue
```bash
sh /scripts/check_postqueue
```
### Estatísticas da Queue
```bash
sh /scripts/mail_queue_stats
```
### Comandos Postfix (Padrão Linux)
```bash
# Ver queue
postqueue -p
# Flush queue (tentar enviar)
postqueue -f
# Ver mensagem específica
postcat -q QUEUE_ID
# Limpar queue (CUIDADO)
postsuper -d ALL
```
---
## Policyd (Limites de Email)
### Instalar
```bash
sh /scripts/install_cbpolicyd
```
### Função
Limita emails de entrada e saída por hora por utilizador.
### Actualizar Limites (Todos os Utilizadores)
```bash
/scripts/cwp_api account update_policyd_all
```
---
## Rebuild Certificados Mail
```bash
# Rebuild certificados Postfix/Dovecot
sh /scripts/mail_rebuild_sni_certs
```
---
## Corrigir Permissões de Mail
```bash
/scripts/cwp_api account mail_fix_permissions
```
---
## Verificações Anti-SPAM
### rDNS (Reverse DNS)
**Nota documentada:** "rDNS só pode ser configurado pelo provider de hosting - contactar provider."
### Blacklist Check
Verificar se IP do servidor está em blacklists:
- [MXToolbox Blacklist](https://mxtoolbox.com/blacklists.aspx)
### DMARC
Documentação recomenda configurar records DMARC para melhor autenticação.
---
## Workflows
### 1. Verificar Mail Queue
```bash
# Ver queue
sh /scripts/check_postqueue
# Ver estatísticas
sh /scripts/mail_queue_stats
```
### 2. Limpar Mail Queue (Emergência)
```bash
# Ver o que está na queue primeiro
postqueue -p | head -50
# Limpar tudo (CUIDADO - emails perdidos)
postsuper -d ALL
```
### 3. Rebuild Certificados Mail (Após SSL)
```bash
sh /scripts/mail_rebuild_sni_certs
```
### 4. Instalar Limites de Email
```bash
sh /scripts/install_cbpolicyd
```
---
## Anti-Patterns (NUNCA FAZER)
| Anti-Pattern | Risco | Alternativa |
|--------------|-------|-------------|
| Limpar queue sem verificar | Perda de emails | Ver queue primeiro |
| Ignorar blacklists | Emails não entregues | Verificar regularmente |
| DKIM sem testar | Falsa sensação segurança | Testar com verifier |
| Editar postfix directamente | Inconsistência CWP | Usar Postfix Manager |
---
## Validação
### Testar Envio
```bash
# Enviar email de teste via linha de comandos
echo "Test email" | mail -s "Test Subject" destinatario@example.com
```
### Verificar Logs
```bash
# Log de mail
tail -100 /var/log/maillog
```
---
## Checklist DKIM/SPF
- [ ] Mail Server rebuild com DKIM & SPF activo
- [ ] DKIM key adicionada para cada domínio
- [ ] Testar com check-auth@verifier.port25.com
- [ ] Verificar SPF record no DNS
- [ ] Verificar DMARC (opcional mas recomendado)
- [ ] Verificar blacklists
---
**Versão:** 1.0.0 | **Autor:** Descomplicar®
**Fonte:** wiki.centos-webpanel.com
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
-253
View File
@@ -1,253 +0,0 @@
---
name: cwp-php
description: Gestão de versões PHP no CWP — PHP Switcher, Selector e configuração baseada na documentação oficial.
disable-model-invocation: true
---
# /cwp-php - Gestão PHP CWP (Documentação Oficial)
Gestão de versões PHP no CWP. **Zero assumptions, zero hallucinations** - apenas informação documentada.
**REGRA #38 - ZERO INVENCAO:** NUNCA improvisar comandos. Verificar estado actual ANTES de alterar. Pesquisar wiki CWP se necessario. Usar APENAS scripts oficiais.
---
## Servidor Alvo
| Servidor | IP | MCP | User |
|----------|-----|-----|------|
| **CWP Principal** | 176.9.3.158 | ssh-unified | root |
---
## Documentação Base
- [PHP Selector](https://wiki.centos-webpanel.com/php-selector)
- [PHP Version Switcher](https://wiki.centos-webpanel.com/php-version-switcher)
- [CWP Scripts](https://wiki.centos-webpanel.com/cwp-scripts)
### Documentação Hub (Consultar SEMPRE)
**Manuais locais** (`Hub/06-Operacoes/Documentacao/Manuais/CWP/`):
- `CWP-Manual-Completo.md` - Admin Guide (seccao PHP Settings, Switcher, Selector, FPM, PECL) + Wiki (PHP Configuration) - **503KB**
- `CWP-Guia-do-Utilizador.md` - Painel utilizador (seccao Edit PHP.ini, PHP Selector) - **72KB**
**Quick Reference:** `Hub/06-Operacoes/Documentacao/Quick-Reference/QR-CWP.md`
**NotebookLM (pesquisa AI sobre toda a documentacao CWP):**
```
mcp__notebooklm__notebook_query notebook_id:"0ded7bd6-69b3-4c76-b327-452396bf7ea7" query:"php versao selector switcher fpm configuracao"
```
---
## Ferramentas PHP no CWP
O CWP oferece 3 ferramentas para gerir PHP:
| Ferramenta | Função |
|------------|--------|
| **PHP Switcher** | Versão principal do CWP (default para novos clientes) |
| **PHP Selector** | Permite diferentes versões por pasta/domínio |
| **PHP-FPM Selector** | Para sites que usam PHP-FPM |
---
## Versões PHP Disponíveis (Documentadas)
PHP Selector suporta: **4.4, 5.2, 5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1**
---
## Paths de Configuração
| Path | Descrição |
|------|-----------|
| `/usr/local/cwpsrv/htdocs/resources/conf/el7/php_switcher/` | Config CentOS 7 |
| `/usr/local/cwpsrv/htdocs/resources/conf/el8/php_switcher/` | Config CentOS 8 |
| `/var/log/php-rebuild.log` | Log de compilação PHP |
---
## Monitorizar Compilação PHP
```bash
# Ver log em tempo real durante instalação de versão PHP
tail -f /var/log/php-rebuild.log
# Ver log completo
cat /var/log/php-rebuild.log
```
---
## Scripts Oficiais
| Script | Descrição |
|--------|-----------|
| `/scripts/phpfpm_rebuild_user_conf` | Rebuild configuração PHP-FPM de utilizadores |
```bash
sh /scripts/phpfpm_rebuild_user_conf
```
---
## PHP por Pasta (Documentado)
Cada utilizador pode ter versão PHP diferente por pasta usando `.htaccess`:
```apache
# Exemplo .htaccess para usar PHP específico numa pasta
# (configurar via CWP PHP Selector primeiro)
```
---
## Desactivar Funções Perigosas (Documentado)
### PHP Switcher
```bash
echo "disable_functions = exec, system, popen, proc_open, shell_exec, passthru, show_source" > /usr/local/php/php.d/disabled_function.ini
```
**Nota:** Cada versão PHP tem caminho diferente.
---
## Adicionar Flags de Compilação (Documentado)
**Ficheiro exemplo CentOS 7 PHP 7.0:**
`/usr/local/cwpsrv/htdocs/resources/conf/el7/php_switcher/7.0.ini`
### Formato
```ini
[nome-unico]
default=0
option="--enable-opcao"
```
**Aviso documentado:** "CWP update will overwrite these files" - documentar alterações para reaplicar após updates.
---
## Verificações
### Versão PHP Actual
```bash
php -v
```
### Memory Limit
```bash
php -i | grep memory_limit
```
### OPcache Status
```bash
php -i | grep -E 'opcache.enable|opcache.memory_consumption'
```
### Processos PHP-FPM
```bash
ps aux | grep php-fpm | wc -l
```
---
## Workflows
### 1. Verificar Versão PHP
```bash
php -v | head -1
```
### 2. Ver Configuração PHP
```bash
php -i | grep -E 'memory_limit|upload_max|post_max|max_execution'
```
### 3. Rebuild PHP-FPM Config
```bash
sh /scripts/phpfpm_rebuild_user_conf
```
### 4. Monitorizar Instalação de Versão PHP
```bash
tail -f /var/log/php-rebuild.log
```
---
## Anti-Patterns (NUNCA FAZER)
| Anti-Pattern | Risco | Alternativa |
|--------------|-------|-------------|
| Editar .ini sem documentar | Perdido em update | Documentar alterações |
| Compilar PHP manualmente | Conflito com CWP | Usar PHP Selector |
| Ignorar php-rebuild.log | Não detectar erros | Monitorizar sempre |
---
## Notas Importantes
1. **PHP Switcher** é a versão default para novos utilizadores
2. **PHP Selector** permite versão por pasta
3. Updates do CWP podem sobrescrever configurações personalizadas
4. Sempre documentar alterações para reaplicar
---
## Checklist
- [ ] Verificar versão actual (`php -v`)
- [ ] Verificar configuração (`php -i`)
- [ ] Se alterar, documentar mudanças
- [ ] Testar sites após alterações
- [ ] Verificar logs se problemas
---
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| WordPress Config CLI | fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d | Sempre |
```
mcp__notebooklm__notebook_query({
notebook_id: "fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d",
query: "<adaptar ao contexto de PHP versões e configuração CWP>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
---
**Versão:** 1.0.0 | **Autor:** Descomplicar®
**Fonte:** wiki.centos-webpanel.com/php-selector, wiki.centos-webpanel.com/php-version-switcher
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
-288
View File
@@ -1,288 +0,0 @@
---
name: cwp-scripts
description: Referência completa dos scripts oficiais da pasta /scripts/ do CWP — todos os comandos CLI documentados.
---
# /cwp-scripts - Referência Completa Scripts CWP
Todos os scripts oficiais documentados do CWP. **Zero assumptions, zero hallucinations**.
**REGRA #38 - ZERO INVENCAO:** NUNCA improvisar comandos. Verificar estado actual ANTES de alterar. Pesquisar wiki CWP se necessario. Usar APENAS scripts oficiais.
---
## Servidor Alvo
| Servidor | IP | MCP | User |
|----------|-----|-----|------|
| **CWP Principal** | 176.9.3.158 | ssh-unified | root |
---
## Documentação Base
- [CWP Scripts](https://wiki.centos-webpanel.com/cwp-scripts)
### Documentação Hub (Consultar SEMPRE)
**Manuais locais** (`Hub/06-Operacoes/Documentacao/Manuais/CWP/`):
- `CWP-Manual-Completo.md` - Admin Guide + Wiki completo (todas as seccoes) - **503KB**
- `CWP-Ferramentas-Desenvolvimento.md` - API Manager completo (53 endpoints) - **82KB**
**Quick Reference:** `Hub/06-Operacoes/Documentacao/Quick-Reference/QR-CWP.md`
**NotebookLM (pesquisa AI sobre toda a documentacao CWP):**
```
mcp__notebooklm__notebook_query notebook_id:"0ded7bd6-69b3-4c76-b327-452396bf7ea7" query:"scripts comandos cwp api"
```
---
## Como Executar
```bash
sh /scripts/NOME_SCRIPT
# ou
/scripts/NOME_SCRIPT
```
---
## Scripts por Categoria
### Sistema CWP
| Script | Descrição |
|--------|-----------|
| `/scripts/cwp_version` | Ver versão do CWP |
| `/scripts/update_cwp` | Actualizar CWP |
| `/scripts/restart_cwpsrv` | Restart painel CWP |
| `/scripts/reload_cwpsrv` | Reload daemon CWP |
| `/scripts/cwp_monitor` | Verificar load do servidor |
| `/scripts/cwp_set_memory_limit` | Alterar memory limit |
| `/scripts/add_alert` | Adicionar alerta |
### Utilizadores e Contas
| Script | Descrição |
|--------|-----------|
| `/scripts/list_users` | Listar todas as contas |
| `/scripts/list_domains` | Listar addon domains |
| `/scripts/list_subdomains` | Listar subdomínios |
| `/scripts/whoowns DOMINIO` | Descobrir owner de domínio |
| `/scripts/user_backup USERNAME` | Criar backup de conta |
| `/scripts/ulimit_user_check` | Verificar limites de utilizador |
| `/scripts/cwpsrv_rebuild_user_conf` | Rebuild config de utilizadores |
### SSL / Certificados
| Script | Descrição |
|--------|-----------|
| `/scripts/install_acme` | Instalar/reinstalar acme.sh |
| `/scripts/autossl_reload` | Reload AutoSSL |
| `/scripts/autossl_fix_tmp_path` | Corrigir path temp AutoSSL |
| `/scripts/autossl_generate_apache_conf` | Gerar config Apache SSL |
| `/scripts/generate_hostname_ssl` | Gerar SSL para hostname |
| `/scripts/hostname_ssl_restart_services` | Restart serviços após SSL hostname |
### MySQL / Base de Dados
| Script | Descrição |
|--------|-----------|
| `/scripts/upgrade_mysql` | Upgrade MySQL para 5.5 |
| `/scripts/mysql_pwd_reset` | Reset password root MySQL |
| `/scripts/mysql_fix_myisam_tables` | Reparar tabelas MyISAM |
| `/scripts/mysql_phpmyadmin_update` | Actualizar phpMyAdmin |
| `/scripts/mysql_set_max_connections` | Definir max_connections |
| `/scripts/mysql_show_max_connections` | Ver max_connections actual |
| `/scripts/checkdb` | Verificar erros nas BDs |
### Email / Mail
| Script | Descrição |
|--------|-----------|
| `/scripts/install_cbpolicyd` | Instalar limite emails/hora |
| `/scripts/check_postqueue` | Verificar mail queue |
| `/scripts/mail_queue_stats` | Estatísticas mail queue |
| `/scripts/mail_roundcube_update` | Actualizar RoundCube |
| `/scripts/mail_vmail_import` | Importar contas de /var/vmail |
| `/scripts/mail_rebuild_sni_certs` | Rebuild certificados mail |
### Web Servers
| Script | Descrição |
|--------|-----------|
| `/scripts/restart_httpd` | Restart Apache |
| `/scripts/apache_mpm_calculator` | Gerar config Apache MPM |
| `/scripts/varnish_clear_cache` | Limpar cache Varnish |
### PHP
| Script | Descrição |
|--------|-----------|
| `/scripts/phpfpm_rebuild_user_conf` | Rebuild config PHP-FPM |
| `/scripts/php_big_file_upload` | Definir limite upload |
| `/scripts/update_ioncube` | Actualizar IonCube |
| `/scripts/cron_fix_openbasedir` | Corrigir open_basedir cron |
| `/scripts/dso_handler_remove` | Remover handler PHP DSO |
### Segurança
| Script | Descrição |
|--------|-----------|
| `/scripts/cwp_bruteforce_protection` | Activar protecção brute-force |
| `/scripts/security_is_my_server_hacked` | **Verificar se servidor comprometido** |
| `/scripts/cwpsecure_update_rules` | Actualizar regras kernel seguro |
### FTP
| Script | Descrição |
|--------|-----------|
| `/scripts/reinstall_pure-ftpd` | Reinstalar Pure-FTP |
| `/scripts/install_pure-ftpd_tls` | Instalar TLS no FTP |
### DNS
| Script | Descrição |
|--------|-----------|
| `/scripts/dns_sync_slave2` | Sync zonas DNS |
### Aplicações
| Script | Descrição |
|--------|-----------|
| `/scripts/install_imagick` | Instalar ImageMagick |
| `/scripts/install_maldet` | Instalar Maldet (malware) |
| `/scripts/install_net2ftp` | Instalar Net2FTP |
| `/scripts/install_terminal` | Instalar terminal CWP |
| `/scripts/install_supportKey` | Instalar chave suporte |
| `/scripts/softaculous_fix_update` | Corrigir Softaculous |
### Antivírus / AntiSpam
| Script | Descrição |
|--------|-----------|
| `/scripts/freshclam` | Actualizar ClamAV |
| `/scripts/reinstall_clamd_amavisd` | Reinstalar ClamD e Amavis |
| `/scripts/clamd_fix_100_cpu_usage` | Corrigir ClamD 100% CPU |
### API
| Script | Descrição |
|--------|-----------|
| `/scripts/install_api` | Instalar/gerar API CWP |
| `/scripts/check_api` | Verificar API detalhado |
### Outros
| Script | Descrição |
|--------|-----------|
| `/scripts/chroot_add` | Adicionar JailKit |
| `/scripts/chroot_remove` | Remover JailKit |
| `/scripts/bandwidth_run` | Verificar bandwidth |
| `/scripts/disk_check` | Verificar partições |
| `/scripts/cgroups_blkio` | Obter disk id para cgroups |
| `/scripts/net_show_connections` | Ver conexões ordenadas |
| `/scripts/open_basedir-suphp` | Forçar open_basedir |
| `/scripts/image_rebuild_server_config` | Rebuild config servidor para default |
| `/scripts/cpanel_addhandlers` | Adicionar handlers cPanel ao suphp |
| `/scripts/el8_stream_convert_to_cwp_stable` | Converter CentOS 8 Stream para Stable |
---
## Scripts Mais Usados (Top 10)
1. `/scripts/user_backup USERNAME` - Backup de conta
2. `/scripts/whoowns DOMINIO` - Descobrir owner
3. `/scripts/list_users` - Listar contas
4. `/scripts/security_is_my_server_hacked` - Verificar segurança
5. `/scripts/mysql_pwd_reset` - Reset MySQL root
6. `/scripts/restart_httpd` - Restart Apache
7. `/scripts/check_postqueue` - Ver mail queue
8. `/scripts/cwp_version` - Ver versão CWP
9. `/scripts/update_cwp` - Actualizar CWP
10. `/scripts/varnish_clear_cache` - Limpar cache
---
## API CWP (/scripts/cwp_api)
Além dos scripts individuais, o CWP tem API unificada:
### Accounts
```bash
/scripts/cwp_api account remove_user USERNAME
/scripts/cwp_api account suspend_user USERNAME
/scripts/cwp_api account unsuspend_user USERNAME
/scripts/cwp_api account fix_perms USERNAME
/scripts/cwp_api account list_domains USERNAME
/scripts/cwp_api account update_diskquota_all
/scripts/cwp_api account update_limits_all
/scripts/cwp_api account mail_fix_permissions
/scripts/cwp_api account update_policyd_all
/scripts/cwp_api account rebuild_etc_named_conf
/scripts/cwp_api account rebuild_var_named_all
/scripts/cwp_api account rebuild_var_named USERNAME DOMAIN
```
### WebServers
```bash
/scripts/cwp_api webservers rebuild_all
/scripts/cwp_api webservers rebuild_user USERNAME
/scripts/cwp_api webservers restart
/scripts/cwp_api webservers reload
```
### Apps
```bash
/scripts/cwp_api apps install_softaculous
/scripts/cwp_api apps remove_softaculous
/scripts/cwp_api apps install_sitepad
/scripts/cwp_api apps remove_sitepad
```
---
## Checklist Antes de Executar
- [ ] Verificar nome do script correcto
- [ ] Verificar parâmetros necessários
- [ ] Backup se operação destrutiva
- [ ] Executar e verificar output
- [ ] Documentar acção
---
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| WordPress Config CLI | fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d | Sempre |
```
mcp__notebooklm__notebook_query({
notebook_id: "fb2f26bd-8cb0-4d4c-bafc-4f1ebb51c51d",
query: "<adaptar ao contexto de scripts CWP e administração CLI>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
---
**Versão:** 1.0.0 | **Autor:** Descomplicar®
**Fonte:** wiki.centos-webpanel.com/cwp-scripts
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
-329
View File
@@ -1,329 +0,0 @@
---
name: cwp-security
description: Gestão de segurança CWP com firewall CSF/LFD — bloqueio/desbloqueio de IPs, configuração de firewall e hardening baseado na documentação oficial.
disable-model-invocation: true
---
# /cwp-security - Segurança CWP (Documentação Oficial)
Gestão de segurança no CWP usando CSF/LFD. **Zero assumptions, zero hallucinations** - apenas comandos documentados.
**REGRA #38 - ZERO INVENCAO:** NUNCA improvisar comandos. Verificar estado actual ANTES de alterar. Pesquisar wiki CWP se necessario. Usar APENAS scripts oficiais.
---
## Servidor Alvo
| Servidor | IP | MCP | User |
|----------|-----|-----|------|
| **CWP Principal** | 176.9.3.158 | ssh-unified | root |
---
## Documentação Base
- [CSF Firewall command line](https://wiki.centos-webpanel.com/csf-firewall-command-line)
- [CSF/LFD Firewall configuration](https://wiki.centos-webpanel.com/csflfd-firewall-configuration)
- [CWP Security Instructions](https://wiki.centos-webpanel.com/cwp-security-instructions)
### Documentação Hub (Consultar SEMPRE)
**Manuais locais** (`Hub/06-Operacoes/Documentacao/Manuais/CWP/`):
- `CWP-Manual-Completo.md` - Admin Guide (seccao Security: CSF, Mod Security, Maldet, RKHunter, Lynis, Symlink, Shell Access) + Wiki (Firewall, SSL & Security) - **503KB**
**Quick Reference:** `Hub/06-Operacoes/Documentacao/Quick-Reference/QR-CWP.md`
**NotebookLM (pesquisa AI sobre toda a documentacao CWP):**
```
mcp__notebooklm__notebook_query notebook_id:"0ded7bd6-69b3-4c76-b327-452396bf7ea7" query:"csf firewall seguranca malware bloqueio ip"
```
---
## Paths de Configuração
| Path | Descrição |
|------|-----------|
| `/etc/csf/csf.conf` | Configuração principal CSF |
| `/etc/csf/` | Directório de configuração |
| `/etc/csf/csf.pignore` | Whitelist de processos |
| `/var/log/lfd.log` | Log do LFD |
---
## Comandos CSF Documentados
### Ajuda e Documentação
```bash
csf --help
man csf
```
### Controlo do Firewall
| Comando | Descrição |
|---------|-----------|
| `csf -e` | **Activar** CSF Firewall |
| `csf -x` | **Desactivar** CSF Firewall |
| `csf -r` | **Restart** (apenas regras iptables) |
| `csf -ra` | **Restart completo** (iptables + LFD) |
| `service lfd restart` | Restart apenas LFD |
### Gestão de IPs
| Comando | Descrição |
|---------|-----------|
| `csf -g IP` | **Verificar** se IP está bloqueado e porquê |
| `csf -d IP` | **Bloquear** IP permanentemente |
| `csf -td IP 86400` | **Bloquear temporário** (86400 = 24 horas em segundos) |
| `csf -dr IP` | **Desbloquear** IP |
| `csf -a IP` | **Whitelist** IP (acesso a todas as portas) |
| `csf -a 192.168.0.0/24` | **Whitelist** range de IPs |
| `csf -ta IP 86400` | **Whitelist temporário** (24 horas) |
| `csf -tf` | **Limpar** todos os bloqueios temporários |
| `csf -df` | **Limpar** todos os bloqueios permanentes |
### Verificar Logs
```bash
# Ver actividade de IP específico
grep "IP" /var/log/lfd.log
```
---
## Workflows
### 1. Verificar se IP está Bloqueado
```bash
csf -g 123.45.67.89
```
### 2. Bloquear IP Malicioso
```bash
# Bloquear permanentemente
csf -d 123.45.67.89
# Ou bloquear por 24 horas
csf -td 123.45.67.89 86400
```
### 3. Desbloquear IP (Cliente Legítimo)
```bash
csf -dr 123.45.67.89
```
### 4. Whitelist IP de Confiança
```bash
# Whitelist permanente
csf -a 188.251.199.30
# Whitelist range
csf -a 192.168.1.0/24
```
### 5. Limpar Todos os Bloqueios Temporários
```bash
csf -tf
```
### 6. Restart Completo do Firewall
```bash
csf -ra
```
---
## Configuração de Portas
**Ficheiro:** `/etc/csf/csf.conf`
```bash
# Portas abertas são definidas em:
# TCP_IN, TCP_OUT, UDP_IN, UDP_OUT
# Exemplo: abrir range de portas 30000-50000
# TCP_IN = "...,30000:50000"
```
**Importante:** Após alterações, executar `csf -r` para aplicar.
---
## Whitelist de Processos
**Ficheiro:** `/etc/csf/csf.pignore`
Adicionar processos que não devem ser monitorizados pelo LFD.
---
## Ignorar País (Evitar Bloqueios)
**Ficheiro:** `/etc/csf/csf.conf`
```bash
# Adicionar código do país para ignorar
CC_IGNORE = "PT"
```
---
## Scripts CWP de Segurança
| Script | Descrição |
|--------|-----------|
| `/scripts/cwp_bruteforce_protection` | Activa protecção brute-force CSF/LFD |
| `/scripts/security_is_my_server_hacked` | **Verifica** se servidor tem sinais de hack |
| `/scripts/cwpsecure_update_rules` | Actualiza regras do kernel seguro |
```bash
# Verificar se servidor foi comprometido
sh /scripts/security_is_my_server_hacked
# Activar protecção brute-force
sh /scripts/cwp_bruteforce_protection
```
---
## Configurações de Segurança (Documentadas)
### SSH Port
**Ficheiro:** `/etc/ssh/sshd_config`
```bash
# Após alterar porta SSH:
# 1. Actualizar csf.conf (TCP_IN)
# 2. service sshd restart
```
### tmpfs Security
**Ficheiro:** `/etc/fstab`
```bash
# Original:
tmpfs /dev/shm tmpfs defaults 0 0
# Seguro (documentado):
tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec 0 0
```
### Kernel Panic Reboot
**Ficheiro:** `/etc/sysctl.conf`
```bash
# Adicionar:
vm.panic_on_oom=1
kernel.panic=10
# Aplicar:
sysctl -p
```
### MySQL Connection Limits
**Ficheiro:** `/etc/my.cnf` ou `/etc/my.cnf.d/server.cnf`
```bash
# Secção [mysqld]:
max_user_connections=45
# Restart:
service mysql restart
```
---
## Anti-Patterns (NUNCA FAZER)
| Anti-Pattern | Risco | Alternativa |
|--------------|-------|-------------|
| Bloquear IP sem verificar | Bloquear cliente | `csf -g IP` primeiro |
| Desactivar firewall | Servidor exposto | Manter sempre activo |
| Editar iptables directamente | Conflito com CSF | Usar comandos CSF |
| Ignorar logs LFD | Não detectar ataques | Monitorizar regularmente |
---
## Validação Pós-Operação
```bash
# 1. Verificar firewall activo
csf -l | head -20
# 2. Verificar IP específico
csf -g IP
# 3. Verificar LFD activo
service lfd status
# 4. Testar conectividade
curl -sI http://localhost | head -5
```
---
## Thresholds de Alerta
| Condição | Acção |
|----------|-------|
| Muitos IPs bloqueados por LFD | Verificar se ataque ou falsos positivos |
| IP legítimo bloqueado | Desbloquear + whitelist |
| Firewall desactivado | Activar imediatamente |
---
## Checklist de Execução
- [ ] Verificar estado actual (`csf -l`)
- [ ] Identificar IP correcto
- [ ] Executar comando apropriado
- [ ] Verificar resultado (`csf -g IP`)
- [ ] Documentar acção tomada
---
## Contexto NotebookLM
ANTES de executar, consultar notebooks para contexto especializado:
| Notebook | ID | Consultar quando |
|----------|-----|-----------------|
| Cibersegurança WordPress | 5f60adfd-2435-4725-8c12-9c11c5f51d75 | Sempre |
```
mcp__notebooklm__notebook_query({
notebook_id: "5f60adfd-2435-4725-8c12-9c11c5f51d75",
query: "<adaptar ao contexto de segurança CWP e firewall>"
})
```
Integrar insights do NotebookLM nas recomendações e decisões.
---
**Versão:** 1.0.0 | **Autor:** Descomplicar®
**Fonte:** wiki.centos-webpanel.com/csf-firewall-command-line
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
-264
View File
@@ -1,264 +0,0 @@
---
name: cwp-ssl
description: Gestão de certificados SSL no CWP com acme.sh nativo — emissão, renovação e troubleshooting baseado na documentação oficial.
disable-model-invocation: true
---
# /cwp-ssl - Gestão SSL CWP (Documentação Oficial)
Gestão de certificados SSL no CWP usando acme.sh nativo. **Zero assumptions, zero hallucinations** - apenas comandos documentados oficialmente.
**REGRA #38 - ZERO INVENCAO:** NUNCA improvisar comandos. Verificar estado actual ANTES de alterar. Pesquisar wiki CWP se necessario. Usar APENAS scripts oficiais.
---
## Servidor Alvo
| Servidor | IP | MCP | User |
|----------|-----|-----|------|
| **CWP Principal** | 176.9.3.158 | ssh-unified | root |
---
## Documentação Base
- [AutoSSL CWP Wiki](https://docs.control-webpanel.com/docs/admin-guide/ssl/autossl)
- [acme.sh Documentation](https://wiki.centos-webpanel.com/)
### Documentação Hub (Consultar SEMPRE)
**Manuais locais** (`Hub/06-Operacoes/Documentacao/Manuais/CWP/`):
- `CWP-Manual-Completo.md` - Admin Guide + Wiki (seccoes SSL & Security, WebServers) - **503KB**
- `CWP-Guia-do-Utilizador.md` - Painel utilizador (seccao AutoSSL) - **72KB**
- `CWP-Ferramentas-Desenvolvimento.md` - API AutoSSL (add/del/list/renew) - **82KB**
**Quick Reference:** `Hub/06-Operacoes/Documentacao/Quick-Reference/QR-CWP.md`
**NotebookLM (pesquisa AI sobre toda a documentacao CWP):**
```
mcp__notebooklm__notebook_query notebook_id:"0ded7bd6-69b3-4c76-b327-452396bf7ea7" query:"ssl certificado autossl renovacao"
```
---
## Paths Oficiais (Documentados)
| Path | Descrição |
|------|-----------|
| `/root/.acme.sh/` | Instalação acme.sh |
| `/root/.acme.sh/cwp_certs/` | Certificados CWP |
| `/root/.acme.sh/acme.sh.log` | Log acme.sh |
| `/var/log/cwp/autossl.log` | Log AutoSSL CWP |
| `/usr/local/apache/autossl_tmp/` | **Webroot para validação SSL** |
| `/etc/pki/tls/certs/` | Certificados Nginx |
| `/etc/pki/tls/private/` | Chaves privadas Nginx |
---
## Scripts Oficiais
| Script | Descrição |
|--------|-----------|
| `/scripts/install_acme` | Instala/reinstala acme.sh |
| `/scripts/autossl_reload` | Reload AutoSSL |
| `/scripts/generate_hostname_ssl` | Gera SSL para hostname |
| `/scripts/hostname_ssl_restart_services` | Restart serviços após SSL hostname |
---
## Comandos Documentados
### Verificar Certificados Instalados
```bash
# Listar todos os certificados CWP
ls /root/.acme.sh/cwp_certs/
```
### Verificar Próxima Renovação
```bash
# Ver data de próxima renovação para um domínio
grep "Le_NextRenewTimeStr" /root/.acme.sh/cwp_certs/www.DOMINIO_ecc/www.DOMINIO.conf
```
### Forçar Renovação Manual
```bash
# COMANDO OFICIAL para forçar renovação
/root/.acme.sh/acme.sh --renew -d DOMINIO --force --home /root/.acme.sh/cwp_certs
```
### Verificar Certificado Activo
```bash
# Verificar validade de certificado em produção
echo | openssl s_client -connect DOMINIO:443 2>/dev/null | openssl x509 -noout -dates
```
### Ver Logs de Renovação
```bash
# Log acme.sh
tail -100 /root/.acme.sh/acme.sh.log | grep DOMINIO
# Log AutoSSL CWP
tail -100 /var/log/cwp/autossl.log
```
---
## Cron de Renovação Automática
**Cron CWP (documentado):** `23 2 * * *` - Renovação diária às 02:23
```bash
# Verificar cron de renovação
crontab -l | grep -i acme
```
---
## Workflows
### 1. Listar Todos os Certificados
```bash
for d in $(ls /root/.acme.sh/cwp_certs/); do
echo "=== $d ==="
grep -E 'Le_NextRenewTimeStr|Le_Alt' /root/.acme.sh/cwp_certs/$d/*.conf 2>/dev/null | head -3
done
```
### 2. Verificar Certificados Expirando (<30 dias)
```bash
for d in $(ls /root/.acme.sh/cwp_certs/); do
domain=$(echo $d | sed 's/_ecc$//')
echo "=== $domain ==="
echo | openssl s_client -connect $domain:443 2>/dev/null | openssl x509 -noout -dates
done 2>&1 | grep -A1 "notAfter"
```
### 3. Forçar Renovação de Domínio Específico
```bash
# Substituir DOMINIO pelo domínio real
/root/.acme.sh/acme.sh --renew -d DOMINIO --force --home /root/.acme.sh/cwp_certs
```
### 4. Reinstalar acme.sh (se corrompido)
```bash
# COMANDO OFICIAL
sh /scripts/install_acme
```
### 5. Gerar SSL para Hostname
```bash
# COMANDO OFICIAL
sh /scripts/generate_hostname_ssl
sh /scripts/hostname_ssl_restart_services
```
---
## Troubleshooting Documentado
### Renovação Falha - Muitos Subdomínios
**Problema:** `Le_Alt` contém muitos subdomínios (mail, ftp, cpanel) - qualquer falha bloqueia tudo.
**Solução documentada:**
```bash
# Editar .conf para ter apenas domínio principal
vi /root/.acme.sh/cwp_certs/www.DOMINIO_ecc/www.DOMINIO.conf
# Reduzir Le_Alt para apenas 'DOMINIO'
```
### Webroot Incorrecto
**Problema:** Validação falha porque ficheiro `.well-known/acme-challenge/` não é encontrado.
**Solução documentada:**
```bash
# O Nginx CWP serve validação de pasta GLOBAL, não do site
# Pasta correcta:
/usr/local/apache/autossl_tmp/
# NUNCA usar (não funciona):
/home/user/domain.pt/.well-known/
```
### Ver Erro Específico
```bash
tail -100 /root/.acme.sh/acme.sh.log | grep -E 'error|Error|ERRO'
```
---
## Anti-Patterns (NUNCA FAZER)
| Anti-Pattern | Risco | Alternativa |
|--------------|-------|-------------|
| **Usar certbot** | Conflito com acme.sh nativo | Usar acme.sh CWP |
| Incluir mail/ftp/cpanel em Le_Alt | Falha em cascata | Apenas domínio principal |
| Criar hooks manuais | Sobrescrito em update | Usar scripts oficiais |
| Editar certificados em /etc/pki/ | Sobrescrito | Editar em cwp_certs |
---
## Validação Pós-Operação
Após qualquer operação SSL, validar:
```bash
# 1. Certificado instalado correctamente
echo | openssl s_client -connect DOMINIO:443 2>/dev/null | openssl x509 -noout -subject -dates
# 2. Sem erros no log
tail -20 /root/.acme.sh/acme.sh.log | grep -i error
# 3. Site acessível via HTTPS
curl -sI https://DOMINIO | head -5
```
---
## Thresholds de Alerta
| Condição | Status | Acção |
|----------|--------|-------|
| Expira >30 dias | OK | Nenhuma |
| Expira 15-30 dias | Warning | Monitorizar |
| Expira <15 dias | **Crítico** | Renovar imediatamente |
| Expirado | **Urgente** | Forçar renovação |
---
## Checklist de Execução
- [ ] Verificar domínio existe em cwp_certs
- [ ] Verificar webroot está acessível
- [ ] Executar comando de renovação se necessário
- [ ] Validar certificado após operação
- [ ] Verificar logs sem erros
---
**Versão:** 1.0.0 | **Autor:** Descomplicar®
**Fonte:** Documentação oficial CWP (docs.control-webpanel.com, wiki.centos-webpanel.com)
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
@@ -1,280 +0,0 @@
---
name: cwp-webserver
description: Gestão de webservers no CWP — configuração de Apache, Nginx, rebuild de vhosts e restart de serviços via API oficial.
disable-model-invocation: true
---
# /cwp-webserver - WebServers CWP (Documentação Oficial)
Gestão de webservers no CWP. **Zero assumptions, zero hallucinations** - apenas comandos documentados.
**REGRA #38 - ZERO INVENCAO:** NUNCA improvisar comandos. Verificar estado actual ANTES de alterar. Pesquisar wiki CWP se necessario. Usar APENAS scripts oficiais.
---
## Servidor Alvo
| Servidor | IP | MCP | User |
|----------|-----|-----|------|
| **CWP Principal** | 176.9.3.158 | ssh-unified | root |
---
## Documentação Base
- [CWP Admin API](https://wiki.centos-webpanel.com/cwp-admin-api)
- [CWP Scripts](https://wiki.centos-webpanel.com/cwp-scripts)
- [WebServers Update](https://wiki.centos-webpanel.com/webservers-update)
### Documentação Hub (Consultar SEMPRE)
**Manuais locais** (`Hub/06-Operacoes/Documentacao/Manuais/CWP/`):
- `CWP-Manual-Completo.md` - Admin Guide (seccao WebServers Settings, Apache, Nginx) + Wiki (WebServers & Apache) - **503KB**
- `CWP-Guia-do-Utilizador.md` - Painel utilizador (seccao Domains, Redirect) - **72KB**
**Quick Reference:** `Hub/06-Operacoes/Documentacao/Quick-Reference/QR-CWP.md`
**NotebookLM (pesquisa AI sobre toda a documentacao CWP):**
```
mcp__notebooklm__notebook_query notebook_id:"0ded7bd6-69b3-4c76-b327-452396bf7ea7" query:"apache nginx webserver configuracao rebuild"
```
---
## API WebServers (Documentada)
### Rebuild Todas as Configurações
```bash
/scripts/cwp_api webservers rebuild_all
```
### Rebuild Configuração de Utilizador
```bash
/scripts/cwp_api webservers rebuild_user USERNAME
```
### Restart WebServers
```bash
/scripts/cwp_api webservers restart
```
### Reload WebServers
```bash
/scripts/cwp_api webservers reload
```
---
## Scripts Oficiais
| Script | Descrição |
|--------|-----------|
| `/scripts/restart_httpd` | Restart Apache |
| `/scripts/cwpsrv_rebuild_user_conf` | Rebuild config de todos os utilizadores |
| `/scripts/varnish_clear_cache` | Limpar cache Varnish |
| `/scripts/apache_mpm_calculator` | Gerar configuração Apache MPM |
---
## Comandos de Gestão
### Restart Apache
```bash
sh /scripts/restart_httpd
```
### Rebuild Configurações de Utilizadores
```bash
sh /scripts/cwpsrv_rebuild_user_conf
```
### Limpar Cache Varnish
```bash
sh /scripts/varnish_clear_cache
```
### Gerar Configuração MPM
```bash
sh /scripts/apache_mpm_calculator
```
---
## Verificações
### Status Apache
```bash
systemctl status httpd --no-pager | head -15
```
### Status Nginx
```bash
systemctl status nginx --no-pager | head -15
```
### Testar Configuração Apache
```bash
httpd -t
```
### Testar Configuração Nginx
```bash
nginx -t
```
### Ver Virtual Hosts
```bash
httpd -S 2>&1 | grep -E 'port|namevhost' | head -20
```
---
## Workflows
### 1. Rebuild Completo (Problema de Configuração)
```bash
# Rebuild todas as configs
/scripts/cwp_api webservers rebuild_all
# Restart
/scripts/cwp_api webservers restart
```
### 2. Rebuild Utilizador Específico
```bash
# Rebuild apenas um utilizador
/scripts/cwp_api webservers rebuild_user USERNAME
# Reload (sem downtime)
/scripts/cwp_api webservers reload
```
### 3. Após Alterações em Site
```bash
# Reload (mais suave)
/scripts/cwp_api webservers reload
```
### 4. Limpar Cache Varnish (Se Activo)
```bash
sh /scripts/varnish_clear_cache
```
### 5. Verificar Antes de Restart
```bash
# Testar configurações primeiro
httpd -t && nginx -t
# Se OK, restart
/scripts/cwp_api webservers restart
```
---
## REGRA FUNDAMENTAL: ZERO INVENCAO (Regra #38)
**NUNCA improvisar comandos para Apache/Varnish/Nginx/PHP no CWP.**
Protocolo obrigatorio ANTES de qualquer accao:
1. **VERIFICAR** estado actual (systemctl status, logs, config activa)
2. **PESQUISAR** skills /cwp-* para comandos oficiais
3. **PESQUISAR** wiki CWP se skill nao cobre o caso
4. **USAR** apenas scripts oficiais CWP (/scripts/*)
5. **NUNCA** inventar comandos, flags, ou configuracoes
Se nao encontra o comando correcto: **PERGUNTAR ao utilizador**, nunca adivinhar.
Exemplos de invencao proibida:
- Editar ficheiros de config Apache directamente em vez de usar rebuild
- Inventar flags para apachectl que nao estao documentadas
- Alterar parametros de sistema (sysctl, somaxconn) sem pesquisar impacto
- Matar processos (kill -9) sem entender o que esta a correr
- Desactivar modulos/servicos sem confirmar dependencias
---
## Anti-Patterns (NUNCA FAZER)
| Anti-Pattern | Risco | Alternativa |
|--------------|-------|-------------|
| Inventar comandos | PHP desactivado, site offline | Pesquisar skills/wiki primeiro |
| Restart sem testar config | Downtime | `httpd -t` primeiro |
| Editar vhosts manualmente | Sobrescrito | Usar CWP ou rebuild |
| Ignorar erros de teste | Site offline | Corrigir antes restart |
| Restart em vez de reload | Downtime | Reload quando possível |
| Alterar sysctl sem pesquisar | Instabilidade | Verificar documentacao |
| kill -9 em processos CWP | Servicos corrompidos | Usar scripts oficiais |
---
## Diferença Restart vs Reload
| Operação | Efeito | Quando Usar |
|----------|--------|-------------|
| **Reload** | Recarrega config sem parar | Alterações pequenas |
| **Restart** | Para e inicia novamente | Alterações grandes, módulos |
---
## Validação Pós-Operação
```bash
# 1. Verificar serviços activos
systemctl is-active httpd nginx
# 2. Testar localhost
curl -sI localhost | head -5
# 3. Testar domínio específico
curl -sI http://DOMINIO | head -5
# 4. Verificar logs de erro
tail -20 /var/log/httpd/error_log
tail -20 /var/log/nginx/error.log
```
---
## Checklist de Execução
- [ ] Testar configuração (`httpd -t`, `nginx -t`)
- [ ] Escolher reload vs restart
- [ ] Executar comando
- [ ] Verificar serviços activos
- [ ] Testar acesso aos sites
- [ ] Verificar logs se problemas
---
**Versão:** 1.0.0 | **Autor:** Descomplicar®
**Fonte:** wiki.centos-webpanel.com/cwp-admin-api, wiki.centos-webpanel.com/cwp-scripts
---
## Healing Log
Registo de erros conhecidos e como evitá-los. Lido automaticamente antes de executar.
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```
*Adicionar nova linha após cada erro corrigido.*
+484
View File
@@ -0,0 +1,484 @@
---
name: cwp
description: Meta-skill CWP (CentOS Web Panel, servidor 176.9.3.158) cobrindo gestão de contas, backups, email/Postfix/DKIM, PHP Switcher/Selector, segurança CSF/LFD, SSL/acme.sh, webservers Apache/Nginx e referência completa dos scripts oficiais. Triggers — cwp, centos web panel, cwp_api, /scripts/, csf, lfd, acme, autossl, postfix, dkim, php selector, php switcher, varnish, httpd, nginx cwp, user_backup, whoowns, list_users, hostname ssl, mail queue, fix_perms.
---
# /cwp - Meta-skill CWP (CentOS Web Panel)
Skill unificada para o servidor **CWP Principal `176.9.3.158`** (MCP `ssh-unified`, user `root`). Substitui as antigas cwp-accounts, cwp-backup, cwp-email, cwp-php, cwp-scripts, cwp-security, cwp-ssl, cwp-webserver.
**REGRA #38 — ZERO INVENÇÃO:** NUNCA improvisar comandos. Verificar estado actual ANTES de alterar. Pesquisar wiki CWP se necessário. Usar APENAS scripts oficiais (`/scripts/*` e `/scripts/cwp_api`). Se não souber: PERGUNTAR.
## Documentação base
- Wiki: https://wiki.centos-webpanel.com/cwp-admin-api , /cwp-scripts , /csf-firewall-command-line
- Hub manuais: `Hub/06-Operacoes/Documentacao/Manuais/CWP/` (`CWP-Manual-Completo.md` 503KB, `CWP-Ferramentas-Desenvolvimento.md` 82KB, `CWP-Guia-do-Utilizador.md`, `CWP-Guia-do-Revendedor.md`)
- QR: `Hub/06-Operacoes/Documentacao/Quick-Reference/QR-CWP.md`
- NotebookLM CWP: `0ded7bd6-69b3-4c76-b327-452396bf7ea7`
- NotebookLM Cibersegurança WordPress (para secção segurança): `5f60adfd-2435-4725-8c12-9c11c5f51d75`
```
mcp__notebooklm__notebook_query notebook_id:"0ded7bd6-69b3-4c76-b327-452396bf7ea7" query:"<adaptar>"
```
---
## 1. Contas (accounts)
### Consulta (read-only)
```bash
sh /scripts/list_users
sh /scripts/list_domains
sh /scripts/list_subdomains
sh /scripts/whoowns DOMINIO
```
### API gestão
```bash
/scripts/cwp_api account remove_user USERNAME
/scripts/cwp_api account suspend_user USERNAME
/scripts/cwp_api account unsuspend_user USERNAME
/scripts/cwp_api account fix_perms USERNAME # OBRIGATÓRIO após qualquer SSH manual
/scripts/cwp_api account list_domains USERNAME
```
### Bandwidth
```bash
/scripts/cwp_api account unsuspend_bandwidth USERNAME # após aumentar limites
/scripts/cwp_api account reset_bandwidth USERNAME
```
### Massa
```bash
/scripts/cwp_api account update_diskquota_all
/scripts/cwp_api account update_limits_all # quota, hourly_emails, cgroups, nproc, apache_nproc, inode, nofile
/scripts/cwp_api account mail_fix_permissions
/scripts/cwp_api account update_policyd_all
```
### DNS
```bash
/scripts/cwp_api account rebuild_etc_named_conf
/scripts/cwp_api account rebuild_var_named_all
/scripts/cwp_api account rebuild_var_named USERNAME DOMAIN
```
### Auxiliares
```bash
sh /scripts/ulimit_user_check USERNAME
sh /scripts/cwpsrv_rebuild_user_conf
```
### Workflows típicos
1. Suspender: `suspend_user` -> `list_users | grep`.
2. Reactivar: `unsuspend_user` -> `fix_perms`.
3. Pós-SSH manual: SEMPRE `fix_perms USERNAME`.
### Validação
```bash
sh /scripts/list_users | grep USERNAME
/scripts/cwp_api account list_domains USERNAME
curl -sI http://DOMINIO | head -5
```
### Anti-patterns
Remover sem backup | editar ficheiros manualmente | esquecer fix_perms após SSH | suspender sem avisar cliente.
---
## 2. Backups
### Comando principal
```bash
sh /scripts/user_backup USERNAME # backup completo: ficheiros, BD, emails, configs
```
Localização padrão: `/backup/`. Cron: `/usr/local/cwpsrv/htdocs/resources/admin/include/cron_backup.php`.
### Workflow
```bash
df -h /backup # 1. espaço
sh /scripts/whoowns DOMINIO # 2. identificar
du -sh /home/USERNAME/ # 3. tamanho conta
sh /scripts/user_backup USERNAME # 4. backup
ls -lh /backup/ | grep USERNAME # 5. verificar
tar -tzf /backup/FILE.tar.gz > /dev/null && echo OK || echo CORRUPTO # 6. integridade
```
### Restauro manual (GUI restore não é fiável segundo doc)
```bash
mkdir /tmp/restore_test
tar -xzf /backup/FILE.tar.gz -C /tmp/restore_test
# copiar manualmente para localização correcta
chown -R USERNAME:USERNAME /home/USERNAME/public_html/
rm -rf /tmp/restore_test
```
### Boas práticas
Backup antes de operações destrutivas | manter cópias remotas (GDrive/S3) | testar restauro periodicamente | limpar >30 dias | nunca confiar só em locais.
---
## 3. Email (Postfix, DKIM, Mail Queue)
### Scripts oficiais
| Script | Função |
|--------|--------|
| `/scripts/install_cbpolicyd` | Instalar limites emails/hora |
| `/scripts/check_postqueue` | Verificar mail queue |
| `/scripts/mail_queue_stats` | Estatísticas queue |
| `/scripts/mail_roundcube_update` | Update RoundCube |
| `/scripts/mail_vmail_import` | Importar contas /var/vmail |
| `/scripts/mail_rebuild_sni_certs` | Rebuild certificados mail |
### DKIM/SPF
1. CWP.admin -> Postfix Manager -> rebuild com DKIM&SPF activos.
2. DKIM Manager -> adicionar key por domínio.
3. Testar: enviar para `check-auth@verifier.port25.com` (deve responder "DKIM check: pass").
4. DKIM 2048-bit: dividir TXT record ao meio, ambas partes em quotes.
### Mail queue
```bash
sh /scripts/check_postqueue
sh /scripts/mail_queue_stats
postqueue -p # ver
postqueue -f # flush
postcat -q QUEUE_ID # ver mensagem
postsuper -d ALL # CUIDADO: limpa tudo
```
### Policyd
```bash
sh /scripts/install_cbpolicyd
/scripts/cwp_api account update_policyd_all
```
### Após SSL: rebuild certs mail
```bash
sh /scripts/mail_rebuild_sni_certs
```
### Anti-spam
- rDNS: só configurável pelo provider de hosting.
- Blacklists: https://mxtoolbox.com/blacklists.aspx.
- DMARC recomendado.
### Validação
```bash
echo "Test" | mail -s "Subject" dest@example.com
tail -100 /var/log/maillog
```
### Anti-patterns
Limpar queue sem ver | ignorar blacklists | DKIM sem testar | editar postfix directamente.
---
## 4. PHP (Switcher / Selector / FPM)
3 ferramentas: **PHP Switcher** (versão default), **PHP Selector** (por pasta), **PHP-FPM Selector**.
Versões suportadas (Selector): 4.4, 5.2-5.6, 7.0-7.4, 8.0, 8.1.
### Paths
| Path | Descrição |
|------|-----------|
| `/usr/local/cwpsrv/htdocs/resources/conf/el7/php_switcher/` | Configs CentOS 7 |
| `/usr/local/cwpsrv/htdocs/resources/conf/el8/php_switcher/` | Configs CentOS 8 |
| `/var/log/php-rebuild.log` | Log compilação |
### Comandos
```bash
php -v
php -i | grep -E 'memory_limit|upload_max|post_max|max_execution'
php -i | grep -E 'opcache.enable|opcache.memory_consumption'
ps aux | grep php-fpm | wc -l
sh /scripts/phpfpm_rebuild_user_conf
tail -f /var/log/php-rebuild.log # monitorizar instalação versão PHP
```
### Desactivar funções perigosas
```bash
echo "disable_functions = exec, system, popen, proc_open, shell_exec, passthru, show_source" \
> /usr/local/php/php.d/disabled_function.ini
```
(cada versão PHP tem path próprio)
### Flags compilação
Editar `/usr/local/cwpsrv/htdocs/resources/conf/el7/php_switcher/7.0.ini`:
```ini
[nome-unico]
default=0
option="--enable-opcao"
```
**Aviso doc:** "CWP update will overwrite these files" — documentar para reaplicar.
### Anti-patterns
Editar .ini sem documentar | compilar PHP manualmente | ignorar php-rebuild.log.
---
## 5. Segurança (CSF / LFD)
### Paths
`/etc/csf/csf.conf` | `/etc/csf/csf.pignore` | `/var/log/lfd.log`
### Controlo firewall
| Comando | Descrição |
|---------|-----------|
| `csf -e` | Activar |
| `csf -x` | Desactivar |
| `csf -r` | Restart iptables |
| `csf -ra` | Restart completo (iptables + LFD) |
| `service lfd restart` | Restart só LFD |
### IPs
| Comando | Descrição |
|---------|-----------|
| `csf -g IP` | Verificar bloqueio e razão |
| `csf -d IP` | Bloquear permanente |
| `csf -td IP 86400` | Bloquear temp (segundos) |
| `csf -dr IP` | Desbloquear |
| `csf -a IP` | Whitelist permanente |
| `csf -a 192.168.0.0/24` | Whitelist range |
| `csf -ta IP 86400` | Whitelist temp |
| `csf -tf` | Limpar bloqueios temp |
| `csf -df` | Limpar bloqueios permanentes |
```bash
grep "IP" /var/log/lfd.log
```
### Configuração portas
`/etc/csf/csf.conf` -> `TCP_IN`, `TCP_OUT`, `UDP_IN`, `UDP_OUT`. Após alterar: `csf -r`.
### Ignorar país
```
CC_IGNORE = "PT"
```
### Scripts segurança
```bash
sh /scripts/cwp_bruteforce_protection
sh /scripts/security_is_my_server_hacked # verifica sinais de hack
sh /scripts/cwpsecure_update_rules
```
### Hardening documentado
- **SSH port:** alterar `/etc/ssh/sshd_config` -> actualizar `csf.conf` TCP_IN -> `service sshd restart`.
- **tmpfs:** `/etc/fstab` -> `tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec 0 0`.
- **Kernel panic:** `/etc/sysctl.conf` -> `vm.panic_on_oom=1`, `kernel.panic=10`, `sysctl -p`.
- **MySQL:** `[mysqld] max_user_connections=45`, `service mysql restart`.
### Validação
```bash
csf -l | head -20
csf -g IP
service lfd status
```
### Anti-patterns
Bloquear sem `csf -g` | desactivar firewall | editar iptables directamente | ignorar logs LFD.
---
## 6. SSL (acme.sh nativo CWP)
### Paths oficiais
| Path | Descrição |
|------|-----------|
| `/root/.acme.sh/cwp_certs/` | Certificados CWP |
| `/root/.acme.sh/acme.sh.log` | Log acme.sh |
| `/var/log/cwp/autossl.log` | Log AutoSSL |
| `/usr/local/apache/autossl_tmp/` | **Webroot validação** (única pasta válida) |
| `/etc/pki/tls/certs/` | Certs Nginx |
| `/etc/pki/tls/private/` | Chaves Nginx |
### Scripts
```bash
sh /scripts/install_acme # reinstalar acme.sh
sh /scripts/autossl_reload
sh /scripts/generate_hostname_ssl
sh /scripts/hostname_ssl_restart_services
```
### Comandos chave
```bash
ls /root/.acme.sh/cwp_certs/
grep "Le_NextRenewTimeStr" /root/.acme.sh/cwp_certs/www.DOMINIO_ecc/www.DOMINIO.conf
# FORÇAR renovação (oficial)
/root/.acme.sh/acme.sh --renew -d DOMINIO --force --home /root/.acme.sh/cwp_certs
# Verificar produção
echo | openssl s_client -connect DOMINIO:443 2>/dev/null | openssl x509 -noout -dates
tail -100 /root/.acme.sh/acme.sh.log | grep DOMINIO
tail -100 /var/log/cwp/autossl.log
```
Cron renovação CWP: `23 2 * * *` (diário 02:23). `crontab -l | grep -i acme`.
### Workflow listar todos
```bash
for d in $(ls /root/.acme.sh/cwp_certs/); do
echo "=== $d ==="
grep -E 'Le_NextRenewTimeStr|Le_Alt' /root/.acme.sh/cwp_certs/$d/*.conf 2>/dev/null | head -3
done
```
### Troubleshooting documentado
- **Muitos subdomínios em Le_Alt** (mail/ftp/cpanel): qualquer falha bloqueia tudo. **Solução:** editar `.conf` e reduzir `Le_Alt` ao domínio principal.
- **Webroot incorrecto:** Nginx CWP serve validação de pasta GLOBAL `/usr/local/apache/autossl_tmp/`. NUNCA usar `/home/user/.../.well-known/`.
### Thresholds
| Expira | Acção |
|--------|-------|
| >30d | OK |
| 15-30d | Monitorizar |
| <15d | Crítico — renovar |
| Expirado | Forçar renovação |
### Anti-patterns
**Usar certbot** (conflito com acme.sh nativo) | incluir mail/ftp/cpanel em `Le_Alt` | hooks manuais (sobrescritos em update) | editar certs em `/etc/pki/`.
---
## 7. WebServers (Apache / Nginx / Varnish)
### API webservers
```bash
/scripts/cwp_api webservers rebuild_all
/scripts/cwp_api webservers rebuild_user USERNAME
/scripts/cwp_api webservers restart
/scripts/cwp_api webservers reload
```
### Scripts
```bash
sh /scripts/restart_httpd
sh /scripts/cwpsrv_rebuild_user_conf
sh /scripts/varnish_clear_cache
sh /scripts/apache_mpm_calculator
```
### Verificações
```bash
systemctl status httpd --no-pager | head -15
systemctl status nginx --no-pager | head -15
httpd -t # SEMPRE testar antes de restart
nginx -t
httpd -S 2>&1 | grep -E 'port|namevhost' | head -20
```
### Restart vs Reload
| Operação | Quando |
|----------|--------|
| Reload | Alterações pequenas, sem downtime |
| Restart | Alterações grandes, módulos |
### Workflow rebuild completo
```bash
/scripts/cwp_api webservers rebuild_all
/scripts/cwp_api webservers restart
```
### Validação
```bash
systemctl is-active httpd nginx
curl -sI localhost | head -5
curl -sI http://DOMINIO | head -5
tail -20 /var/log/httpd/error_log
tail -20 /var/log/nginx/error.log
```
### Anti-patterns (críticos)
Inventar comandos (PHP desactivado, site offline) | restart sem `httpd -t` | editar vhosts manualmente (sobrescritos) | ignorar erros teste | restart em vez de reload | alterar sysctl sem pesquisar | `kill -9` em processos CWP.
---
## 8. Scripts oficiais CWP — referência completa
Forma de execução: `sh /scripts/NOME` ou `/scripts/NOME`.
### Sistema CWP
| Script | Descrição |
|--------|-----------|
| `cwp_version` | Ver versão CWP |
| `update_cwp` | Actualizar CWP |
| `restart_cwpsrv` / `reload_cwpsrv` | Restart/reload painel |
| `cwp_monitor` | Verificar load |
| `cwp_set_memory_limit` | Alterar memory limit |
| `add_alert` | Adicionar alerta |
### Utilizadores
`list_users`, `list_domains`, `list_subdomains`, `whoowns DOMINIO`, `user_backup USERNAME`, `ulimit_user_check`, `cwpsrv_rebuild_user_conf`.
### SSL
`install_acme`, `autossl_reload`, `autossl_fix_tmp_path`, `autossl_generate_apache_conf`, `generate_hostname_ssl`, `hostname_ssl_restart_services`.
### MySQL
`upgrade_mysql`, `mysql_pwd_reset`, `mysql_fix_myisam_tables`, `mysql_phpmyadmin_update`, `mysql_set_max_connections`, `mysql_show_max_connections`, `checkdb`.
### Email
`install_cbpolicyd`, `check_postqueue`, `mail_queue_stats`, `mail_roundcube_update`, `mail_vmail_import`, `mail_rebuild_sni_certs`.
### WebServers
`restart_httpd`, `apache_mpm_calculator`, `varnish_clear_cache`.
### PHP
`phpfpm_rebuild_user_conf`, `php_big_file_upload`, `update_ioncube`, `cron_fix_openbasedir`, `dso_handler_remove`.
### Segurança
`cwp_bruteforce_protection`, `security_is_my_server_hacked`, `cwpsecure_update_rules`.
### FTP
`reinstall_pure-ftpd`, `install_pure-ftpd_tls`.
### DNS
`dns_sync_slave2`.
### Aplicações
`install_imagick`, `install_maldet`, `install_net2ftp`, `install_terminal`, `install_supportKey`, `softaculous_fix_update`.
### Antivírus
`freshclam`, `reinstall_clamd_amavisd`, `clamd_fix_100_cpu_usage`.
### API
`install_api`, `check_api`.
### Outros
`chroot_add`/`chroot_remove`, `bandwidth_run`, `disk_check`, `cgroups_blkio`, `net_show_connections`, `open_basedir-suphp`, `image_rebuild_server_config`, `cpanel_addhandlers`, `el8_stream_convert_to_cwp_stable`.
### Top 10 mais usados
1. `user_backup USERNAME`
2. `whoowns DOMINIO`
3. `list_users`
4. `security_is_my_server_hacked`
5. `mysql_pwd_reset`
6. `restart_httpd`
7. `check_postqueue`
8. `cwp_version`
9. `update_cwp`
10. `varnish_clear_cache`
### API unificada — outras secções
**Apps:**
```bash
/scripts/cwp_api apps install_softaculous
/scripts/cwp_api apps remove_softaculous
/scripts/cwp_api apps install_sitepad
/scripts/cwp_api apps remove_sitepad
```
---
**Versão:** 2.0.0 (consolidação 8->1, 07-04-2026) | **Autor:** Descomplicar®
**Fonte:** wiki.centos-webpanel.com, docs.control-webpanel.com
## Healing Log
```jsonl
{"date":"","issue":"","fix":"","source":"user|auto"}
```