Introdução
O n8n é uma poderosa ferramenta de automação de workflows, amplamente utilizada para integração entre sistemas, APIs e serviços. Sua flexibilidade permite desde automações simples até pipelines complexos em ambientes corporativos.
Neste artigo será apresentado um guia completo para instalação do n8n utilizando Docker Compose, com banco de dados PostgreSQL, Redis para fila de execução e persistência de dados no host, seguindo boas práticas de organização, escalabilidade e manutenção.
A stack utiliza uma rede Docker externa e variáveis de ambiente centralizadas em um arquivo .env, facilitando a reutilização do mesmo docker-compose.yml em diferentes ambientes.
Pré-requisitos
Antes de iniciar, é necessário garantir:
Docker Compose v2 ou superior
Servidor Linux (VM ou bare metal)
Rede Docker externa previamente criada
Caso a rede ainda não exista, crie com:
docker network create radagast_net Clonando o repositório
O projeto está disponível no GitHub:
👉 https://github.com/RosnerTech/legolas-n8n/tree/main
Após clonar o repositório, será necessário renomear o arquivo de variáveis de ambiente, conforme o padrão do Docker Compose.
cp example.env .env ⚠️ O Docker Compose não utiliza automaticamente arquivos chamados example.env.
O arquivo precisa se chamar exatamente .env para que as variáveis sejam carregadas.
Estrutura do projeto
A estrutura básica do projeto é composta por:
docker-compose.yml → definição dos serviços
.env → variáveis de ambiente sensíveis
Diretórios no host para persistência de dados:
Essa organização facilita backup, manutenção e migração do ambiente.
Uso do arquivo .env no Docker Compose
O arquivo .env é responsável por armazenar valores sensíveis e reutilizáveis, como credenciais de banco de dados.
Exemplo de .env:
# Banco de dados PostgreSQL
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=changeme O docker-compose.yml apenas referencia essas variáveis, utilizando o formato ${VARIAVEL}.
Dessa forma, o mesmo compose pode ser utilizado em diferentes ambientes sem alteração direta no arquivo.
Explicação do docker-compose.yml
A stack do n8n é composta por três serviços principais, todos conectados à mesma rede Docker externa.
services:
legolas-n8n:
image: docker.n8n.io/n8nio/n8n:latest
container_name: legolas-n8n
restart: unless-stopped
environment:
TZ: America/Sao_Paulo
GENERIC_TIMEZONE: America/Sao_Paulo
DB_TYPE: postgresdb
DB_POSTGRESDB_HOST: legolas-db-n8n
DB_POSTGRESDB_PORT: 5432
DB_POSTGRESDB_DATABASE: ${POSTGRES_DB}
DB_POSTGRESDB_USER: ${POSTGRES_USER}
DB_POSTGRESDB_PASSWORD: ${POSTGRES_PASSWORD}
DB_POSTGRESDB_SCHEMA: public
QUEUE_MODE: redis
QUEUE_REDIS_HOST: legolas-redis-n8n
QUEUE_REDIS_PORT: 6379
N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS: "true"
N8N_RUNNERS_ENABLED: "true"
N8N_HOST: legolas.rosnertech.com.br
N8N_PROTOCOL: https
WEBHOOK_URL: https://legolas.rosnertech.com.br/
ports:
- "5678:5678"
volumes:
- /opt/docker/legolas-n8n/n8n-data:/home/node/.n8n
depends_on:
- legolas-db-n8n
- legolas-redis-n8n
networks:
- radagast_net
legolas-db-n8n:
image: postgres:15-alpine
container_name: legolas-db-n8n
restart: unless-stopped
environment:
TZ: America/Sao_Paulo
POSTGRES_DB: ${POSTGRES_DB}
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
volumes:
- /opt/docker/legolas-n8n/postgres-data:/var/lib/postgresql/data
networks:
- radagast_net
legolas-redis-n8n:
image: redis:7-alpine
container_name: legolas-redis-n8n
restart: unless-stopped
command: redis-server --appendonly yes
volumes:
- /opt/docker/legolas-n8n/redis-data:/data
networks:
- radagast_net
networks:
radagast_net:
external: true
Serviço legolas-n8n – n8n
Este é o container principal da stack, responsável por:
Executar os workflows
Disponibilizar a interface Web
Gerenciar webhooks
Coordenar execuções via fila (Redis)
Principais configurações:
Banco de dados PostgreSQL como backend
Redis configurado para modo fila (QUEUE_MODE=redis)
Host, protocolo e URL de webhook definidos para acesso externo
Persistência de dados no diretório do host:
/opt/docker/legolas-n8n/n8n-data Esse diretório armazena:
credenciais
workflows
configurações internas do n8n
Serviço legolas-db-n8n – PostgreSQL
Este serviço é responsável por armazenar:
Workflows
Execuções
Estados internos do n8n
Características:
Baseado na imagem postgres:15-alpine
Credenciais definidas via .env
Persistência em diretório do host:
/opt/docker/legolas-n8n/postgres-data A persistência garante que os dados não sejam perdidos em reinícios ou recriação dos containers.
Serviço legolas-redis-n8n – Redis
O Redis é utilizado como fila de execução, permitindo maior escalabilidade e controle das automações.
Configurações importantes:
Modo append-only habilitado
Persistência de dados no host:
/opt/docker/legolas-n8n/redis-data Esse modelo é indicado para ambientes com maior volume de execuções.
Persistência de dados: pasta do host vs volumes Docker
Persistência em pasta do host (bind mount)
Neste projeto, a persistência é feita diretamente em diretórios do host.
Vantagens:
Facilidade de backup
Acesso direto aos dados
Simplicidade para ambientes LAB e VPS
Desvantagens:
Maior dependência da estrutura do host
Menor portabilidade entre servidores
Persistência usando volumes Docker
Alternativamente, poderia ser utilizado:
volumes:
- n8n_data:/home/node/.n8n Vantagens:
Maior abstração
Melhor portabilidade
Gerenciamento nativo pelo Docker
Desvantagens:
Backup menos intuitivo
Dados menos visíveis no host
Qual abordagem escolher?
LAB / VPS / Estudos: pasta do host
Produção / Clusters / Portabilidade: volumes Docker
Ambas são válidas, desde que aplicadas corretamente.
Inicialização do ambiente
Com os arquivos docker-compose.yml e .env configurados, execute:
docker compose up -d Para validar os containers:
docker compose ps Todos os serviços devem estar com status Up.
Acesso à interface Web do n8n
Após a inicialização, o n8n estará disponível no endereço configurado:
http://IP_DO_SERVIDOR:5678 No primeiro acesso, o n8n solicitará a criação do usuário administrador.
⚠️ Importante:
essa abordagem é indicada apenas para LAB
não é recomendada para produção
não utiliza HTTPS por padrão
Considerações finais
A utilização do Docker Compose para executar o n8n permite:
Padronização do ambiente
Escalabilidade com Redis
Persistência confiável de dados
Facilidade de manutenção e backup
Essa abordagem é indicada tanto para ambientes de estudo quanto para ambientes produtivos bem estruturados.