Passo 1
Antes de começarmos a configuração do N8n no Portainer.io com Docker Swarm, é essencial garantir um desempenho ótimo e tempo de resposta rápido. Recomendamos contratar um servidor VPS Linux:
Pré-requisitos:
Passo 2
Configurando a Stack da N8N modo Fila e criando um banco de dados no Postgres
Passo 2.1
Antes de subir sua stack é preciso criar um banco de dados no Postgres, conforme o passa-a-passo logo abaixo:
- Acesse a Stack do Postgres
2. Acesse o terminal do postgres:
- Em User: Em vez de “root” acesse com “postgres”
- Dentro do terminal digite os comandos abaixo:
psql
CREATE DATABASE n8n_fila;
[Alternativa 2]
Abra o terminal pelo Bitvise e execute o seguinte comando para acessar seu banco de dados do Postgres copiando o nome do container conforme a foto abaixo:
Copie o comando abaixo:
docker exec -it psql -U postgres
Crie um banco de dados com:
CREATE DATABASE n8n_fila;
Passo 3
Configurando a Stack do N8N Modo Fila
Clique em Stack no menu lateral e depois em + Add Stack no menu superior do lado direito.
Atente-se para três serviços, sendo, dois domínios
n8n_webhook (webhook.digitalinterativo.com.br)
n8n_worker (não nessecita de dóminio)
version: '3.8'
services:
n8n_editor:
image: n8nio/n8n:2.8.3
command: start
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n_fila
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=SUA_SENHA
- DB_POSTGRESDB_POOL_MAX=20 # Sugestão: Aumenta pool de conexões do banco
- N8N_ENCRYPTION_KEY=SUA_API_KEY
- N8N_HOST=n8n.SEUDOMINIO.com.br
- N8N_EDITOR_BASE_URL=https://n8n.SEUDOMINIO.com.br/
- N8N_PROTOCOL=https
- NODE_ENV=production
# --- Timezone (Sua Sugestão + OS) ---
- GENERIC_TIMEZONE=America/Sao_Paulo
- TZ=America/Sao_Paulo
# --- Memória e TLS (Sua Sugestão Ajustada) ---
- NODE_OPTIONS=--max-old-space-size=1536 # 1.5GB pro Node
- NODE_TLS_REJECT_UNAUTHORIZED=0 # Ignora erros de SSL em APIs externas
# --- Privacidade / Logs Limpos (Nova Sugestão) ---
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_VERSION_NOTIFICATIONS_ENABLED=false
- N8N_RUNNERS_ENABLED=false
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false
- N8N_SECURE_COOKIE=true
- WEBHOOK_URL=https://webhook.SEUDOMINIO.com.br/
- EXECUTIONS_MODE=queue
- EXECUTIONS_DATA_PRUNE=true
- EXECUTIONS_DATA_MAX_AGE=336
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- QUEUE_BULL_REDIS_DB=2
- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: '3'
memory: 4096M # Limite do Docker maior que o Node (--max-old-space-size)
labels:
- traefik.enable=true
- traefik.http.routers.n8n_editor.rule=Host(`n8n.SEUDOMINIO.com.br`)
- traefik.http.routers.n8n_editor.service=n8n_editor
- traefik.http.routers.n8n_editor.entrypoints=websecure
- traefik.http.routers.n8n_editor.tls.certresolver=le
- traefik.http.services.n8n_editor.loadbalancer.server.port=5678
networks:
- traefik_public
- digital_network
n8n_webhook:
image: n8nio/n8n:2.8.3
command: webhook
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n_fila
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=SUA_SENHA
- DB_POSTGRESDB_POOL_MAX=20
- N8N_ENCRYPTION_KEY=SUA_API_KEY
- N8N_HOST=n8n.SEUDOMINIO.com.br
- N8N_EDITOR_BASE_URL=https://n8n.SEUDOMINIO.com.br/
- N8N_PROTOCOL=https
- NODE_ENV=production
- GENERIC_TIMEZONE=America/Sao_Paulo
- TZ=America/Sao_Paulo
- NODE_OPTIONS=--max-old-space-size=768 # Webhook não precisa de muita RAM
- NODE_TLS_REJECT_UNAUTHORIZED=0
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_RUNNERS_ENABLED=false
- WEBHOOK_URL=https://webhook.SEUDOMINIO.com.br/
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- QUEUE_BULL_REDIS_DB=2
- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales
deploy:
mode: replicated
replicas: 2
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: '3'
memory: 4096M # Limite seguro para os 768M do Node
labels:
- traefik.enable=true
- traefik.http.routers.n8n_webhook.rule=Host(`webhook.SEUDOMINIO.com.br`)
- traefik.http.routers.n8n_webhook.service=n8n_webhook
- traefik.http.routers.n8n_webhook.entrypoints=websecure
- traefik.http.routers.n8n_webhook.tls.certresolver=le
- traefik.http.services.n8n_webhook.loadbalancer.server.port=5678
networks:
- traefik_public
- digital_network
n8n_worker:
image: n8nio/n8n:2.8.3
command: worker --concurrency=5
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_DATABASE=n8n_fila
- DB_POSTGRESDB_USER=postgres
- DB_POSTGRESDB_PASSWORD=SUA_SENHA
- DB_POSTGRESDB_POOL_MAX=20
- N8N_ENCRYPTION_KEY=SUA_API_KEY
- N8N_HOST=n8n.SEUDOMINIO.com.br
- N8N_EDITOR_BASE_URL=https://n8n.SEUDOMINIO.com.br/
- N8N_PROTOCOL=https
- NODE_ENV=production
- GENERIC_TIMEZONE=America/Sao_Paulo
- TZ=America/Sao_Paulo
# O Worker é quem aguenta a porrada dos fluxos pesados. Aqui liberamos mais RAM!
- NODE_OPTIONS=--max-old-space-size=3072
- NODE_TLS_REJECT_UNAUTHORIZED=0
- N8N_DIAGNOSTICS_ENABLED=false
- N8N_RUNNERS_ENABLED=false
- WEBHOOK_URL=https://webhook.SEUDOMINIO.com.br/
- EXECUTIONS_MODE=queue
- QUEUE_BULL_REDIS_HOST=redis
- QUEUE_BULL_REDIS_PORT=6379
- QUEUE_BULL_REDIS_DB=2
- NODE_FUNCTION_ALLOW_EXTERNAL=moment,lodash,moment-with-locales
deploy:
mode: replicated
replicas: 1
placement:
constraints:
- node.role == manager
resources:
limits:
cpus: '3' # Aumentei um pouco a CPU pro Worker aguentar o tranco
memory: 4096M # Docker dá 4GB pro container, Node usa até 3GB com segurança
networks:
- traefik_public
- digital_network
networks:
traefik_public:
external: true
digital_network:
external: true