Como Instalar N8N no WSL

Automação Empresarial

O N8N é uma plataforma robusta de automação de workflows que permite conectar diferentes serviços e APIs através de uma interface visual intuitiva. Este guia técnico apresenta a implementação completa do N8N em ambiente local utilizando Windows Subsystem for Linux (WSL) e Docker, fornecendo uma solução para automação de processos.

Objetivos deste guia:

  • Configuração profissional do ambiente WSL
  • Implementação do Docker e Docker Compose
  • Deploy do N8N com banco PostgreSQL
  • Desenvolvimento de automações avançadas
  • Gerenciamento operacional de workflows

Requisitos Técnicos

Pré-requisitos obrigatórios:

  • Windows 10/11 com WSL2 habilitado
  • 8GB RAM mínimo (16GB recomendado)
  • 20GB de espaço em disco disponível
  • Privilégios administrativos no sistema
  • Conexão de rede estável

Conhecimentos recomendados:

  • Administração básica de sistemas Linux
  • Conceitos de containerização Docker
  • Fundamentos de redes e APIs
  • Noções de segurança corporativa

Configuração do Ambiente WSL

Habilitação do WSL2

Execute os comandos no PowerShell como administrador:

# Habilitar subsistema Linux e plataforma de máquina virtual
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# Definir WSL2 como versão padrão
wsl --set-default-version 2

Nota crítica: Reinicialização do sistema é obrigatória.

Instalação do Ubuntu LTS

# Instalar distribuição Ubuntu 22.04 LTS
wsl --install -d Ubuntu-22.04

# Verificar instalação
wsl --list --verbose

Configuração inicial do usuário

Na primeira execução:

  1. Definir nome de usuário corporativo
  2. Configurar senha robusta (mínimo 12 caracteres)
  3. Confirmar credenciais de acesso

Implementação do Docker

Atualização do sistema base

# Atualizar repositórios e pacotes
sudo apt update && sudo apt upgrade -y

# Instalar dependências essenciais
sudo apt install -y \
    ca-certificates \
    curl \
    gnupg \
    lsb-release \
    software-properties-common \
    apt-transport-https

Configuração do repositório Docker

# Adicionar chave GPG oficial
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

# Configurar repositório estável
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Instalação do Docker Engine

# Atualizar índice de pacotes
sudo apt update

# Instalar Docker Engine e componentes
sudo apt install -y \
    docker-ce \
    docker-ce-cli \
    containerd.io \
    docker-compose-plugin

# Configurar permissões de usuário
sudo usermod -aG docker $USER

# Aplicar mudanças de grupo
newgrp docker

Instalação do Docker Compose

# Baixar versão estável do Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# Aplicar permissões de execução
sudo chmod +x /usr/local/bin/docker-compose

# Criar link simbólico
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

Validação da instalação

# Verificar versões instaladas
docker --version
docker-compose --version

# Testar funcionalidade básica
docker run --rm hello-world

# Verificar status do serviço
sudo systemctl status docker

Arquitetura e Deploy do N8N

Estrutura do projeto

# Criar diretório base do projeto
mkdir -p ~/n8n-production && cd ~/n8n-production

# Criar estrutura de diretórios
mkdir -p {data,postgres-data,logs,backups,config}

# Definir permissões adequadas
chmod 755 data postgres-data logs backups config

Configuração do Docker Compose

Criar arquivo de orquestração:

nano docker-compose.yml

Implementar configuração enterprise:

version: '3.8'

