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:
@@ -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.*
|
|
||||||
@@ -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.*
|
|
||||||
@@ -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.*
|
|
||||||
@@ -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.*
|
|
||||||
@@ -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.*
|
|
||||||
@@ -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.*
|
|
||||||
@@ -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"}
|
||||||
|
```
|
||||||
@@ -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.*
|
|
||||||
@@ -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.*
|
|
||||||
@@ -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.*
|
|
||||||
@@ -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.*
|
|
||||||
@@ -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.*
|
|
||||||
@@ -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.*
|
|
||||||
@@ -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.*
|
|
||||||
@@ -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"}
|
||||||
|
```
|
||||||
Reference in New Issue
Block a user