Pular para o conteúdo principal

Instalação via Docker

Este guia mostrará como instalar e executar o n8n usando Docker, a forma mais robusta e recomendada para ambientes de produção.

Configuração Básica

Docker Compose Simples

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - N8N_PROTOCOL=https
      - N8N_HOST=seu-dominio.com
      - GENERIC_TIMEZONE=America/Sao_Paulo
      - WEBHOOK_URL=https://seu-dominio.com/
    volumes:
      - n8n_data:/home/node/.n8n

volumes:
  n8n_data:

Configuração Completa com Banco de Dados

version: '3.8'

services:
  n8n:
    image: n8nio/n8n:latest
    restart: unless-stopped
    ports:
      - "5678:5678"
    environment:
      - N8N_PROTOCOL=https
      - N8N_HOST=seu-dominio.com
      - GENERIC_TIMEZONE=America/Sao_Paulo
      - 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
      - N8N_ENCRYPTION_KEY=sua_chave_32_caracteres
    volumes:
      - n8n_data:/home/node/.n8n
    depends_on:
      - postgres
      - redis

  postgres:
    image: postgres:15
    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
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data

volumes:
  n8n_data:
  postgres_data:
  redis_data:

Executar com Docker Compose

# Baixar e executar
docker-compose up -d

# Ver logs
docker-compose logs -f n8n

# Parar
docker-compose down

Configuração Nginx

nginx.conf

events {
    worker_connections 1024;
}

http {
    upstream n8n_backend {
        server n8n:5678;
    }

    server {
        listen 80;
        server_name seu-dominio.com;
        return 301 https://$server_name$request_uri;
    }

    server {
        listen 443 ssl http2;
        server_name seu-dominio.com;

        ssl_certificate /etc/nginx/ssl/cert.pem;
        ssl_certificate_key /etc/nginx/ssl/key.pem;

        location / {
            proxy_pass http://n8n_backend;
            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;
        }
    }
}

Escalabilidade

Configuração de Filas com Redis

services:
  n8n:
    environment:
      - REDIS_URL=redis://redis:6379
      - EXECUTIONS_PROCESS=main
      - EXECUTIONS_MODE=regular
      - EXECUTIONS_TIMEOUT=300000
      - EXECUTIONS_TIMEOUT_MAX=3600000

  redis:
    image: redis:7-alpine
    command: redis-server --appendonly yes --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis_data:/data

Load Balancing com Múltiplas Instâncias

version: '3.8'

services:
  n8n-1:
    image: n8nio/n8n:latest
    environment:
      - EXECUTIONS_PROCESS=main
      - REDIS_URL=redis://redis:6379
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
    depends_on:
      - postgres
      - redis

  n8n-2:
    image: n8nio/n8n:latest
    environment:
      - EXECUTIONS_PROCESS=main
      - REDIS_URL=redis://redis:6379
      - DB_TYPE=postgresdb
      - DB_POSTGRESDB_HOST=postgres
    depends_on:
      - postgres
      - redis

  nginx:
    image: nginx:alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx-lb.conf:/etc/nginx/nginx.conf
    depends_on:
      - n8n-1
      - n8n-2

Segurança

Autenticação Básica

services:
  n8n:
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=SUA_SENHA_SEGURA_AQUI

Configuração de Rede

services:
  n8n:
    networks:
      - n8n_internal
    expose:
      - "5678"

  nginx:
    networks:
      - n8n_internal
      - n8n_external
    ports:
      - "443:443"

networks:
  n8n_internal:
    driver: bridge
  n8n_external:
    driver: bridge

Backup e Monitoramento

Script de Backup

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

# Backup do banco de dados
docker exec postgres pg_dump -U n8n n8n > $BACKUP_DIR/db_$DATE.sql

# Backup dos dados do n8n
docker exec n8n tar -czf - /home/node/.n8n > $BACKUP_DIR/n8n_$DATE.tar.gz

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

Cron Job para Backup

# Adicionar ao crontab
0 2 * * * /path/to/backup_script.sh

Health Check

#!/bin/bash
CONTAINER_NAME="n8n"
HEALTH_URL="http://localhost:5678/healthz"

if ! docker ps | grep -q $CONTAINER_NAME; then
    echo "Container $CONTAINER_NAME não está rodando"
    docker-compose up -d
    exit 1
fi

RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $HEALTH_URL)

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

Troubleshooting

Problemas Comuns

Container não inicia

# Verificar logs
docker-compose logs n8n

# Verificar se a porta está em uso
netstat -tulpn | grep 5678

# Reiniciar container
docker-compose restart n8n

Problemas de Permissão

# Corrigir permissões do volume
sudo chown -R 1000:1000 /path/to/n8n_data

Problemas de Rede

# Verificar conectividade
docker exec n8n ping postgres
docker exec n8n ping redis

# Verificar variáveis de ambiente
docker exec n8n env | grep N8N