Ir para o conteúdo
Promovaweb

Monte uma stack de estudos do n8n com Docker Compose e Traefik

Revisado em

Antes de começar

Subir em uma VPS uma stack de estudos e testes do n8n com Postgres e Traefik, acessível por HTTPS no seu domínio.

  • VPS com Docker e Compose v2 instalados.
  • Um subdomínio apontado para o IP da VPS por um registro A.
  • Portas 80 e 443 livres no servidor.

Esta stack é para estudos e testes em uma VPS. Ela segue o modelo oficial do n8n com Traefik e acrescenta o Postgres, o banco que você encontra na maioria das instalações reais. O Traefik emite o certificado HTTPS sozinho pelo Let’s Encrypt.

Crie a pasta e o arquivo .env

No servidor, crie a pasta n8n-stack e grave este .env dentro dela:

Terminal
# Domínio: o n8n fica em https://SUBDOMAIN.DOMAIN_NAME
DOMAIN_NAME=seudominio.com.br
SUBDOMAIN=n8n
# E-mail para o certificado do Let's Encrypt
SSL_EMAIL=voce@seudominio.com.br
# Versão do n8n e fuso dos agendamentos
N8N_VERSION=2.45.5
GENERIC_TIMEZONE=America/Sao_Paulo
# Banco Postgres
POSTGRES_DB=n8n
POSTGRES_USER=n8n
POSTGRES_PASSWORD=troque-por-uma-senha-forte
# Chave que cifra as credenciais
N8N_ENCRYPTION_KEY=troque-pela-chave-gerada

Gere a senha e a chave com openssl rand -hex 32 e cole no arquivo. Guarde a chave fora do servidor: sem ela, um backup do banco não abre as credenciais. Proteja o arquivo com chmod 600 .env.

Crie o compose.yaml

services:
traefik:
image: traefik:v3
restart: unless-stopped
command:
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=${SSL_EMAIL}"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "80:80"
- "443:443"
volumes:
- traefik_data:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
postgres:
image: postgres:18
restart: unless-stopped
environment:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
volumes:
- postgres_data:/var/lib/postgresql
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 10
n8n:
image: n8nio/n8n:${N8N_VERSION}
restart: unless-stopped
depends_on:
postgres:
condition: service_healthy
labels:
- traefik.enable=true
- traefik.http.routers.n8n.rule=Host(`${SUBDOMAIN}.${DOMAIN_NAME}`)
- traefik.http.routers.n8n.entrypoints=websecure
- traefik.http.routers.n8n.tls.certresolver=letsencrypt
- traefik.http.services.n8n.loadbalancer.server.port=5678
environment:
- DB_TYPE=postgresdb
- DB_POSTGRESDB_HOST=postgres
- DB_POSTGRESDB_PORT=5432
- DB_POSTGRESDB_DATABASE=${POSTGRES_DB}
- DB_POSTGRESDB_USER=${POSTGRES_USER}
- DB_POSTGRESDB_PASSWORD=${POSTGRES_PASSWORD}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
- N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
- N8N_PROTOCOL=https
- N8N_WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
- N8N_PROXY_HOPS=1
- GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
- TZ=${GENERIC_TIMEZONE}
- N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true
volumes:
- n8n_data:/home/node/.n8n
volumes:
traefik_data:
postgres_data:
n8n_data:

O Traefik é o único serviço com portas abertas. Ele redireciona a porta 80 para HTTPS, emite o certificado e entrega o domínio ao n8n na porta interna 5678. O Postgres e o n8n ficam só na rede interna do Compose.

Suba e confira

Terminal
docker compose up -d
docker compose ps
docker compose logs -f n8n

O n8n espera o Postgres responder ao healthcheck antes de iniciar. Abra o seu subdomínio com HTTPS, como https://n8n.seudominio.com.br. Cadastre o usuário owner. No node Webhook de um workflow de teste, confira se a URL usa o seu domínio com HTTPS.

Recrie o serviço com docker compose up -d --force-recreate n8n e confirme que o workflow continua lá.

Limites desta stack

Ela serve para estudar, testar workflows e validar atualizações. Ela não tem rotina de backup, monitoramento nem plano de recuperação. Antes de guardar algo importante nela, siga o guia de backup.

Para montar ou revisar essa stack com orientação ao vivo, o Desenvolvimento Colaborativo da Dev Side Studio acompanha o trabalho no terminal, com você no controle dos comandos.

Confira o resultado

O subdomínio abre o n8n por HTTPS, o node Webhook mostra a URL pública com o seu domínio e um workflow continua disponível depois de recriar o serviço.

Fontes e conferência

Conteúdo conferido na documentação oficial do n8n em 28 de outubro de 2026.