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ásicaDocker 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 Dadosversion: '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 Nginxnginx.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;
}
}
}
EscalabilidadeConfiguraçã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çaAutenticaçã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 MonitoramentoScript 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
TroubleshootingProblemas 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