Este guia apresenta o processo de instalação manual do n8n pelo terminal via SSH, ideal para quem tem uma VPS vazia (só com o sistema operativo AlmaLinux) e deseja personalizar o ambiente ou aprender mais sobre a infraestrutura da própria VPS.
Confira abaixo o procedimento:
- Requisitos
- Etapa 1: Acessar o terminal e atualizar o sistema
- Etapa 2: Instalar Docker e Docker Compose
- Etapa 3: Criar estrutura de diretórios
- Etapa 4: Criar arquivo de configuração (.env)
- Etapa 5: Criar Docker Compose (Configuração básica)
- Etapa 6: Configurar firewall
- Etapa 7: Iniciar o n8n
- Etapa 8: Acessar n8n
Requisitos
Antes de iniciar, verifique se você tem:
- Sistema operacional AlmaLinux 9
- Acesso root via SSH - Confira como acessar
- Mínimo 2 GB de RAM (recomendado)
- Domínio apontado para o IP da VPS (Opcional)
Etapa 1: Acessar o terminal e atualizar o sistema
1Conecte-se ao servidor VPS via SSH
2No terminal atualize o sistema:
- A) Para atualizar todos os pacotes, digite o comando:
dnf update -y
- B) Instalar ferramentas essenciais, digite o comando:
dnf install -y epel-release curl wget git
Etapa 2: Instalar Docker e Docker Compose
1Para adicionar o repositório docker, no terminal digite:
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
2Em seguida, instale o docker:
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
3Verifique a versão instalada:
docker --version docker compose version
4Inicie o serviço docker com o comando:
systemctl start docker
5Habilite para iniciar no boot:
systemctl enable docker
6Agora verifique o status - Você deve ver “active (running)” na cor verde
systemctl status docker
Etapa 3: Criar estrutura de diretórios
Vamos incluir tudo em um diretório dedicado para manter todos os dados organizados:
1Para criar o diretório principal, no terminal digite:
mkdir -p ~/n8n-docker cd ~/n8n-docker
2Para criar subdiretórios para dados persistentes, digite:
mkdir -p n8n_data
mkdir -p postgres_data
Etapa 4: Criar arquivo de configuração (.env)
O arquivo “.env” armazena suas configurações de forma segura:
1Para criar ele, no terminal digite:
nano .env
2Em seguida, adicione a seguinte informação:
- A) Configurações Gerais:
TIMEZONE=America/Sao_PauloSubstitua “America/Sao_Paulo” pela zona horária de sua região
- B) Configurações PostgreSQL:
POSTGRES_USER=n8n POSTGRES_PASSWORD=SuaSenhaPostgresMuitoForte123! POSTGRES_DB=n8nSubstitua “SuaSenhaPostgresMuitoForte123!” por uma senha forte única
- C) Configurações n8n:
N8N_BASIC_AUTH_ACTIVE=true
N8N_BASIC_AUTH_USER=admin N8N_BASIC_AUTH_PASSWORD=SuaSenhaAdminForte456!Substitua “admin” pelo nome de usuário que deseja e “SuaSenhaAdminForte456!” por uma senha forte única
- D) Configurações de Rede:
N8N_PORT=5678
N8N_PROTOCOL=http
N8N_HOST=localhost
- E) Chave de Encriptação:
N8N_ENCRYPTION_KEY=sua_chave_unica_aqui_32_caracteres
Dica: Para gerar a chave de encriptação, digite:
openssl rand -base64 32
Copie o resultado e cole no lugar de “sua_chave_unica_aqui_32_caracteres”
- F) URL para Webhooks
WEBHOOK_URL=http://SEU_IP_AQUI:5678/Substitua “SEU_IP_AQUI” pelo IP da sua VPS.
Caso tenha configurado um domínio, substitua “SEU_IP_AQUI” pelo nome do domínio - Por exemplo: seudominio.com.br
3Salve o arquivo – No teclado pressione Ctrl + X, depois Y, e em seguida Enter
Etapa 5: Criar Docker Compose (Configuração básica)
1Para criar o arquivo que define a aplicação do n8n, no terminal digite:
nano docker-compose.yml
2Agora, de acordo ao que deseja, escolha uma das opções abaixo:
- Opção A - Configuração simples (Sem SSL) - Ideal para começar ou uso interno
- Opção B: Configuração avançada com SSL (Traefik) - Use essa configuração se você tem um domínio e quer HTTPS automático
Opção A - Configuração simples (Sem SSL)
3No terminal adicione esta configuração completa:
version: '3.8'
services:
postgres:
image: postgres:15-alpine
container_name: n8n_postgres
restart: unless-stopped
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- ./postgres_data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER}']
interval: 10s
timeout: 5s
retries: 5
networks:
- n8n_network
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
ports:
- "${N8N_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_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE}
- N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
- N8N_HOST=${N8N_HOST}
- N8N_PORT=5678
- N8N_PROTOCOL=${N8N_PROTOCOL}
- NODE_ENV=production
- WEBHOOK_URL=${WEBHOOK_URL}
- GENERIC_TIMEZONE=${TIMEZONE}
- TZ=${TIMEZONE}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
volumes:
- ./n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
networks:
- n8n_network
networks:
n8n_network:
driver: bridge
volumes:
postgres_data:
n8n_data:
4Salve o arquivo – No teclado pressione Ctrl + X, depois Y, e em seguida Enter
Opção B: Configuração avançada com SSL (Traefik)
3Antes de começar, aponte seu domínio para o IP da VPS – Confira como fazer
4Atualize o arquivo “.env” com o seguinte comando:
nano .env
5Em seguida, modifique as seguintes linhas:
N8N_HOST=n8n.seudominio.com N8N_PROTOCOL=https WEBHOOK_URL=https://n8n.seudominio.com/
LETSENCRYPT_EMAIL=seu-email@exemplo.com
DOMAIN_NAME=n8n.seudominio.comSubstitua “seudominio.com” pelo nome do domínio real e o “seu-email@exemplo.com” pelo seu
6Agora crie docker compose com Traefik, para isso digite:
nano docker-compose.yml
7Em seguida, adicione esta configuração completa:
version: '3.8'
services:
traefik:
image: traefik:v2.10
container_name: traefik
restart: unless-stopped
command:
- "--api.insecure=false"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.web.address=:80"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=${LETSENCRYPT_EMAIL}"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--entrypoints.web.http.redirections.entrypoint.to=websecure"
- "--entrypoints.web.http.redirections.entrypoint.scheme=https"
ports:
- "80:80"
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./letsencrypt:/letsencrypt
networks:
- n8n_network
postgres:
image: postgres:15-alpine
container_name: n8n_postgres
restart: unless-stopped
environment:
- POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=${POSTGRES_DB}
volumes:
- ./postgres_data:/var/lib/postgresql/data
healthcheck:
test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER}']
interval: 10s
timeout: 5s
retries: 5
networks:
- n8n_network
n8n:
image: n8nio/n8n:latest
container_name: n8n
restart: unless-stopped
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_BASIC_AUTH_ACTIVE=${N8N_BASIC_AUTH_ACTIVE}
- N8N_BASIC_AUTH_USER=${N8N_BASIC_AUTH_USER}
- N8N_BASIC_AUTH_PASSWORD=${N8N_BASIC_AUTH_PASSWORD}
- N8N_HOST=${N8N_HOST}
- N8N_PORT=5678
- N8N_PROTOCOL=${N8N_PROTOCOL}
- NODE_ENV=production
- WEBHOOK_URL=${WEBHOOK_URL}
- GENERIC_TIMEZONE=${TIMEZONE}
- TZ=${TIMEZONE}
- N8N_ENCRYPTION_KEY=${N8N_ENCRYPTION_KEY}
volumes:
- ./n8n_data:/home/node/.n8n
depends_on:
postgres:
condition: service_healthy
networks:
- n8n_network
labels:
- "traefik.enable=true"
- "traefik.http.routers.n8n.rule=Host(`${DOMAIN_NAME}`)"
- "traefik.http.routers.n8n.entrypoints=websecure"
- "traefik.http.routers.n8n.tls.certresolver=letsencrypt"
- "traefik.http.services.n8n.loadbalancer.server.port=5678"
networks:
n8n_network:
driver: bridge
8Para criar o diretório para os certificados, digite o comando:
mkdir -p letsencrypt
chmod 600 letsencrypt
9Iniciar com Traefik:
- A) Parar containers se estiverem rodando:
docker compose down
- B) Iniciar nova configuração:
docker compose up -d
- C) Ver logs:
docker compose logs -f traefik
docker compose logs -f n8n
Etapa 6: Configurar firewall
1Para habilitar firewall, digite:
systemctl enable --now firewalld
2Para permitir a porta do n8n:
-
Se for por IP (opção A Etapa 5):
firewall-cmd --permanent --add-port=5678/tcp -
Se for usar domínio com Traefik (Opção B Etapa 5):
firewall-cmd --permanent --add-service=http firewall-cmd --permanent --add-service=https
3Em seguida, para aplicar mudanças, digite:
firewall-cmd --reload
4Verificar regras:
firewall-cmd --list-all
Etapa 7: Iniciar o n8n
Agora vamos subir os containers:
1Certifique-se de estar no diretório correto e no terminal digite:
cd ~/n8n-docker
2Em segundo plano, inicie containers:
docker compose up –d
3Verifique os logs:
- Em tempo real:
docker compose logs -f - Apenas logs do n8n:
docker compose logs -f n8n
4Verifique se está rodando:
- Listar containers ativos:
docker compose ps- Ver status detalhado:
docker ps
Na primeira execução:
- Docker baixa as imagens (primeira vez demora alguns minutos)
- Cria os containers do PostgreSQL e n8n
- Conecta tudo automaticamente
Você deve ver dois containers: “n8n” e “n8n_postgres” com status “Up”
Etapa 8: Acessar n8n
1Abra o navegador e digite:
- Se usa a IP do servidor digite: http://SEU_IP_DA_VPS:5678
Exemplo: http://123.123.1.100:5678
- Se usa um domínio configurado, digite: https://n8n.seudominio.com.br
Substitua o “seudominio.com.br” pelo que possui registrado
2Na tela de login, insira as informações:
- Usuário: admin ou o que você definiu no .env
- Senha: a senha que você definiu no .env
Pronto! Agora você já está na aplicação (ou painel) n8n e com as configurações feitas