Instalando e Configurando o n8n localmente no Windows com Docker e Docker Compose

n8n é uma ferramenta open-source de automação de fluxos de trabalho (workflow automation) que simplifica e agiliza tarefas ao conectar vários aplicativos e serviços. Com ele, você pode integrar sistemas e APIs diferentes para criar workflows automatizados – por exemplo: sincronizar dados entre um CRM e uma planilha, enviar notificações quando certos eventos ocorrem, realizar ETL de dados periodicamente, automatizar tarefas de TI ou até fluxos pessoais. Sua interface visual permite construir essas automações sem exigir muito código, tornando-o bastante flexível para desenvolvedores e equipes técnicas.

Pré-requisitos: Docker Desktop no Windows

Para rodar o n8n localmente via contêiner, precisamos do Docker e do Docker Compose instalados no Windows:

  • Docker Desktop: Faça o download e instale o Docker Desktop a partir do site oficial do Docker. Durante a instalação no Windows 10/11, habilite o backend WSL2 (Windows Subsystem for Linux), pois ele garante melhor desempenho e compatibilidade para containers Linux.
  • Docker Compose: As versões atuais do Docker Desktop já incluem o Docker Compose (como um plugin integrado). Você pode verificar se tudo foi instalado corretamente abrindo um terminal (Prompt de Comando ou PowerShell) e executando: docker --version e em seguida docker compose version. Isso deve exibir as versões do Docker Engine e do Compose, confirmando a instalação.

Observação: Caso o Docker Desktop pergunte, ative os recursos necessários (como Hyper-V ou WSL2) e reinicie o computador se solicitado. Após a instalação, certifique-se de que o Docker esteja em execução (ícone do Docker ativo na bandeja do sistema).

Criando o arquivo docker-compose.yaml do n8n

Com o Docker instalado, vamos configurar o n8n usando Docker Compose para facilitar a orquestração do contêiner e garantir a persistência dos dados. Crie uma pasta de projeto (por exemplo, n8n-docker) em seu diretório de escolha e dentro dela crie um arquivo chamado docker-compose.yaml com o conteúdo abaixo:

yamlCopiarEditarversion: "3"
services:
  n8n:
    image: n8nio/n8n:latest
    container_name: n8n
    restart: always  # Reinicia automaticamente em caso de falha
    ports:
      - "5678:5678"   # Mapeia a porta 5678 do container para 5678 do host (localhost)
    volumes:
      - n8n_data:/home/node/.n8n   # Volume para persistência dos dados do n8n
    environment:
      - N8N_HOST=localhost
      - N8N_PORT=5678
      - N8N_PROTOCOL=http
      - WEBHOOK_URL=http://localhost:5678/
      - GENERIC_TIMEZONE=America/Sao_Paulo
      - N8N_ENCRYPTION_KEY=SuaChaveDeCriptografiaAqui
      # Variáveis opcionais de segurança:
      # - N8N_BASIC_AUTH_ACTIVE=true
      # - N8N_BASIC_AUTH_USER=admin
      # - N8N_BASIC_AUTH_PASSWORD=uma_senha_segura
      # - N8N_SECURE_COOKIE=false
volumes:
  n8n_data:

Vamos entender cada parte dessa configuração:

  • Imagem do n8n: Usamos a imagem oficial n8nio/n8n:latest do Docker Hub. Você pode fixar uma versão específica (por exemplo, n8nio/n8n:1.XX.X) se desejar ter controle de versão.
  • Container name: Nomeamos o contêiner como “n8n” (opcional, facilita identificar o contêiner nas listagens).
  • Restart: Definido como always para que o contêiner do n8n reinicie automaticamente em caso de falhas ou quando o Docker for reiniciado.
  • Ports: 5678:5678 expõe a porta padrão do n8n (5678) para acesso via host. Assim, a interface web ficará acessível em http://localhost:5678. (Estamos usando localhost por segurança; se você precisasse expor em rede, poderia usar seu IP ou domínio aqui.)
  • Volumes: Montamos um volume nomeado n8n_data em /home/node/.n8n dentro do contêiner. Esse é o diretório onde o n8n salva seu banco de dados SQLite e a chave de criptografia dos dados. Isso garante persistência – ou seja, seus fluxos, credenciais e configurações permanecem salvos mesmo se o contêiner for recriado ou atualizado. (Detalhe: por padrão o n8n usa um banco SQLite nesse diretório para armazenar tudo. Em setups avançados, pode-se usar PostgreSQL, mas para uma instalação local simples o SQLite já vem configurado).
  • Environment (variáveis de ambiente): Aqui definimos várias variáveis que configuram o comportamento do n8n no contêiner. Vamos detalhar as principais:

