Sequência completa, do zero. Siga na ordem — cada passo depende do anterior.

Pré-requisitos

  • Linux com docker e docker compose instalados (veja Repositório para o passo-a-passo de instalação e clone).
  • Usuário no grupo docker.
  • Acesso de admin ao painel do registrador do domínio example.com.
  • Repositório clonado em /opt/server/.

Passos

1

Configurar DNS

No registrador, criar:
  • A @ → <IP-do-servidor> (apex aponta pro servidor)
  • CNAME n8n → example.com
  • CNAME npm → example.com
Abrir portas 80 e 443 no firewall (UFW + security group do provedor).Detalhes completos, alternativas (wildcard) e validação em Configurar DNS. Não avance sem dig +short n8n.example.com retornar o IP do servidor — o Let’s Encrypt vai falhar depois.
2

Bootstrap

Cria a rede Docker server_net, gera todas as senhas e ajusta permissão de n8n/data/:
cd /opt/server/infra
./bootstrap.sh
3

Subir Postgres

cd /opt/server/infra/postgres
docker compose up -d
docker compose ps   # aguardar STATUS = healthy
4

Criar DB do n8n

./create-db.sh n8n
A saída traz a senha gerada e o caminho secrets/n8n.env.
5

Preencher n8n/.env com as credenciais do DB

Editar /opt/server/infra/n8n/.env e copiar os valores de secrets/n8n.env:
DB_POSTGRESDB_USER=n8n
DB_POSTGRESDB_PASSWORD=<a senha gerada>
6

Subir Redis

cd /opt/server/infra/redis
docker compose up -d
7

Subir n8n

cd /opt/server/infra/n8n
docker compose up -d
docker compose logs -f n8n   # aguardar "Editor is now accessible"
Neste ponto o n8n está rodando internamente em n8n:5678, ainda sem acesso externo.
8

Subir NPM

cd /opt/server/infra/npm
docker compose up -d
docker compose ps   # confirmar que subiu
9

Acessar a UI do NPM via SSH tunnel e trocar o login default

A porta 81 do NPM só escuta em loopback (127.0.0.1:81) — não é acessível pela Internet. Pra fazer o setup inicial, use SSH tunnel:
# do seu computador local:
ssh -L 8081:127.0.0.1:81 <user>@<ip-do-servidor>
# no browser local: http://localhost:8081
Login inicial: admin@example.com / changeme. O NPM força você a trocar email e senha imediatamente. Faça isso antes de qualquer outra coisa.
10

Criar Proxy Host para n8n.example.com

Na UI do NPM → Hosts → Proxy Hosts → Add Proxy Host:Aba Details:
  • Domain Names: n8n.example.com
  • Scheme: http
  • Forward Hostname / IP: n8n
  • Forward Port: 5678
  • Block Common Exploits: ligado
  • Websockets Support: ligado (n8n usa)
Aba SSL:
  • SSL Certificate: Request a new SSL Certificate
  • Force SSL: ligado
  • HTTP/2 Support: ligado
  • Email: seu email (Let’s Encrypt notifica expiração por aí)
  • I Agree to the Let’s Encrypt Terms: ✓
Save. NPM faz o desafio HTTP-01 e emite o certificado em ~30s. Se falhar, confirme o DNS em Configurar DNS e as portas 80/443 abertas.
11

Validar n8n

Abrir https://n8n.example.com no browser. Wizard do n8n aparece pedindo pra criar o owner account (admin interno do n8n). Criar com email + senha forte.A partir daqui, o n8n está funcional.
12

Expor o admin do NPM via subdomínio HTTPS

A porta 81 já está bloqueada externamente (compose binda em 127.0.0.1), mas pra acessar a UI sem precisar de SSH tunnel toda vez, crie um Proxy Host:Proxy Host em Hosts → Proxy Hosts → Add:
  • Domain: npm.example.com
  • Scheme: http
  • Forward Hostname / IP: npm
  • Forward Port: 81
  • SSL: Request new SSL Certificate + Force SSL + HTTP/2
Save. Depois disso, acessa pela rota normal: https://npm.example.com. O SSH tunnel fica só pra emergência (se o subdomínio quebrar).

Checklist final

  • dig +short n8n.example.com retorna o IP do servidor
  • docker network ls mostra server_net
  • docker ps mostra 4 containers up: postgres, redis, n8n, npm
  • https://n8n.example.com carrega e owner do n8n foi criado
  • Login default do NPM (admin@example.com / changeme) foi substituído
  • Porta 81 só escuta em loopback (docker port npm mostra 127.0.0.1:81)
  • https://npm.example.com carrega e leva pra UI do NPM
  • Backup automático configurado (ver Backups)