Migração 100% grátis + 1 mês grátis com cupom MIGRAR1MES · novos clientes em planos até R$ 200/mês Migrar agora
Agente de IA no WhatsApp por R$ 299/mês · stack montada e gerenciada pelo nosso time Quero meu agente
VPS com OpenClaw pré-instalado · 1ª mensalidade de R$ 56,90 por R$ 29,99 (-47%) · gerenciada pela Rollin Quero a VPS
VPS com Hermes Agent pré-instalado · 1ª mensalidade de R$ 56,90 por R$ 29,99 (-47%) · gerenciada pela Rollin Quero a VPS
Hospedagem com 30 dias de garantia · Não gostou? Devolvemos 100%, sem perguntas. Ver hospedagem
#lgpd#n8n#vps#automacao#compliance

LGPD na prática: como configurar retenção e exclusão de dados no n8n self-hosted hospedado em VPS brasileira

por Equipe Rollin Host · · 11 min de leitura

LGPD na prática: como configurar retenção e exclusão de dados no n8n self-hosted hospedado em VPS brasileira

O n8n self-hosted armazena dados de execução, logs e payloads por tempo indefinido por padrão. Para cumprir a LGPD (Lei Geral de Proteção de Dados), é necessário configurar políticas de retenção automática, anonimização de campos sensíveis e exclusão programada de dados pessoais — especialmente quando a plataforma processa informações de clientes brasileiros em workflows de CRM, e-commerce ou atendimento.

TL;DR: A LGPD exige que dados pessoais sejam retidos apenas pelo tempo necessário. No n8n, isso significa configurar variáveis de ambiente para excluir execuções antigas, desabilitar salvamento de dados binários sensíveis e implementar workflows de anonimização — tudo gerenciável em uma VPS com controle total.

A ANPD (Autoridade Nacional de Proteção de Dados) aplicou em 2025 multas de até 2% do faturamento (limite de R$ 50 milhões) a empresas que mantiveram dados pessoais além do período justificável. Para PMEs e SaaS que automatizam processos com n8n, o risco é real.

Por que o n8n self-hosted exige configuração específica para LGPD?

O n8n em modo self-hosted não aplica nenhuma política de retenção automática por padrão. Cada execução de workflow — sucesso ou erro — fica registrada no banco PostgreSQL ou SQLite com payload completo, incluindo dados pessoais recebidos de webhooks, APIs de CRM ou formulários.

Três problemas principais surgem:

  • Armazenamento indefinido: execuções acumulam sem limite de tempo, violando o princípio de minimização (Art. 6º, III da LGPD).
  • Logs verbosos: erros e retries expõem CPF, e-mail, telefone em texto plano nos registros de execução.
  • Dados binários: anexos e arquivos processados (PDFs com dados sensíveis, por exemplo) persistem no filesystem ou banco.

A solução passa por três camadas: configuração de variáveis de ambiente, workflows de limpeza automatizada e boas práticas de design de fluxos.

Configurando retenção automática de execuções via variáveis de ambiente

O n8n expõe variáveis de ambiente que controlam quantas execuções são mantidas e por quanto tempo. A configuração mais eficaz combina limite de quantidade e tempo de vida.

Variáveis essenciais para compliance

Edite o arquivo .env ou as variáveis do container Docker no servidor VPS:

# Número máximo de execuções salvas (por workflow)
EXECUTIONS_DATA_MAX_AGE=168  # horas (7 dias)
EXECUTIONS_DATA_PRUNE=true

# Salvar apenas execuções com erro (não salva sucessos)
EXECUTIONS_DATA_SAVE_ON_ERROR=error
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none

# Desabilitar salvamento de dados binários
EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false

EXECUTIONS_DATA_MAX_AGE define a janela de retenção em horas. Para a maioria dos casos de LGPD, 7 a 30 dias (168 a 720 horas) são suficientes para debug e auditoria, após o que os dados pessoais devem ser excluídos.

EXECUTIONS_DATA_PRUNE=true ativa a rotina interna do n8n que varre o banco a cada intervalo (configurável via EXECUTIONS_PRUNE_MAX_COUNT e EXECUTIONS_PRUNE_INTERVAL) e deleta registros antigos.