Variáveis de ambiente críticas no Compose

  • N8N_HOST: Define o host onde o n8n será acessível. Em ambientes de produção costuma-se usar o domínio ou IP do servidor. No nosso caso, para uso local, definimos localhost. Essa variável é usada internamente para gerar URLs (especialmente em webhooks e na interface). Exemplo: em um docker-compose de servidor, poderia ser N8N_HOST=seu-dominio.com.
  • N8N_PORT: Porta em que o serviço n8n roda internamente (dentro do contêiner). O padrão é 5678 e normalmente não é necessário alterar. Mantemos 5678 aqui para consistência. (Essa variável é mais usada se você executasse n8n em uma porta interna diferente; no Compose acima já mapeamos a porta externa 5678 para a interna 5678, então está alinhado.)
  • N8N_PROTOCOL: Protocolo que o n8n usará para gerar URLs de serviço, geralmente http ou https. Em ambiente local sem certificado, usamos http. Se estivesse atrás de um proxy ou com certificado TLS, colocaríamos https. Essa configuração junto com HOST e PORT influencia, por exemplo, os links gerados para webhooks ou para acessar a própria UI.
  • WEBHOOK_URL: URL completa base para os webhooks do n8n. Essa variável é importante se você utilizar nós do tipo Webhook. Deve apontar para o endereço pelo qual os serviços externos conseguem alcançar seu n8n. Localmente, podemos deixar http://localhost:5678/ (note a barra no final). Em produção com domínio seria algo como https://seu-dominio.com/. Basicamente, o n8n concatena caminhos de webhook nessa URL. Se você não definir corretamente, pode haver erros ao ativar webhooks. Em nosso uso local, localhost funciona para testes internos (ou uso com ferramentas de tunelamento, se necessário).
  • GENERIC_TIMEZONE: Define o fuso horário que o n8n utilizará para agendamentos. É importante configurar para o seu fuso (no exemplo, usamos America/Sao_Paulo). Vários nós de agendamento (como o Cron ou Schedule Trigger) usam esse fuso para determinar os horários de execução. Aqui usamos o formato de região/Cidade (padrão TZ database). Essa variável configura internamente o timezone da aplicação n8n. (Opcionalmente, também poderíamos definir TZ com o mesmo valor para ajustar o fuso horário do sistema no contêiner, mas apenas GENERIC_TIMEZONE já alinha os agendamentos do n8n)
  • N8N_ENCRYPTION_KEY: Chave de criptografia utilizada pelo n8n para criptografar credenciais sensíveis (como tokens de API, senhas) no banco de dados. É crucial definir essa chave manualmente e mantê-la constante. Caso contrário, o n8n geraria uma chave aleatória na primeira execução; se o contêiner for recriado sem persistir a chave, as credenciais salvas anteriormente não poderão ser descriptografadas. Coloque aqui um valor secreto (uma string aleatória longa, idealmente >32 caracteres). Essa chave será armazenada no volume (dentro do arquivo de configuração do n8n) junto com o banco de dados, mas definindo via variável de ambiente garantimos consistência em reinstalações. Não compartilhe essa chave – ela protege seus dados sensíveis.
  • N8N_BASIC_AUTH_* (opcionais): Por padrão, o n8n (até a versão atual) não exige autenticação para acessar a interface web, a menos que você ative o recurso de gerenciamento de usuários ou configure uma autenticação básica. Para uso local, pode não haver problema em rodar sem login, mas NÃO é recomendável expor o serviço sem proteção. Uma maneira simples de adicionar segurança é habilitar autenticação HTTP Basic integradamente:
    • N8N_BASIC_AUTH_ACTIVE=true – ativa o Basic Auth embutido no n8n.
    • N8N_BASIC_AUTH_USER e N8N_BASIC_AUTH_PASSWORD – definem o usuário e senha que serão solicitados. Por exemplo, admin / uma_senha_bem_segura.
      Com isso ativo, ao acessar o n8n via navegador será requisitado esse usuário/senha HTTP antes de carregar a interface. (OBS: Alternativamente, o n8n possui um sistema de gerenciamento de usuários próprio que pode ser configurado na primeira vez que roda; veremos adiante.)
  • N8N_SECURE_COOKIE: Definimos como false no ambiente local sem HTTPS. Essa variável indica se os cookies de sessão do n8n devem ser marcados como “Secure” (só transmitidos via HTTPS). Em um ambiente HTTP (sem TLS), é necessário que seja false, caso contrário o navegador pode não armazenar cookies de sessão, causando problemas no uso da interface. Em produção com HTTPS verdadeiro, deve-se usar true para maior segurança.

