n8n self-hosted com Docker na VPS
n8n é a plataforma de automação de workflows open-source mais poderosa do mercado — conecta centenas de serviços sem código, mas com a flexibilidade de JavaScript quando necessário. Self-hostear na VPS garante privacidade total dos seus dados de automação e elimina o custo recorrente do plano cloud.
docker-compose.yml completo para n8n
Stack completa com n8n, PostgreSQL e Redis para filas:
yaml
# docker-compose.yml
services:
n8n:
image: n8nio/n8n:latest
restart: always
environment:
- N8N_HOST=n8n.seudominio.com.br
- N8N_PORT=5678
- N8N_PROTOCOL=https
- WEBHOOK_URL=https://n8n.seudominio.com.br/
- N8N_ENCRYPTION_KEY=chave-aleatoria-32-chars-aqui
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- N8N_METRICS=true
volumes:
- n8n_data:/home/node/.n8n
depends_on:
- postgres
- redis
networks:
- n8n_net
postgres:
image: postgres:16-alpine
restart: always
environment:
POSTGRES_DB: n8n
POSTGRES_USER: n8n
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- n8n_net
redis:
image: redis:7-alpine
restart: always
networks:
- n8n_net
networks:
n8n_net:
volumes:
n8n_data:
postgres_data:Dica
N8N_ENCRYPTION_KEY protege as credenciais armazenadas. Gere com: openssl rand -hex 16. Guarde em lugar seguro — sem ela, as credenciais existentes ficam ilegíveis após uma migração.
Configurar Nginx como proxy reverso
Expor o n8n com SSL via Nginx:
nginx
# /etc/nginx/conf.d/n8n.conf
server {
listen 80;
server_name n8n.seudominio.com.br;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name n8n.seudominio.com.br;
ssl_certificate /etc/letsencrypt/live/n8n.seudominio.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/n8n.seudominio.com.br/privkey.pem;
client_max_body_size 50M;
location / {
proxy_pass http://127.0.0.1:5678;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_read_timeout 300s;
}
}
# Emitir certificado:
# sudo certbot --nginx -d n8n.seudominio.com.brVariáveis de ambiente importantes
Configurações essenciais para produção:
bash
# .env — variáveis de ambiente para o docker-compose.yml
POSTGRES_PASSWORD=senha_postgres_forte_aqui
# Variáveis adicionais do n8n para produção:
# N8N_BASIC_AUTH_ACTIVE=true # habilitar basic auth (legado)
# N8N_BASIC_AUTH_USER=admin
# N8N_BASIC_AUTH_PASSWORD=senha
# Para n8n >= 1.0 — autenticação nativa:
# N8N_USER_MANAGEMENT_JWT_SECRET=secret-aleatório
# Criar usuário admin via interface web na primeira inicialização
# Limites de execução:
# EXECUTIONS_TIMEOUT=3600 # timeout de 1h por execução
# EXECUTIONS_TIMEOUT_MAX=7200
# N8N_DEFAULT_LOCALE=pt_BR
# Configurar SMTP para emails do n8n:
# N8N_EMAIL_MODE=smtp
# N8N_SMTP_HOST=smtp.gmail.com
# N8N_SMTP_PORT=465
# N8N_SMTP_USER=seu@email.com
# N8N_SMTP_PASS=app_passwordBackup e restauração do n8n
Estratégia de backup para dados e workflows do n8n:
bash
#!/bin/bash
# /opt/scripts/backup-n8n.sh
DATE=$(date +%Y%m%d_%H%M)
BACKUP_DIR="/var/backups/n8n"
mkdir -p "$BACKUP_DIR"
# 1. Backup do banco PostgreSQL
docker compose -f /opt/n8n/docker-compose.yml exec -T postgres \
pg_dump -U n8n n8n | gzip > "$BACKUP_DIR/n8n_db_${DATE}.sql.gz"
# 2. Backup do volume n8n (credenciais, config)
docker run --rm \
-v n8n_data:/data \
-v "$BACKUP_DIR":/backup \
alpine tar czf "/backup/n8n_volume_${DATE}.tar.gz" /data
# 3. Upload para S3/B2
aws s3 cp "$BACKUP_DIR/" s3://meu-bucket/n8n/ --recursive \
--exclude "*" --include "*${DATE}*"
# Limpar backups locais com mais de 7 dias
find "$BACKUP_DIR" -mtime +7 -delete
# Restaurar workflows via CLI do n8n:
# docker compose exec n8n n8n import:workflow --input=/workflows.json
# docker compose exec n8n n8n import:credentials --input=/credentials.jsonAtualizar o n8n sem perder dados
Atualizar a versão do n8n com segurança:
bash
# 1. Fazer backup antes de atualizar (OBRIGATÓRIO)
/opt/scripts/backup-n8n.sh
# 2. Verificar notas de versão para breaking changes:
# https://docs.n8n.io/release-notes/
# 3. Atualizar a imagem e reiniciar
cd /opt/n8n
docker compose pull n8n
docker compose up -d n8n
# 4. Verificar se subiu corretamente
docker compose ps
docker compose logs n8n --tail=50
# 5. Testar alguns workflows críticos manualmente
# Reverter para versão anterior em caso de problema:
docker compose down n8n
# Editar docker-compose.yml: image: n8nio/n8n:1.x.x
docker compose up -d n8n$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o n8n em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.