Monte uma stack de estudos do n8n com Docker Compose e Traefik
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:
# Domínio: o n8n fica em https://SUBDOMAIN.DOMAIN_NAMEDOMAIN_NAME=seudominio.com.brSUBDOMAIN=n8n
# E-mail para o certificado do Let's EncryptSSL_EMAIL=voce@seudominio.com.br
# Versão do n8n e fuso dos agendamentosN8N_VERSION=2.45.5GENERIC_TIMEZONE=America/Sao_Paulo
# Banco PostgresPOSTGRES_DB=n8nPOSTGRES_USER=n8nPOSTGRES_PASSWORD=troque-por-uma-senha-forte
# Chave que cifra as credenciaisN8N_ENCRYPTION_KEY=troque-pela-chave-geradaGere 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
docker compose up -ddocker compose psdocker compose logs -f n8nO 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.