EXECUTIONS_DATA_SAVE_ON_SUCCESS=none impede que workflows bem-sucedidos salvem payload completo — essencial quando o fluxo processa dados sensíveis que não precisam de log permanente (ex: webhook que recebe CPF para validação e descarta).

Restart e verificação

Após editar .env, reinicie o container ou serviço:

docker restart n8n
# ou
systemctl restart n8n

Verifique no painel Settings > Log Streaming ou diretamente no PostgreSQL:

SELECT COUNT(*), MAX(finished_at) 
FROM execution_entity 
WHERE finished_at < NOW() - INTERVAL '7 days';

Se a query retornar 0 após alguns dias, a rotina de prune está ativa.

Anonimizando campos sensíveis em workflows

Mesmo com retenção limitada, dados pessoais não devem aparecer em logs se não forem estritamente necessários. O n8n permite transformar payloads antes de salvar ou encaminhar.

Técnica 1: Função de hash em campos sensíveis

No nó Function ou Code, substitua CPF, e-mail ou telefone por hash SHA-256 irreversível:

const crypto = require('crypto');

const cpf = $input.item.json.cpf;
const cpfHash = crypto.createHash('sha256').update(cpf).digest('hex');

return {
  json: {
    cpf_hash: cpfHash,
    // demais campos não sensíveis
    nome: $input.item.json.nome,
    pedido_id: $input.item.json.pedido_id
  }
};

O workflow continua funcionando para rastreamento (o hash identifica unicamente o CPF), mas o dado original não fica gravado na execução.

Técnica 2: Remover campos desnecessários antes de salvar

Use o nó Set para criar um objeto limpo apenas com campos que precisam de log:

  • Entrada: webhook com {cpf, email, endereco, produto}
  • Set mantém apenas {produto, timestamp, webhook_id}
  • Fluxo segue para CRM com dados completos, mas execução salva só metadados

Técnica 3: Desabilitar salvamento em workflows críticos

Para fluxos que processam dados financeiros ou de saúde, configure Workflow Settings > Save Executions como No (só salva em caso de erro).

Isso impede qualquer persistência de payload, mas exige monitoramento externo (integração com Sentry ou log estruturado em arquivo).

Workflow de exclusão programada de dados pessoais

Para cenários onde dados precisam ser apagados de sistemas externos (CRM, banco próprio, planilhas), crie um workflow n8n dedicado à exclusão.

Exemplo: excluir contatos inativos após 90 dias (conformidade com Art. 15 e 16 da LGPD)

  1. Schedule Trigger: executa todo domingo às 2h.
  2. PostgreSQL / MySQL Node: consulta tabela contatos onde ultima_interacao < NOW() - INTERVAL '90 days' e consentimento_ativo = false.
  3. Loop over Items: para cada contato retornado:
    • HTTP Request: DELETE na API do CRM.
    • PostgreSQL: UPDATE contatos SET dados_anonimizados = true, email = NULL, cpf = NULL WHERE id = {{$item.json.id}}.
  4. Send Email (opcional): notifica o DPO (Data Protection Officer) com resumo de quantos registros foram excluídos.

Vantagens dessa abordagem

  • Auditável: cada execução do workflow fica registrada (sem dados sensíveis, apenas IDs e contadores).
  • Reversível em janela de segurança: se a exclusão for acidental, há 7 dias (conforme EXECUTIONS_DATA_MAX_AGE) para recuperar logs e investigar.
  • Automático: não depende de intervenção manual, reduzindo risco de esquecimento.

Logs de auditoria e segregação de dados

A LGPD exige registro de operações com dados pessoais (Art. 37). O n8n não oferece trilha de auditoria nativa, mas é possível implementar com nós de log estruturado.

Estratégia de auditoria em VPS

  1. n8n + Fluentd/Loki: configure o n8n para logar em formato JSON estruturado (N8N_LOG_OUTPUT=json) e envie para Loki via Fluentd rodando no mesmo VPS.
  2. Tabela de auditoria no PostgreSQL: crie uma tabela audit_log e, em workflows que acessam dados sensíveis, insira registro com {timestamp, workflow_id, operacao, usuario_afetado_id}.
  3. Webhook de auditoria: todo workflow que exclui ou altera dados sensíveis dispara webhook para sistema externo de compliance.

