Como instalar o N8N pelo Portainer

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:

Servidor VPS com MEGA Desconto!

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:

  1.  Acesse a Stack do Postgres
Capa-Instalação-Portainer-Criando-Banco-de-Dados-Chatwoot

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:

Como encontrar o nome do container no Portainer

Copie o comando abaixo:

				
					docker exec -it <nome do container> 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.

Subindo-Stack-Portainer-Traefik

Atente-se para três serviços, sendo, dois domínios

n8n_editor (n8n.digitalinterativo.com.br)

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
				
			
Use o link abaixo para gerar a senha de 32 caracteres conforme mencionado no vídeo.

Menu Interativo

~/digitalinterativo/trilhas.sh — aulas
/
#!/usr/bin/trilha --interativa --self-hosted
🔓 aberto🔐 exclusivo aluno⏳ em breve
COMPARTILHAR