services:
  postgres:
    image: postgres:15-alpine
    container_name: n8n_postgres
    restart: unless-stopped
    environment:
      POSTGRES_DB: n8n_production
      POSTGRES_USER: n8n_admin
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_INITDB_ARGS: "--encoding=UTF-8 --lc-collate=C --lc-ctype=C"
    volumes:
      - ./postgres-data:/var/lib/postgresql/data
      - ./config/postgres.conf:/etc/postgresql/postgresql.conf
    ports:
      - "127.0.0.1:5432:5432"
    networks:
      - n8n_network
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U n8n_admin -d n8n_production"]
      interval: 30s
      timeout: 10s
      retries: 5
      start_period: 30s
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

  n8n:
    image: n8nio/n8n:latest
    container_name: n8n_main
    restart: unless-stopped
    environment:
      # Configurações de banco de dados
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n_production
      - DB_POSTGRESDB_USER=n8n_admin
      - DB_POSTGRESDB_PASSWORD=${DB_PASSWORD}
      - DB_POSTGRESDB_SCHEMA=public
      
      # Configurações de autenticação
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=${N8N_ADMIN_USER}
      - N8N_BASIC_AUTH_PASSWORD=${N8N_ADMIN_PASSWORD}
      
      # Configurações de segurança
      - N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
      - N8N_USER_MANAGEMENT_DISABLED=false
      - N8N_USER_MANAGEMENT_JWT_SECRET=${JWT_SECRET}
      - N8N_USER_MANAGEMENT_JWT_DURATION_HOURS=24
      
      # Configurações de sistema
      - TZ=America/Sao_Paulo
      - GENERIC_TIMEZONE=America/Sao_Paulo
      - N8N_DEFAULT_LOCALE=pt
      
      # Configurações de webhook e API
      - WEBHOOK_URL=http://localhost:5678
      - N8N_PROTOCOL=http
      - N8N_HOST=localhost
      - N8N_PORT=5678
      - N8N_LISTEN_ADDRESS=0.0.0.0
      
      # Configurações de execução
      - EXECUTIONS_TIMEOUT=7200
      - EXECUTIONS_TIMEOUT_MAX=14400
      - EXECUTIONS_DATA_SAVE_ON_ERROR=all
      - EXECUTIONS_DATA_SAVE_ON_SUCCESS=all
      - EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=true
      
      # Configurações de log
      - N8N_LOG_LEVEL=info
      - N8N_LOG_OUTPUT=console,file
      - N8N_LOG_FILE_LOCATION=/home/node/.n8n/logs/
      
      # Configurações de performance
      - N8N_PAYLOAD_SIZE_MAX=16
      - N8N_BINARY_DATA_TTL=60
      - N8N_METRICS=true
      
    ports:
      - "127.0.0.1:5678:5678"
    volumes:
      - ./data:/home/node/.n8n
      - ./logs:/home/node/.n8n/logs
    networks:
      - n8n_network
    depends_on:
      postgres:
        condition: service_healthy
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "5"
    healthcheck:
      test: ["CMD-SHELL", "curl -f http://localhost:5678/healthz || exit 1"]
      interval: 60s
      timeout: 30s
      retries: 3
      start_period: 45s

networks:
  n8n_network:
    driver: bridge
    ipam:
      config:
        - subnet: 172.20.0.0/16

volumes:
  postgres_data:
    driver: local
  n8n_data:
    driver: local

Configuração de variáveis de ambiente

# Criar arquivo de variáveis de ambiente
nano .env

Definir configurações sensíveis:

# Configurações de banco de dados
DB_PASSWORD=SuaSenhaSeguraAqui123!

# Configurações de autenticação N8N
N8N_ADMIN_USER=admin
N8N_ADMIN_PASSWORD=SuaSenhaAdminSegura456!

# Chaves de segurança
N8N_ENCRYPTION_KEY=chave-de-criptografia-de-32-caracteres-aqui
JWT_SECRET=seu-jwt-secret-ultra-seguro-aqui

# Configurações de ambiente
ENVIRONMENT=production
NODE_ENV=production

Geração de chaves de segurança

# Gerar chave de criptografia
openssl rand -base64 32

# Gerar JWT secret
openssl rand -hex 64

# Gerar password hash para validação
echo -n "sua-senha" | sha256sum

Inicialização do ambiente

# Definir permissões do arquivo de ambiente
chmod 600 .env

# Inicializar containers em modo detached
docker-compose up -d

# Verificar status dos serviços
docker-compose ps

