Pular para o conteúdo principal

Self-hosted (Auto-hospedado)

Visão Geral

O que é Self-Hosted?

Self-hosted significa que você instala e gerencia o n8n em sua própria infraestrutura – seja um servidor local, VPS, cloud ou Kubernetes.

Principais Vantagens

Controle total - Sua infraestrutura, suas regras

  • Integração corporativa - VPNs, LDAP, redes privadas
  • Compliance - Dados nunca saem da sua rede
  • Personalização - Plugins customizados e extensões
  • Custo controlado - Sem cobrança por execução

Requisitos do Sistema

  • Node.js: Versão 20.19 a 24.x (para instalação NPM)
  • Docker: Versão 20.10+ (recomendado)
  • Memória: Mínimo 2GB RAM (4GB+ recomendado)
  • Armazenamento: 10GB+ de espaço livre
  • Rede: Acesso à internet para downloads

📥 Docker Compose

version: '3.8'

services:
  n8n:
    image: docker.n8n.io/n8nio/n8n
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - N8N_PROTOCOL=https
      - N8N_HOST=seu-dominio.com
      - GENERIC_TIMEZONE=America/Sao_Paulo
      - N8N_ENCRYPTION_KEY=sua_chave_32_caracteres
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
      - DB_POSTGRESDB_PORT=5432
      - DB_POSTGRESDB_DATABASE=n8n
      - DB_POSTGRESDB_USER=n8n
      - DB_POSTGRESDB_PASSWORD=SUA_SENHA_SEGURA_AQUI
      - REDIS_URL=redis://redis:6379
      - EXECUTIONS_PROCESS=main
      - EXECUTIONS_MODE=regular
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres
      - redis

  postgres:
    image: postgres:13
    restart: unless-stopped
    environment:
      - POSTGRES_DB=n8n
      - POSTGRES_USER=n8n
      - POSTGRES_PASSWORD=SUA_SENHA_SEGURA_AQUI
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    restart: unless-stopped
    volumes:
      - redis_data:/data

volumes:
  n8n_data:
  postgres_data:
  redis_data:
Ver comandos para executar os serviços
# iniciar todos os serviços docker
docker-compose up -d

# parar todos os serviços docker
docker-compose down

# ver logs do n8n
docker-compose logs -f n8n

📦 Instalação via NPM

Teste rápido (sem instalar)

npx n8n

Instalação global

1. Instalar o n8n:

npm install n8n -g

2. Executar com configurações:

N8N_PROTOCOL=https \
N8N_HOST=seu-dominio.com \
GENERIC_TIMEZONE=America/Sao_Paulo \
n8n start
Requisitos Node.js

n8n requer Node.js versão entre 20.19 e 24.x. Verifique sua versão com

node --version
.


🏗️ Configuração de Proxy Reverso

Nginx com SSL

server {
    listen 443 ssl;
    server_name seu-dominio.com;
    
    ssl_certificate /etc/letsencrypt/live/seu-dominio.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/seu-dominio.com/privkey.pem;
    
    location / {
        proxy_pass http://localhost: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;
        proxy_set_header X-XSS-Protection "1; mode=block";
    }
}