Exemplo de nó de auditoria

// Function node após operação sensível
const auditEntry = {
  timestamp: new Date().toISOString(),
  workflow_id: $workflow.id,
  execution_id: $execution.id,
  operacao: 'exclusao_contato',
  usuario_id: $input.item.json.id,
  ip_origem: $input.item.json.ip
};

// Envia para tabela de auditoria via PostgreSQL node (próximo nó)
return { json: auditEntry };

A tabela audit_log deve ter retenção maior que dados operacionais (ex: 5 anos), conforme exigência de documentação da LGPD.

Trade-offs: desempenho vs. compliance

Implementar políticas rigorosas de retenção e anonimização traz impactos que precisam ser avaliados:

Aspecto Ganho Custo
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none Banco 70% menor, backup mais rápido Debug de workflows bem-sucedidos fica cego (sem payload)
EXECUTIONS_DATA_MAX_AGE=168h Compliance automático, espaço controlado Histórico curto pode dificultar análise de tendências
Anonimização via hash Dados não identificáveis em logs Hash é irreversível — impossível recuperar CPF original se necessário
Workflow de exclusão automatizada Conformidade com Art. 16 (direito à exclusão) Requer manutenção e testes; exclusão acidental é risco

Recomendação prática: em VPS com 8 GB RAM e 100 GB NVMe (como o VPS Lite 10 da Rollin Host), manter EXECUTIONS_DATA_MAX_AGE=336h (14 dias) + salvamento apenas em erro oferece equilíbrio entre rastreabilidade e compliance sem pressionar disco.

Infraestrutura: por que VPS brasileira facilita compliance LGPD

Embora a LGPD permita transferência internacional de dados sob condições específicas (Art. 33), hospedar o n8n em empresa brasileira com emissão de NF-e e suporte nacional simplifica auditoria e reduz riscos legais.

Vantagens técnicas e jurídicas

  • Jurisdição nacional: em caso de fiscalização da ANPD, a empresa controladora dos dados (você) e a operadora (Rollin Host) estão sob mesma legislação, facilitando termo de processamento de dados.
  • Latência para APIs brasileiras: workflows que consultam Serasa, Receita Federal ou CRMs nacionais têm latência 40-80% menor quando o n8n roda em VPS com borda Cloudflare no Brasil.
  • Backup local: políticas de backup em Frankfurt (Alemanha) da Rollin Host respeitam adequação GDPR, compatível com LGPD, mas manter réplica em território nacional agiliza recuperação.

A infraestrutura da Rollin Host combina VPS em Frankfurt (AMD EPYC + NVMe) com Cloudflare CDN e proxy com borda no Brasil, oferecendo baixa latência sem abrir mão da redundância europeia.

Passo a passo completo: VPS + n8n + LGPD

1. Provisionar VPS

Escolha um plano com ao menos 8 GB RAM (n8n com PostgreSQL consome ~1,5 GB em idle + overhead de workflows).

Exemplo: VPS Lite 10 (4 vCPU, 8 GB, 75 GB NVMe) a R$ 52,90/mês — suficiente para até 500 execuções/dia com retenção de 14 dias.

2. Instalar n8n via Docker Compose

version: '3.8'
services:
  postgres:
    image: postgres:15
    environment:
      POSTGRES_DB: n8n
      POSTGRES_USER: n8n
      POSTGRES_PASSWORD: SenhaSegura123
    volumes:
      - postgres_data:/var/lib/postgresql/data
  
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    environment:
      DB_TYPE: postgresdb
      DB_POSTGRESDB_HOST: postgres
      DB_POSTGRESDB_DATABASE: n8n
      DB_POSTGRESDB_USER: n8n
      DB_POSTGRESDB_PASSWORD: SenhaSegura123
      EXECUTIONS_DATA_MAX_AGE: 336
      EXECUTIONS_DATA_PRUNE: true
      EXECUTIONS_DATA_SAVE_ON_SUCCESS: none
      EXECUTIONS_DATA_SAVE_ON_ERROR: all
      N8N_LOG_OUTPUT: json
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres

volumes:
  postgres_data:
  n8n_data:

3. Configurar SSL com Nginx + Certbot

Proxy reverso com SSL é obrigatório para webhooks HTTPS (exigência de integrações como WhatsApp Cloud API e CRMs SaaS).

apt install nginx certbot python3-certbot-nginx
certbot --nginx -d n8n.seudominio.com.br

4. Criar workflow de limpeza mensal

  • Cron Trigger: 1º dia do mês, 3h da manhã.
  • PostgreSQL Node: DELETE FROM execution_entity WHERE finished_at < NOW() - INTERVAL '90 days' (limpeza adicional além do prune automático).
  • Function Node: registra {data, registros_excluidos} em tabela compliance_log.

5. Documentar política de retenção

Crie documento Política de Retenção de Dados (exigido pela LGPD, Art. 37) especificando:

  • Dados operacionais (execuções n8n): 14 dias.
  • Logs de auditoria: 5 anos.
  • Dados de clientes em CRM: até cancelamento de consentimento + 30 dias.

Disponibilize via endpoint /politica-retencao no domínio da aplicação.

Monitoramento e alertas de compliance

Configure alertas para garantir que as políticas de retenção estão ativas:

Alerta de falha no prune

-- Executar diariamente via cron + script
SELECT COUNT(*) FROM execution_entity 
WHERE finished_at < NOW() - INTERVAL '15 days';

Se a contagem for > 0 após configurar EXECUTIONS_DATA_MAX_AGE=336h, o prune falhou. Configure alerta via webhook para Slack ou e-mail.

Alerta de disco cheio

df -h /var/lib/docker/volumes | awk '$5 > 80 {print "Disco n8n acima de 80%"}'

Disco cheio bloqueia inserções no PostgreSQL e pode travar workflows. A retenção adequada mantém uso de disco previsível.

Principais aprendizados

  • O n8n self-hosted não aplica retenção automática por padrão — é necessário configurar EXECUTIONS_DATA_MAX_AGE e EXECUTIONS_DATA_PRUNE=true.
  • Anonimizar campos sensíveis em nós Function (via hash SHA-256) reduz risco de exposição em logs, mesmo dentro da janela de retenção.
  • Workflows de exclusão programada são essenciais para compliance com Art. 16 da LGPD (direito à exclusão) em sistemas externos.
  • VPS com empresa brasileira (emissão de NF-e, suporte nacional) simplifica auditoria e termo de processamento de dados.
  • Auditoria via tabela dedicada no PostgreSQL ou log estruturado JSON + Loki garante rastreabilidade de operações com dados pessoais.

Perguntas frequentes

Qual a penalidade por não excluir dados pessoais no prazo exigido pela LGPD?

A ANPD pode aplicar multa de até 2% do faturamento da empresa (limite de R$ 50 milhões por infração), além de advertência, bloqueio de dados e publicização da infração. Em 2025, e-commerces e SaaS foram os setores mais multados por retenção indefinida de logs.

O n8n salva dados de cartão de crédito nas execuções?

Se um workflow processar payloads com dados de cartão (via webhook de gateway de pagamento), esses dados são salvos em texto plano no banco PostgreSQL por padrão. É obrigatório configurar EXECUTIONS_DATA_SAVE_ON_SUCCESS=none e nunca logar campos PCI-DSS (número de cartão, CVV) — use variáveis de ambiente ou credenciais criptografadas do n8n.

Posso hospedar n8n em servidor fora do Brasil e ainda estar em compliance com LGPD?

Sim, desde que a transferência internacional atenda aos requisitos do Art. 33 da LGPD (país com nível adequado de proteção, cláusulas contratuais padrão ou consentimento específico do titular). Usar VPS em Frankfurt (Alemanha) da Rollin Host é seguro porque a UE possui GDPR, considerado adequado pela ANPD, e a empresa é brasileira (facilitando termo de processamento).

Como garantir que workflows antigos não estão salvando dados além do permitido?

Execute auditoria manual trimestral: liste todos os workflows via API do n8n (GET /workflows) e verifique configuração Workflow Settings > Save Executions. Workflows críticos (pagamento, saúde) devem ter salvamento desabilitado. Use script Python ou Node.js para automatizar e gerar relatório.

Qual a diferença entre retenção de execuções e re