Os valores acima, conforme configurados, refletem um ambiente local (HOST localhost, protocolo HTTP, etc.). Em produção, você ajustaria para refletir seu domínio/IP e usaria HTTPS com certificados válidos, além de possivelmente usar um proxy reverso. Por exemplo, a documentação oficial mostra um Compose usando domínio customizado e integração com proxy Traefik, onde N8N_HOST e WEBHOOK_URL são ajustados para incluir o domínio e protocolo HTTPS.

Iniciando o n8n localmente com Docker Compose

Após salvar o arquivo docker-compose.yaml, abra um terminal na pasta onde ele se encontra e execute o comando abaixo para subir o serviço:

bashCopiarEditardocker compose up -d

Esse comando irá baixar a imagem do n8n (caso ainda não tenha sido baixada) e inicializar o contêiner em segundo plano (-d = detached mode). Você poderá ver nos logs do Docker que o n8n está sendo iniciado. Para acompanhar os logs em tempo real, use docker compose logs -f após o up.

A documentação oficial do n8n sugere esse procedimento ao usar Composedocs.n8n.io. Depois de alguns instantes (a primeira inicialização pode levar alguns segundos enquanto o n8n prepara o ambiente e o banco SQLite), o serviço estará de pé.

Acessando a interface web do n8n

Com o contêiner em execução, abra seu navegador e acesse http://localhost:5678. Você deverá ver a interface web do n8n carregando.

https://community.n8n.io/t/docker-install-of-n8n-requires-login-what-is-it/23786Exemplo: Tela de configuração inicial do n8n. Assim que carregar pela primeira vez, o n8n exibirá uma página de configuração de conta inicial (titulada “Set up owner account”), oferecendo a opção de criar um usuário administrador (com email e senha) ou pular essa etapa. Como este é um ambiente local de teste, você pode clicar em “Skip setup for now” (Pular configuração por enquanto) caso não queira criar uma conta agora. Ao pular, nenhuma autenticação será exigida para usar o n8n naquele momento – a interface abrirá diretamente. (Se preferir, você também pode preencher os dados e criar uma conta; assim, nas próximas visitas será exigido login com essas credenciais.)

Dica: Se você planeja usar o n8n recorrentemente em um ambiente multiusuário ou em produção, é recomendável configurar um usuário administrador nessa etapa ou habilitar a autenticação básica conforme mencionado anteriormente, em vez de deixar acesso irrestrito.

Após passar pela tela inicial (seja criando uma conta ou pulando), você será levado à tela principal (Dashboard) do n8n. Nela, é possível ver um menu lateral com seções como Workflows, Credentials, Executions, e no painel central um overview convidando a criar seu primeiro fluxo de trabalho. A imagem abaixo ilustra a interface inicial do n8n após a instalação:

https://hostkey.com/documentation/marketplace/business_apps/n8n/Interface web do n8n após inicialização. Na seção “Overview” do n8n, você tem uma visão geral de todos os workflows, credenciais e execuções acessíveis, e opções para criar um novo fluxo do zero (Start from scratch) ou testar um exemplo pronto. A partir daqui, você já pode construir automações arrastando nós (nodes) e conectando-os conforme sua necessidade.

Garantindo a Persistência de Dados com Volumes

Um ponto fundamental ao usar Docker é assegurar que os dados importantes do n8n não sejam perdidos quando o contêiner for recriado ou atualizado. No nosso docker-compose.yml, isso foi tratado através do volume n8n_data mapeado para /home/node/.n8n no contêiner.

Esse diretório contém pelo menos dois itens vitais do n8n:

  • O banco de dados SQLite (database.sqlite) com todos os workflows, credenciais, execuções agendadas, etc.
  • O arquivo de configurações, que inclui a chave de criptografia (config contendo, entre outras coisas, a encryptionKey gerada caso você não defina N8N_ENCRYPTION_KEY externamente).

Em outras palavras, é nesse volume que vive todo o estado da sua instância n8n (a não ser que você configure um banco de dados externo). Conforme mencionado na documentação, o volume n8n_data garante que o arquivo de banco de dados e a chave de criptografia sejam salvos de forma persistente. Assim, ao parar/iniciar contêineres ou até atualizar a imagem do n8n, suas automações e credenciais continuarão lá.