# Monitorar logs de inicialização
docker-compose logs -f --tail=50

Acesso e Configuração Inicial

Interface administrativa

  1. URL de acesso: http://localhost:5678
  2. Credenciais: Conforme definido no arquivo .env
  3. Primeira execução: Configurar usuário administrador
  4. Validação: Verificar conectividade com banco de dados

Configurações de segurança obrigatórias

Política de senhas

  • Mínimo 12 caracteres
  • Combinação de maiúsculas, minúsculas, números e símbolos
  • Rotação trimestral obrigatória
  • Não reutilização das últimas 5 senhas

Configurações de sessão

  • Timeout automático após 2 horas de inatividade
  • Logout forçado em múltiplas sessões
  • Log de todas as ações administrativas

Desenvolvimento de Workflows Empresariais

Workflow de integração de sistemas

Cenário: Sincronização CRM-ERP

// Configuração do trigger webhook
{
  "httpMethod": "POST",
  "path": "/webhook/crm-sync",
  "authentication": "headerAuth",
  "options": {
    "credentialName": "api_key_corporativo"
  }
}

// Processamento de dados
{
  "customer_id": "{{$json.body.customer.id}}",
  "timestamp": "{{new Date().toISOString()}}",
  "action": "{{$json.body.action}}",
  "data_validation": "{{$json.body.customer.email.includes('@') ? 'valid' : 'invalid'}}"
}

// Resposta padronizada
{
  "status": "processed",
  "transaction_id": "{{$json.customer_id}}-{{Date.now()}}",
  "processed_at": "{{$json.timestamp}}",
  "next_step": "erp_integration"
}

Workflow de monitoramento operacional

Cenário: Alertas de performance

// Configuração de scheduler
{
  "trigger": {
    "type": "cron",
    "expression": "*/15 * * * *",  // A cada 15 minutos
    "timezone": "America/Sao_Paulo"
  }
}

// Coleta de métricas
{
  "endpoints": [
    "https://api.sistema1.com/health",
    "https://api.sistema2.com/status",
    "https://database.interno.com/metrics"
  ],
  "timeout": 30000,
  "retries": 3
}

// Análise e alertas
{
  "threshold_response_time": 5000,
  "threshold_error_rate": 0.05,
  "alert_channels": ["slack", "email", "webhook"],
  "escalation_levels": ["warning", "critical", "emergency"]
}

Gerenciamento Operacional

Comandos de administração

# Verificação de status
docker-compose ps
docker-compose top

# Gerenciamento de logs
docker-compose logs -f n8n
docker-compose logs --tail=100 postgres

# Backup operacional
docker-compose exec postgres pg_dump -U n8n_admin -d n8n_production > backup_$(date +%Y%m%d_%H%M%S).sql

# Reinicialização controlada
docker-compose restart n8n
docker-compose down && docker-compose up -d

# Monitoramento de recursos
docker stats
docker system df

Procedimentos de backup

Script de backup automatizado

#!/bin/bash
# Script: backup-n8n-enterprise.sh

set -euo pipefail

BACKUP_DIR="/opt/backups/n8n"
RETENTION_DAYS=30
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/n8n-backup.log"

# Função de log
log() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}

# Criar diretório de backup
mkdir -p "$BACKUP_DIR"

log "Iniciando backup do N8N"

# Backup do banco de dados
docker-compose exec -T postgres pg_dump \
    -U n8n_admin \
    -d n8n_production \
    --verbose \
    --format=custom \
    --no-owner \
    --no-privileges > "$BACKUP_DIR/database_$DATE.backup"

# Backup dos dados de aplicação
tar -czf "$BACKUP_DIR/data_$DATE.tar.gz" \
    -C ~/n8n-production \
    data/ config/ .env

# Verificação de integridade
if [[ -f "$BACKUP_DIR/database_$DATE.backup" && -f "$BACKUP_DIR/data_$DATE.tar.gz" ]]; then
    log "Backup concluído com sucesso"
    
    # Limpeza de backups antigos
    find "$BACKUP_DIR" -name "*.backup" -mtime +$RETENTION_DAYS -delete
    find "$BACKUP_DIR" -name "*.tar.gz" -mtime +$RETENTION_DAYS -delete
    
    log "Limpeza de backups antigos concluída"
