Variáveis de Ambiente
Este documento explica como configurar variáveis de ambiente para n8n em diferentes contextos de deployment, abordando variáveis essenciais de produção, configuração de segurança, otimização de performance, separação entre ambientes (dev/staging/prod), e gerenciamento seguro de credenciais através de environment variables que facilitam deployment automatizado e configuração flexível sem hardcoding.
O que você vai aprender
- Variáveis essenciais para produção
- Configurações de segurança
- Otimização de performance
- Separação de ambientes
- Gerenciamento de credenciais
Configuração Básica
Variáveis Essenciais
# <ion-icon name="key-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Configurações básicas
N8N_PORT=5678
N8N_PROTOCOL=https
N8N_HOST=seu-dominio.com
GENERIC_TIMEZONE=America/Sao_Paulo
# <ion-icon name="git-network-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> URL para webhooks (importante!)
WEBHOOK_URL=https://seu-dominio.com/
# <ion-icon name="time-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Fuso horário brasileiro
GENERIC_TIMEZONE=America/Sao_Paulo
Banco de Dados
# <ion-icon name="server-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> PostgreSQL (Recomendado)
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=localhost
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n
DB_POSTGRESDB_PASSWORD=senha_segura
# <ion-icon name="server-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> MySQL (Alternativa)
DB_TYPE=mysqldb
DB_MYSQLDB_HOST=localhost
DB_MYSQLDB_PORT=3306
DB_MYSQLDB_DATABASE=n8n
DB_MYSQLDB_USER=n8n
DB_MYSQLDB_PASSWORD=senha_segura
Segurança
# <ion-icon name="sparkles-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Chave de criptografia (32 caracteres)
N8N_ENCRYPTION_KEY=sua_chave_32_caracteres_aqui
# <ion-icon name="shield-checkmark-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Autenticação básica
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=senha_segura
# <ion-icon name="shield-checkmark-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Desabilitar gerenciamento de usuários (se usar auth externa)
N8N_USER_MANAGEMENT_DISABLED=false
Configurações de Segurança
Autenticação
Basic Auth
# <ion-icon name="shield-checkmark-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Ativar autenticação básica
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=senha_segura
# <ion-icon name="person-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Para múltiplos usuários (separar por vírgula)
N8N_BASIC_AUTH_USER=admin,usuario1,usuario2
N8N_BASIC_AUTH_PASSWORD=senha1,senha2,senha3
OAuth2
# <ion-icon name="settings-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Configurar OAuth2
N8N_OAUTH2_ACTIVE=true
N8N_OAUTH2_CLIENT_ID=seu_client_id
N8N_OAUTH2_CLIENT_SECRET=seu_client_secret
N8N_OAUTH2_AUTHORIZATION_URL=https://auth.provider.com/oauth/authorize
N8N_OAUTH2_TOKEN_URL=https://auth.provider.com/oauth/token
Criptografia
# <ion-icon name="sparkles-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Chave de criptografia obrigatória
N8N_ENCRYPTION_KEY=sua_chave_32_caracteres_aqui
# <ion-icon name="key-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Gerar chave segura
openssl rand -hex 16
# <ion-icon name="document-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> ou
node -e "console.log(require('crypto').randomBytes(16).toString('hex'))"
Privacidade de Dados
# <ion-icon name="key-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Configurações LGPD
EXECUTIONS_DATA_SAVE_ON_ERROR=none
EXECUTIONS_DATA_SAVE_ON_SUCCESS=none
EXECUTIONS_DATA_SAVE_MANUAL_EXECUTIONS=false
# <ion-icon name="analytics-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Limpeza automática de dados
EXECUTIONS_DATA_PRUNE=true
EXECUTIONS_DATA_MAX_AGE=168 # 7 dias em horas
EXECUTIONS_DATA_PRUNE_TIMEOUT=3600 # 1 hora
Performance e Escalabilidade
Redis para Filas
# <ion-icon name="settings-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Configurar Redis para processamento distribuído
REDIS_URL=redis://localhost:6379
# <ion-icon name="key-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Configurações de execução
EXECUTIONS_PROCESS=main
EXECUTIONS_MODE=regular
# <ion-icon name="speedometer-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Para alta performance
EXECUTIONS_TIMEOUT=300000 # 5 minutos
EXECUTIONS_TIMEOUT_MAX=3600000 # 1 hora
Recursos do Sistema
# <ion-icon name="sparkles-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Limites de memória
NODE_OPTIONS="--max-old-space-size=4096"
# <ion-icon name="git-network-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Timeouts de conexão
N8N_TIMEOUT=30000 # 30 segundos
N8N_TIMEOUT_MAX=300000 # 5 minutos
Logs e Monitoramento
# <ion-icon name="document-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Nível de logs
N8N_LOG_LEVEL=info # debug, info, warn, error
# <ion-icon name="folder-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Logs estruturados
N8N_LOG_FORMAT=json
# <ion-icon name="analytics-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Métricas de performance
N8N_METRICS=true
Separação de Ambientes
Desenvolvimento
# <ion-icon name="key-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> .env.development
N8N_PORT=5678
N8N_PROTOCOL=http
N8N_HOST=localhost
GENERIC_TIMEZONE=America/Sao_Paulo
# <ion-icon name="code-slash-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Banco SQLite para desenvolvimento
DB_TYPE=sqlite
DB_SQLITE_DATABASE=/home/node/.n8n/database.sqlite
# <ion-icon name="document-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Logs detalhados
N8N_LOG_LEVEL=debug
N8N_LOG_FORMAT=simple
# <ion-icon name="code-slash-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Sem autenticação para desenvolvimento
N8N_BASIC_AUTH_ACTIVE=false
Staging
# <ion-icon name="key-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> .env.staging
N8N_PORT=5678
N8N_PROTOCOL=https
N8N_HOST=staging.seudominio.com
GENERIC_TIMEZONE=America/Sao_Paulo
# <ion-icon name="server-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> PostgreSQL staging
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=staging-db.seudominio.com
DB_POSTGRESDB_DATABASE=n8n_staging
DB_POSTGRESDB_USER=n8n_staging
DB_POSTGRESDB_PASSWORD=senha_staging
# <ion-icon name="shield-checkmark-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Autenticação básica
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=staging_user
N8N_BASIC_AUTH_PASSWORD=senha_staging
# <ion-icon name="document-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Logs moderados
N8N_LOG_LEVEL=info
Produção
# <ion-icon name="key-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> .env.production
N8N_PORT=5678
N8N_PROTOCOL=https
N8N_HOST=seudominio.com
GENERIC_TIMEZONE=America/Sao_Paulo
# <ion-icon name="server-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> PostgreSQL produção
DB_TYPE=postgresdb
DB_POSTGRESDB_HOST=prod-db.seudominio.com
DB_POSTGRESDB_DATABASE=n8n_production
DB_POSTGRESDB_USER=n8n_production
DB_POSTGRESDB_PASSWORD=senha_producao_segura
# <ion-icon name="server-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Redis para filas
REDIS_URL=redis://redis.seudominio.com:6379
# <ion-icon name="shield-checkmark-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Segurança máxima
N8N_ENCRYPTION_KEY=chave_32_caracteres_producao
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin
N8N_BASIC_AUTH_PASSWORD=senha_producao_segura
# <ion-icon name="speedometer-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Performance otimizada
EXECUTIONS_PROCESS=main
EXECUTIONS_MODE=regular
EXECUTIONS_TIMEOUT=300000
EXECUTIONS_TIMEOUT_MAX=3600000
# <ion-icon name="document-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Logs de produção
N8N_LOG_LEVEL=warn
N8N_LOG_FORMAT=json
Docker e Containerização
Docker Compose
version: '3.8'
services:
n8n:
image: n8nio/n8n:latest
restart: unless-stopped
ports:
- "5678:5678"
environment:
# Configurações básicas
- N8N_PROTOCOL=https
- N8N_HOST=seudominio.com
- GENERIC_TIMEZONE=America/Sao_Paulo
- WEBHOOK_URL=https://seudominio.com/
# Banco de dados
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=n8n
- DB_POSTGRESDB_USER=n8n
- DB_POSTGRESDB_PASSWORD=${DB_PASSWORD}
# Redis
- REDIS_URL=redis://redis:6379
# Segurança
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- N8N_BASIC_AUTH_ACTIVE=true
- N8N_BASIC_AUTH_USER=admin
- N8N_BASIC_AUTH_PASSWORD=${N8N_PASSWORD}
# Performance
- EXECUTIONS_PROCESS=main
- EXECUTIONS_MODE=regular
- EXECUTIONS_TIMEOUT=300000
# Logs
- N8N_LOG_LEVEL=info
- N8N_LOG_FORMAT=json
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=${DB_PASSWORD}
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:
Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: n8n
spec:
replicas: 3
selector:
matchLabels:
app: n8n
template:
metadata:
labels:
app: n8n
spec:
containers:
- name: n8n
image: n8nio/n8n:latest
ports:
- containerPort: 5678
env:
- name: N8N_PROTOCOL
value: "https"
- name: N8N_HOST
value: "seudominio.com"
- name: GENERIC_TIMEZONE
value: "America/Sao_Paulo"
- name: DB_TYPE
value: "postgresdb"
- name: DB_POSTGRESDB_HOST
value: "postgres-service"
- name: DB_POSTGRESDB_DATABASE
value: "n8n"
- name: DB_POSTGRESDB_USER
valueFrom:
secretKeyRef:
name: n8n-secrets
key: db-user
- name: DB_POSTGRESDB_PASSWORD
valueFrom:
secretKeyRef:
name: n8n-secrets
key: db-password
- name: N8N_ENCRYPTION_KEY
valueFrom:
secretKeyRef:
name: n8n-secrets
key: encryption-key
- name: REDIS_URL
value: "redis://redis-service:6379"
resources:
requests:
memory: "512Mi"
cpu: "250m"
limits:
memory: "2Gi"
cpu: "1000m"
Gerenciamento de Credenciais
Variáveis Sensíveis
# <ion-icon name="code-slash-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Nunca commite estas variáveis no código!
N8N_ENCRYPTION_KEY=sua_chave_32_caracteres_aqui
DB_POSTGRESDB_PASSWORD=senha_super_segura
N8N_BASIC_AUTH_PASSWORD=senha_admin
REDIS_PASSWORD=senha_redis
Arquivo .env
# <ion-icon name="git-branch-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> .env (não commitar no git)
N8N_ENCRYPTION_KEY=sua_chave_32_caracteres_aqui
DB_POSTGRESDB_PASSWORD=senha_super_segura
N8N_BASIC_AUTH_PASSWORD=senha_admin
REDIS_PASSWORD=senha_redis
Secrets Management
Docker Secrets
# <ion-icon name="cloud-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> docker-compose.yml
services:
n8n:
image: n8nio/n8n:latest
secrets:
- n8n_encryption_key
- db_password
environment:
- N8N_ENCRYPTION_KEY_FILE=/run/secrets/n8n_encryption_key
- DB_POSTGRESDB_PASSWORD_FILE=/run/secrets/db_password
secrets:
n8n_encryption_key:
file: ./secrets/n8n_encryption_key.txt
db_password:
file: ./secrets/db_password.txt
Kubernetes Secrets
apiVersion: v1
kind: Secret
metadata:
name: n8n-secrets
type: Opaque
data:
encryption-key: <base64-encoded-key>
db-password: <base64-encoded-password>
basic-auth-password: <base64-encoded-password>
Monitoramento e Debugging
Logs
# <ion-icon name="document-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Níveis de log
N8N_LOG_LEVEL=debug # Mais detalhado
N8N_LOG_LEVEL=info # Informações gerais
N8N_LOG_LEVEL=warn # Apenas avisos
N8N_LOG_LEVEL=error # Apenas erros
# <ion-icon name="repeat-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Formato de logs
N8N_LOG_FORMAT=simple # Formato simples
N8N_LOG_FORMAT=json # Formato JSON (recomendado)
Métricas
# <ion-icon name="analytics-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Ativar métricas
N8N_METRICS=true
# <ion-icon name="analytics-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Endpoint de métricas
N8N_METRICS_ENDPOINT=/metrics
# <ion-icon name="analytics-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Métricas personalizadas
N8N_METRICS_PREFIX=n8n_
Health Checks
# <ion-icon name="document-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Endpoint de health check
N8N_HEALTH_CHECK_ENDPOINT=/healthz
# <ion-icon name="key-outline" style={{ fontSize: '24px', color: '#ea4b71' }}></ion-icon> Configurações de health check
N8N_HEALTH_CHECK_TIMEOUT=5000
N8N_HEALTH_CHECK_INTERVAL=30000
Checklist de Produção
Segurança
-
configurada (32 caracteres)N8N_ENCRYPTION_KEY
-
ou OAuth2 configuradoN8N_BASIC_AUTH_ACTIVE=true
-
em produçãoN8N_PROTOCOL=https
- Senhas fortes para banco de dados
- Firewall configurado
- SSL/HTTPS configurado
Performance
-
configurado para filasREDIS_URL
-
configuradoEXECUTIONS_PROCESS=main
-
configuradoEXECUTIONS_MODE=regular
- Timeouts adequados configurados
- Recursos do sistema adequados
Configuração
-
GENERIC_TIMEZONE=America/Sao_Paulo
-
configurado corretamenteWEBHOOK_URL
- Banco de dados PostgreSQL configurado
- Logs configurados para produção
- Backup configurado
Próximos Passos
Agora que você configurou as variáveis de ambiente:
- Configuração de Database - Configure banco de dados PostgreSQL
- Configuração de Filas - Configure Redis para processamento escalável
- Configuração SSL/HTTPS - Configure HTTPS seguro
- Segurança - Configure autenticação avançada
Dica Pro
Sempre use variáveis de ambiente para configurações sensíveis. Nunca hardcode senhas ou chaves no código!
Importante
Em produção, sempre use HTTPS (
N8N_PROTOCOL=https
) e configure uma chave de criptografia forte (N8N_ENCRYPTION_KEY
).