Verificando a persistência: você pode inspecionar o conteúdo do volume. Como usamos um volume nomeado, o Docker gerencia ele internamente. Se preferir ter acesso direto no sistema de arquivos do host, poderia em vez disso usar um bind mount apontando para uma pasta local (por exemplo: - "./dados-n8n:/home/node/.n8n" no Compose, o que criaria/usar uma pasta chamada dados-n8n dentro do diretório do compose para armazenar os dados). Seja volume nomeado ou pasta montada, o importante é que não esteja vazio – após rodar o n8n pela primeira vez, veja que há um arquivo database.sqlite e possivelmente config nesse volume.

Importante: Nunca execute o n8n em produção sem volume persistente, caso contrário você perderá tudo ao atualizar ou remover o contêiner. Se por engano iniciar sem o volume e depois adicioná-lo, pode ser necessário copiar os dados anteriores para dentro do volume – planeje a persistência antes de rodar.

Considerações de Segurança e Boas Práticas (Localmente)

Mesmo em uso local, é bom adotar algumas boas práticas de segurança – especialmente se eventualmente você for expor o n8n para outras máquinas ou pela internet:

  • Não exponha sem autenticação: O n8n, por padrão, pode rodar sem exigir login (a não ser que você configure a conta inicial ou basic auth). Se precisar acessá-lo remotamente (por exemplo, de outro PC ou celular na mesma rede, ou via internet), habilite a autenticação básica conforme mostrado (variáveis N8N_BASIC_AUTH_*) ou crie um usuário admin na tela inicial. Isso previne acesso não-autorizado aos seus fluxos. Lembre-se que fluxos podem conter credenciais sensíveis – proteger a interface é essencial.
  • Restringir binding de porta: Por padrão colocamos ports: - "5678:5678", o que deixa o serviço acessível em qualquer interface de rede do seu PC. Se for usar estritamente no próprio computador, você pode restringir à interface de loopback alterando para "127.0.0.1:5678:5678". Assim, o n8n só aceitará conexões locais, evitando acesso pela rede externa.
  • HTTPS quando exposto: Para uso local em localhost não há certificado TLS, mas nunca exponha a porta 5678 na internet sem proteção SSL. Se precisar acesso externo, considere colocar um proxy reverso (como Nginx ou Traefik) gerenciando um certificado HTTPS e encaminhando ao n8n. A própria documentação oficial exemplifica o uso do Traefik para obter certificados LetsEncrypt e habilitar TLS para o n8n.
  • Desabilitar funcionalidades não usadas: O n8n possui várias configurações. Em ambiente local simples, geralmente não há necessidade de ajustar muito mais. Porém, se você não for usar a parte de convites de usuários (User Management) e quiser forçar que sempre só o basic auth seja usado, pode definir N8N_USER_MANAGEMENT_DISABLED=true. Isso pula totalmente aquelas telas de criação de usuário, focando apenas no basic auth. (Novamente, essa é uma escolha; a tendência é usar o sistema nativo de usuários do n8n em produções mais recentes.)
  • Atualizações: Mantenha o n8n atualizado para receber patches de segurança e novos nodes. Com Docker, isso significa obter uma versão mais recente da imagem (docker compose pull e recriar o contêiner). Antes de atualizar, faça backup do volume (banco de dados e chave)! Basta copiar a pasta do volume ou usar docker cp do contêiner. Em upgrades grandes, leia as notas de versão do n8n para ver se há migrações especiais.
  • Chave de criptografia: Já mencionado, mas reiterando: guarde a N8N_ENCRYPTION_KEY em local seguro. Se você perdê-la e não tiver backup do banco antes de mudar a chave, não conseguirá recuperar as credenciais criptografadas. Para backups, você pode ou salvar o banco SQLite e a chave juntos, ou exportar os workflows e reconectar credenciais manualmente se necessário.

Seguindo essas práticas, o uso local do n8n deve ser tranquilo e seguro. Em ambiente de desenvolvimento isolado na sua máquina, você tem mais liberdade; mas à medida que o uso cresce (por exemplo, expondo para um pequeno time na rede local), essas precauções ajudam a evitar problemas.

Com o n8n rodando localmente, você já pode começar a criar e testar workflows de automação de forma rápida. Essa abordagem em contêiner facilita tanto o desenvolvimento quanto a migração para um servidor, caso você queira evoluir para um ambiente de produção no futuro – bastando ajustar as variáveis e infraestrutura conforme necessário. Aproveite o poder de automação do n8n para integrar suas ferramentas e agilizar tarefas do dia a dia!

Deixe um comentário