SSL com Certbot (Let's Encrypt)

O Certbot é uma ferramenta automatizada que simplifica significativamente a obtenção e renovação de certificados SSL gratuitos através do Let's Encrypt. Esta abordagem elimina a necessidade de gerenciar certificados manualmente, pois o Certbot configura automaticamente o Nginx e renova os certificados antes da expiração.

Ver comandos do Certbot
# instalar certbot
sudo apt install certbot python3-certbot-nginx

# gerar certificado
sudo certbot --nginx -d seu-dominio.com

# configurar renovação automática
sudo crontab -e
# adicionar linha:
0 12 * * * /usr/bin/certbot renew --quiet

Kubernetes

Ver configuração Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
  name: n8n
spec:
  replicas: 1
  selector:
    matchLabels:
      app: n8n
  template:
    metadata:
      labels:
        app: n8n
    spec:
      containers:
      - name: n8n
        image: docker.n8n.io/n8nio/n8n
        ports:
        - containerPort: 5678
        env:
        - name: N8N_PROTOCOL
          value: "https"
        - name: N8N_HOST
          value: "seu-dominio.com"
        - name: DB_TYPE
          value: "postgresdb"
        - name: DB_POSTGRESDB_HOST
          value: "postgres-service"

Segurança

A segurança é fundamental em ambientes de produção, pois protege dados sensíveis, credenciais e workflows contra acesso não autorizado. O n8n oferece múltiplas camadas de segurança que incluem autenticação básica, OAuth2, configurações de firewall e restrições de acesso que devem ser configuradas adequadamente para cada ambiente.

Autenticação

Ver configuração de Basic Auth
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=SUA_SENHA_SEGURA_AQUI
Ver configuração de OAuth2
N8N_OAUTH2_ACTIVE=true
N8N_OAUTH2_CLIENT_ID=seu_client_id
N8N_OAUTH2_CLIENT_SECRET=SEU_CLIENT_SECRET_AQUI
N8N_OAUTH2_AUTHORIZATION_URL=https://auth.provider.com/oauth/authorize
N8N_OAUTH2_TOKEN_URL=https://seu-provider.com/oauth/token

Firewall

A configuração de firewall é essencial para controlar o acesso à instância do n8n, permitindo apenas conexões necessárias e bloqueando tentativas de acesso não autorizado. Esta camada adicional de segurança complementa a autenticação, garantindo que apenas IPs autorizados possam acessar a aplicação.

Ver configuração de Firewall
# permitir apenas https
sudo ufw allow 443/tcp
sudo ufw allow 80/tcp
sudo ufw deny 5678/tcp

# restringir acesso por ip
sudo ufw allow from 192.168.1.0/24 to any port 5678

Backup e Recuperação

Ver script de backup
#!/bin/bash
BACKUP_DIR="/backup/n8n"
DATE=$(date +%Y%m%d_%H%M%S)

# Backup dos dados
tar -czf $BACKUP_DIR/n8n_data_$DATE.tar.gz /home/node/.n8n

# Backup do banco PostgreSQL
docker exec postgres pg_dump -U n8n n8n > $BACKUP_DIR/n8n_db_$DATE.sql

# Limpar backups antigos (mais de 7 dias)
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete

Agendar backup

# adicionar ao crontab para backup diário às 2h
0 2 * * * /path/to/backup-n8n.sh
Importante

Mantenha sempre backups regulares dos dados e do banco de dados. Em caso de falha, você pode restaurar rapidamente.


Monitoramento

Ver script de monitoramento
#!/bin/bash
URL="https://seu-dominio.com"
RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $URL)

if [ $RESPONSE -ne 200 ]; then
    echo "n8n não está respondendo: $RESPONSE"
    docker restart n8n_container
else
    echo "n8n está saudável: $RESPONSE"
fi

Atualizações

Docker

# baixar nova imagem docker
docker pull docker.n8n.io/n8nio/n8n

# parar e remover container atual
docker stop n8n_container
docker rm n8n_container

# iniciar com nova imagem
docker run --name n8n_container [suas_opções] docker.n8n.io/n8nio/n8n

NPM

# atualizar para última versão
npm update -g n8n

# instalar versão específica
npm install -g n8n@1.81.0

# instalar versão next
npm install -g n8n@next

Reverter atualização

# instalar versão anterior
npm install -g n8n@1.80.0

# reverter migração do banco
n8n db:revert

Solução de Problemas

Logs

# ver logs do container
docker logs n8n_container

# ver logs em tempo real
docker logs -f n8n_container

# ver logs específicos
docker logs n8n_container | grep ERROR

Verificar status

# verificar se o container está rodando
docker ps | grep n8n

# verificar uso de recursos
docker stats n8n_container

# verificar conectividade
curl -I http://localhost:5678