From 2ec16674c2b5fb7a1a7ceb172dcbd90191a01a9a Mon Sep 17 00:00:00 2001 From: Emanuel Almeida Date: Tue, 7 Apr 2026 05:00:35 +0100 Subject: [PATCH] =?UTF-8?q?chore(skills):=20consolidar=20n8n-*=20(6?= =?UTF-8?q?=E2=86=921)=20e=20cwp-*=20(8=E2=86=921)=20em=20meta-skills?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.6 (1M context) --- automacao/skills/n8n-chatbot/SKILL.md | 313 ------------ automacao/skills/n8n-health/SKILL.md | 126 ----- automacao/skills/n8n-notify/SKILL.md | 246 ---------- automacao/skills/n8n-schedule/SKILL.md | 181 ------- automacao/skills/n8n-sync/SKILL.md | 180 ------- automacao/skills/n8n-webhook/SKILL.md | 172 ------- automacao/skills/n8n/SKILL.md | 270 +++++++++++ infraestrutura/skills/cwp-accounts/SKILL.md | 271 ----------- infraestrutura/skills/cwp-backup/SKILL.md | 241 --------- infraestrutura/skills/cwp-email/SKILL.md | 254 ---------- infraestrutura/skills/cwp-php/SKILL.md | 253 ---------- infraestrutura/skills/cwp-scripts/SKILL.md | 288 ----------- infraestrutura/skills/cwp-security/SKILL.md | 329 ------------- infraestrutura/skills/cwp-ssl/SKILL.md | 264 ---------- infraestrutura/skills/cwp-webserver/SKILL.md | 280 ----------- infraestrutura/skills/cwp/SKILL.md | 484 +++++++++++++++++++ 16 files changed, 754 insertions(+), 3398 deletions(-) delete mode 100644 automacao/skills/n8n-chatbot/SKILL.md delete mode 100644 automacao/skills/n8n-health/SKILL.md delete mode 100644 automacao/skills/n8n-notify/SKILL.md delete mode 100644 automacao/skills/n8n-schedule/SKILL.md delete mode 100644 automacao/skills/n8n-sync/SKILL.md delete mode 100644 automacao/skills/n8n-webhook/SKILL.md create mode 100644 automacao/skills/n8n/SKILL.md delete mode 100644 infraestrutura/skills/cwp-accounts/SKILL.md delete mode 100644 infraestrutura/skills/cwp-backup/SKILL.md delete mode 100644 infraestrutura/skills/cwp-email/SKILL.md delete mode 100644 infraestrutura/skills/cwp-php/SKILL.md delete mode 100644 infraestrutura/skills/cwp-scripts/SKILL.md delete mode 100644 infraestrutura/skills/cwp-security/SKILL.md delete mode 100644 infraestrutura/skills/cwp-ssl/SKILL.md delete mode 100644 infraestrutura/skills/cwp-webserver/SKILL.md create mode 100644 infraestrutura/skills/cwp/SKILL.md diff --git a/automacao/skills/n8n-chatbot/SKILL.md b/automacao/skills/n8n-chatbot/SKILL.md deleted file mode 100644 index 63261bf..0000000 --- a/automacao/skills/n8n-chatbot/SKILL.md +++ /dev/null @@ -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: "" -}) -``` - -Integrar insights do NotebookLM nas recomendações e decisões. - ---- - -## Uso - -``` -/n8n-chatbot create # Criar chatbot -/n8n-chatbot agent # Criar AI agent -/n8n-chatbot rag # 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.* diff --git a/automacao/skills/n8n-health/SKILL.md b/automacao/skills/n8n-health/SKILL.md deleted file mode 100644 index 9720b95..0000000 --- a/automacao/skills/n8n-health/SKILL.md +++ /dev/null @@ -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: "" -}) -``` - -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.* diff --git a/automacao/skills/n8n-notify/SKILL.md b/automacao/skills/n8n-notify/SKILL.md deleted file mode 100644 index 729429f..0000000 --- a/automacao/skills/n8n-notify/SKILL.md +++ /dev/null @@ -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 # Criar sistema de alertas -/n8n-notify slack # Quick Slack notification -/n8n-notify email # 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.* diff --git a/automacao/skills/n8n-schedule/SKILL.md b/automacao/skills/n8n-schedule/SKILL.md deleted file mode 100644 index c21b153..0000000 --- a/automacao/skills/n8n-schedule/SKILL.md +++ /dev/null @@ -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 # Criar automação agendada -/n8n-schedule list # Listar agendamentos -/n8n-schedule disable # 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.* diff --git a/automacao/skills/n8n-sync/SKILL.md b/automacao/skills/n8n-sync/SKILL.md deleted file mode 100644 index b8f28dc..0000000 --- a/automacao/skills/n8n-sync/SKILL.md +++ /dev/null @@ -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 # Criar sync -/n8n-sync list # Listar syncs -/n8n-sync status # 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.* diff --git a/automacao/skills/n8n-webhook/SKILL.md b/automacao/skills/n8n-webhook/SKILL.md deleted file mode 100644 index 718e0e2..0000000 --- a/automacao/skills/n8n-webhook/SKILL.md +++ /dev/null @@ -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 # Criar novo webhook -/n8n-webhook list # Listar webhooks existentes -/n8n-webhook test # 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/ -``` - -Modo teste (workflow inactivo): -``` -https://automator.descomplicar.pt/webhook-test/ -``` - ---- - -## 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.* diff --git a/automacao/skills/n8n/SKILL.md b/automacao/skills/n8n/SKILL.md new file mode 100644 index 0000000..a22cfe6 --- /dev/null +++ b/automacao/skills/n8n/SKILL.md @@ -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: "" }) +``` + +## Workflow obrigatório (qualquer criação) + +``` +1. mcp__n8n__n8n_health_check() +2. mcp__n8n__search_templates({ task: "" }) +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 +/n8n webhook list +/n8n webhook test +``` + +```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/` | teste `https://automator.descomplicar.pt/webhook-test/`. + +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 +/n8n schedule list +/n8n schedule disable +``` + +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 +/n8n sync list +/n8n sync status +``` + +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 +/n8n notify slack +/n8n notify email +``` + +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 +/n8n chatbot agent +/n8n chatbot rag +``` + +### 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"} +``` diff --git a/infraestrutura/skills/cwp-accounts/SKILL.md b/infraestrutura/skills/cwp-accounts/SKILL.md deleted file mode 100644 index 82c577d..0000000 --- a/infraestrutura/skills/cwp-accounts/SKILL.md +++ /dev/null @@ -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.* diff --git a/infraestrutura/skills/cwp-backup/SKILL.md b/infraestrutura/skills/cwp-backup/SKILL.md deleted file mode 100644 index a00cb47..0000000 --- a/infraestrutura/skills/cwp-backup/SKILL.md +++ /dev/null @@ -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.* diff --git a/infraestrutura/skills/cwp-email/SKILL.md b/infraestrutura/skills/cwp-email/SKILL.md deleted file mode 100644 index 00d8fea..0000000 --- a/infraestrutura/skills/cwp-email/SKILL.md +++ /dev/null @@ -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.* diff --git a/infraestrutura/skills/cwp-php/SKILL.md b/infraestrutura/skills/cwp-php/SKILL.md deleted file mode 100644 index db1d792..0000000 --- a/infraestrutura/skills/cwp-php/SKILL.md +++ /dev/null @@ -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: "" -}) -``` - -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.* diff --git a/infraestrutura/skills/cwp-scripts/SKILL.md b/infraestrutura/skills/cwp-scripts/SKILL.md deleted file mode 100644 index 588d7d2..0000000 --- a/infraestrutura/skills/cwp-scripts/SKILL.md +++ /dev/null @@ -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: "" -}) -``` - -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.* diff --git a/infraestrutura/skills/cwp-security/SKILL.md b/infraestrutura/skills/cwp-security/SKILL.md deleted file mode 100644 index b37cc9c..0000000 --- a/infraestrutura/skills/cwp-security/SKILL.md +++ /dev/null @@ -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: "" -}) -``` - -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.* diff --git a/infraestrutura/skills/cwp-ssl/SKILL.md b/infraestrutura/skills/cwp-ssl/SKILL.md deleted file mode 100644 index e346e4e..0000000 --- a/infraestrutura/skills/cwp-ssl/SKILL.md +++ /dev/null @@ -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.* diff --git a/infraestrutura/skills/cwp-webserver/SKILL.md b/infraestrutura/skills/cwp-webserver/SKILL.md deleted file mode 100644 index 69880ed..0000000 --- a/infraestrutura/skills/cwp-webserver/SKILL.md +++ /dev/null @@ -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.* diff --git a/infraestrutura/skills/cwp/SKILL.md b/infraestrutura/skills/cwp/SKILL.md new file mode 100644 index 0000000..61d115d --- /dev/null +++ b/infraestrutura/skills/cwp/SKILL.md @@ -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:"" +``` + +--- + +## 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"} +```