else
    log "ERRO: Falha na criação do backup"
    exit 1
fi

Monitoramento e alertas

Configuração de healthchecks

# Script de monitoramento
#!/bin/bash
# healthcheck-n8n.sh

API_ENDPOINT="http://localhost:5678/healthz"
SLACK_WEBHOOK="https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"

check_service() {
    if curl -f -s "$API_ENDPOINT" > /dev/null; then
        echo "N8N: Operacional"
        return 0
    else
        echo "N8N: Falha detectada"
        
        # Enviar alerta para Slack
        curl -X POST -H 'Content-type: application/json' \
            --data '{"text":"🚨 ALERTA: N8N não está respondendo"}' \
            "$SLACK_WEBHOOK"
        
        return 1
    fi
}

check_service

Segurança Corporativa

Configurações de rede

# Configuração de proxy reverso com nginx
services:
  nginx:
    image: nginx:alpine
    container_name: n8n_proxy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/nginx.conf:ro
      - ./nginx/ssl:/etc/nginx/ssl:ro
    depends_on:
      - n8n
    networks:
      - n8n_network
    restart: unless-stopped

Configuração SSL/TLS

# nginx.conf - Configuração de segurança
server {
    listen 443 ssl http2;
    server_name n8n.empresa.com;
    
    ssl_certificate /etc/nginx/ssl/cert.pem;
    ssl_certificate_key /etc/nginx/ssl/key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
    ssl_prefer_server_ciphers off;
    
    # Headers de segurança
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    add_header X-Content-Type-Options nosniff;
    add_header X-Frame-Options DENY;
    add_header X-XSS-Protection "1; mode=block";
    
    location / {
        proxy_pass http://n8n:5678;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

Auditoria e compliance

Log de auditoria

// Configuração de auditoria em workflows
{
  "audit_log": {
    "user_id": "{{$('Manual Trigger').item.json.user}}",
    "action": "workflow_execution",
    "resource": "{{$workflow.name}}",
    "timestamp": "{{new Date().toISOString()}}",
    "ip_address": "{{$('Manual Trigger').item.json.clientIP}}",
    "success": "{{$json.execution_status === 'success'}}"
  }
}

Troubleshooting Avançado

Diagnóstico de performance

# Análise de recursos do container
docker stats n8n_main --no-stream

# Análise de conexões de banco
docker-compose exec postgres psql -U n8n_admin -d n8n_production -c "
SELECT 
    state,
    count(*) as connections
FROM pg_stat_activity 
WHERE datname = 'n8n_production'
GROUP BY state;"

# Análise de logs de erro
docker-compose logs n8n | grep -i error | tail -20

# Verificação de espaço em disco
df -h
docker system df

Procedimentos de recuperação

Restauração de backup

#!/bin/bash
# restore-n8n.sh

BACKUP_FILE="$1"
RESTORE_DATE=$(date +%Y%m%d_%H%M%S)

if [[ -z "$BACKUP_FILE" ]]; then
    echo "Uso: $0 <arquivo_backup>"
    exit 1
fi

# Parar serviços
docker-compose down

# Backup dos dados atuais
mv data data_backup_$RESTORE_DATE
mv postgres-data postgres-data_backup_$RESTORE_DATE

# Restaurar dados
pg_restore -U n8n_admin -d n8n_production --clean --if-exists "$BACKUP_FILE"

# Reiniciar serviços
docker-compose up -d

echo "Restauração concluída. Backups salvos como *_backup_$RESTORE_DATE"

Integração com Sistemas Corporativos

APIs empresariais comuns

Salesforce CRM

// Configuração de autenticação OAuth2
{
  "auth_type": "oauth2",
  "client_id": "{{$credentials.salesforce.client_id}}",
  "client_secret": "{{$credentials.salesforce.client_secret}}",
  "token_url": "https://login.salesforce.com/services/oauth2/token",
  "scope": "api refresh_token"
}

// Query SOQL para dados
{
  "query": "SELECT Id, Name, Email, CreatedDate FROM Contact WHERE LastModifiedDate >= TODAY",
  "endpoint": "/services/data/v57.0/query/",
  "method": "GET"
}

SAP ERP

// Configuração RFC/OData
{
  "service_url": "{{$credentials.sap.base_url}}/sap/opu/odata/sap/API_BUSINESS_PARTNER/",
  "auth_type": "basic",
  "headers": {
    "X-CSRF-Token": "Fetch",
    "Content-Type": "application/json"
  }
}

// Processamento de dados empresariais
{
  "business_partner": {
    "customer_id": "{{$json.BusinessPartner}}",
    "name": "{{$json.BusinessPartnerName}}",
    "category": "{{$json.BusinessPartnerCategory}}",
    "sync_timestamp": "{{new Date().toISOString()}}"
  }
}

Métricas e KPIs

Dashboard de performance

Métricas principais

  • Execuções por hora: Total de workflows executados
  • Taxa de sucesso: Percentual de execuções bem-sucedidas
  • Tempo médio de execução: Performance dos workflows
  • Utilização de recursos: CPU, memória e armazenamento
  • Disponibilidade do sistema: Uptime da plataforma

Alertas críticos

  • Falha de execução: Taxa > 5%
  • Tempo de resposta: > 10 segundos
  • Uso de memória: > 80%
  • Espaço em disco: > 85%
  • Conexões de banco: > 80% do pool

Conclusão

A implementação do N8N em ambiente WSL com Docker oferece uma solução robusta e escalável para automação empresarial. Esta arquitetura proporciona:

Benefícios estratégicos:

Eficiência operacional: Redução significativa de tarefas manuais repetitivas através de automação inteligente de processos empresariais.

Integração sistêmica: Conectividade nativa com principais plataformas corporativas (CRM, ERP, APIs) garantindo fluxo contínuo de dados.

Escalabilidade técnica: Arquitetura containerizada permite crescimento horizontal conforme demanda organizacional.

Segurança empresarial: Implementação de controles de acesso, auditoria e criptografia adequados para ambiente corporativo.

Redução de custos: Alternativa open-source para soluções proprietárias de automação, com ROI mensurável.

Recomendações para implementação:

  1. Fase piloto: Iniciar com workflows críticos de baixa complexidade
  2. Treinamento técnico: Capacitar equipe em desenvolvimento de automações
  3. Governança: Estabelecer políticas de uso e padrões de desenvolvimento
  4. Monitoramento: Implementar dashboards de acompanhamento e alertas
  5. Expansão gradual: Escalar para processos de maior complexidade progressivamente

Próximas etapas:

  • Implementação de CI/CD para deployment automatizado de workflows
  • Integração com ferramentas de monitoramento corporativo (Grafana, Prometheus)
  • Desenvolvimento de templates padronizados para casos de uso comuns
  • Configuração de alta disponibilidade para ambiente de produção crítica
  • Implementação de disaster recovery com RPO/RTO definidos

O N8N representa uma solução estratégica para transformação digital, oferecendo flexibilidade técnica e eficiência operacional necessárias para competitividade empresarial no cenário atual.


Categorias: Automação Empresarial, DevOps, Integração de Sistemas, Docker, WSL

Tempo de implementação: 4-6 horas (configuração inicial)

Nível técnico: Avançado

Última revisão: Julho 2025

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Eu sou Fabiano

Sou Fabiano Cavalcante, arquiteto de soluções apaixonado por transformar desafios de negócio em tecnologia que gera valor. Carioca, pai e amante de um bom café, são mais de 20 anos de experiência e um MBA executivo em Gestão de Projetos para unir cloud, Java e IA generativa em governança inteligente. Este espaço é meu laboratório de ideias e aprendizados — bem-vindo!

Let’s connect