Skip to main content
n8n

Instale n8n no Mac com Docker Desktop: guia passo a passo

Install n8n on Mac with Docker: Postgres over SQLite, a persisted encryption key, working webhooks, backups — plus the five upgrades that make it stick.

14 min
Tempo de leitura
2,710
Palavras
Publicado
Última revisão
Engr Mejba Ahmed

Escrito por

Engr Mejba Ahmed

Compartilhar Artigo

Instale n8n no Mac com Docker Desktop: guia passo a passo

Introdução

A automação não deve ser difícil – ou arriscada. Se você já tentou unir ferramentas com scripts personalizados ou zaps SaaS pagos, você conhece o problema: lógica frágil, dependência de fornecedor e custos crescentes. n8n corrige isso. É uma plataforma de automação auto-hospedada e de código aberto que conecta seus aplicativos e APIs com um construtor visual limpo, ao mesmo tempo que oferece controle total.

Neste guia, você aprenderá como instalar o n8n no macOS com Docker Desktop da maneira certa: armazenamento persistente, PostgreSQL (não SQLite), credenciais criptografadas, webhooks seguros e rotinas limpas de atualização/backup. Manteremos as coisas rápidas e fáceis de usar para iniciantes, sem pular os detalhes de nível de produção. No final, você terá um hub de automação local confiável que poderá usar para trabalho real – testar webhooks, criar fluxos de captura de leads ou orquestrar pipelines de IA – e depois promover para um servidor com confiança.


O que você construirá

  • Uma instância local n8n em execução em contêineres Docker
  • Banco de dados PostgreSQL para armazenamento durável
  • Uma pasta de projeto organizada com volumes para backups e exportações compatíveis com Git
  • Um webhook funcional e uma automação simples que você pode reutilizar em qualquer lugar
  • Extras opcionais (trabalhadores de fila Redis, HTTPS, túnel para webhooks públicos)

Para quem se destina este guia

  • Desenvolvedores que desejam um ambiente local seguro para criar e testar automações
  • Criadores e profissionais de marketing que precisam de fluxos de trabalho no estilo Zapier sem a fatura mensal
  • Equipes que planejam auto-hospedar n8n mais tarde, mas desejam começar em um Mac hoje

Pré-requisitos

  • macOS (Apple Silicon ou Intel)
  • Docker Desktop instalado e funcionando
  • Conforto básico do terminal
  • (Opcional) Homebrew para instalar extras como ngrok ou Cloudflare Tunnel

O panorama geral (por que Docker + Postgres)

Por que Docker? Consistência. Você obtém o mesmo ambiente localmente e em produção – sem drama de “funciona na minha máquina”. Por que PostgreSQL? Ele é robusto e preferido para produção. SQLite é adequado para testes rápidos, mas o Postgres mantém seus fluxos de trabalho, logs de execução e credenciais sólidos e recuperáveis. Por que local primeiro? Você pode iterar com segurança. Assim que seu fluxo de trabalho estiver estável, você poderá mover a configuração exata para um VPS quase sem alterações.


Etapa 1: Crie um projeto limpo

Abra o Terminal e crie uma pasta dedicada:

mkdir -p ~/n8n-stack/{n8n_data,db_data}
cd ~/n8n-stack
  • n8n_data armazena configuração, credenciais e exportações n8n
  • db_data armazena seus arquivos de banco de dados PostgreSQL
  • Mantê-los lado a lado simplifica os backups (basta copiar a pasta)

Etapa 2: Adicionar variáveis de ambiente

Crie um arquivo .env em ~/n8n-stack. Esses valores configuram seus contêineres e mantêm os segredos fora do controle de versão.

# ---- núcleo n8n ----
N8N_HOST=localhost
N8N_PORT=5678
N8N_PROTOCOL=http
NODE_ENV=produção

# Use uma string longa e aleatória (armazene em seu gerenciador de senhas)
N8N_ENCRYPTION_KEY=CHANGE_ME_TO_A_LONG_RANDOM_64_CHAR_STRING

# Configurações de privacidade e UX
N8N_USER_MANAGEMENT_DISABLED=falso
N8N_DIAGNOSTICS_ENABLED=falso
N8N_PERSONALIZATION_ENABLED=falso

# Limpeza de execução (mantém o banco de dados reduzido)
EXECUTIONS_DATA_PRUNE=verdadeiro
EXECUTIONS_DATA_MAX_AGE=336 # horas (14 dias)
EXECUTIONS_DATA_PRUNE_MAX_COUNT=10000

# ---- banco de dados ----
DB_TYPE=postgredb
DB_POSTGRESDB_HOST=db
DB_POSTGRESDB_PORT=5432
DB_POSTGRESDB_DATABASE=n8n
DB_POSTGRESDB_USER=n8n_user
DB_POSTGRESDB_PASSWORD=CHANGE_THIS_STRONG_PASSWORD

# ---- modo de fila (opcional) ----
N8N_EXECUTIONS_MODE=normal
QUEUE_BULL_REDIS_HOST=redis
QUEUE_BULL_REDIS_PORT=6379

Dica profissional: Gere uma chave segura diretamente no Terminal:

python3 - <<'PY'
importar segredos, string
alfabeto = string.ascii_letras + string.dígitos + string.pontuação
print(''.join(secrets.choice(alfabeto) para _ no intervalo(80)))
PA

Cole a saída em N8N_ENCRYPTION_KEY.


Etapa 3: Crie o arquivo Docker Compose

Adicione um docker-compose.yml na mesma pasta:

versão: "3.8"

serviços:
  n8n:
    imagem: n8nio/n8n:mais recente
    reiniciar: a menos que seja parado
    arquivo_env: .env
    portos:
      - "5678:5678"
    ambiente:
      - WEBHOOK_URL=${N8N_PROTOCOL}://${N8N_HOST}:${N8N_PORT}/
    volumes:
      - ./n8n_data:/home/node/.n8n
    depende_de:
      - banco de dados

  banco de dados:
    imagem: postgres:15
    reiniciar: a menos que seja parado
    ambiente:
      -POSTGRES_USER=${DB_POSTGRESDB_USER}
      -POSTGRES_PASSWORD=${DB_POSTGRESDB_PASSWORD}
      -POSTGRES_DB=${DB_POSTGRESDB_DATABASE}
    volumes:
      - ./db_data:/var/lib/postgresql/data
# Opcional: habilite mais tarde para execuções paralelas/enfileiradas
  #redis:
  #imagem: redis:7-alpino
  #reiniciar: a menos que seja interrompido

Por que esse layout funciona:

  • O contêiner n8n persiste tudo que é importante dentro de ./n8n_data
  • Os dados do Postgres residem em ./db_data
  • env_file mantém segredos fora do YAML e fora do Git

Etapa 4: iniciar n8n

De ~/n8n-stack:

docker compor -d
abra http://localhost:5678

Você verá a tela configuração do proprietário. Crie sua conta de administrador com uma senha forte.


Etapa 5: bloqueie suas configurações básicas

Vá em Configurações → Geral e confirme:

  • Fuso horário: defina seu horário local
  • URL do Webhook: http://localhost:5678/ para testes locais
  • Execuções: remoção habilitada (já definida via .env)

Salve as alterações.


Etapa 6: Smoke Test um Webhook (sua primeira automação)

  1. Clique em Criar fluxo de trabalho → Começar do zero

  2. Adicione o nó Webhook

    • Método HTTP: POST
    • Caminho: hello (ou deixe o caminho automático)
  3. Adicione o nó Responder ao Webhook

    • Resposta: JSON

    • Corpo:

      { "ok": verdadeiro, "recebido": "{{$json.body.ping || 'pong'}}" }
      
  4. Conecte Webhook → Responder ao Webhook

  5. Clique em Ouvir evento de teste no nó Webhook

  6. No Terminal:

curl -X POST "http://localhost:5678/webhook-test/<seu-id>" \
  -H "Tipo de conteúdo: aplicativo/json" \
  -d '{"ping":"pong"}'

Você verá a solicitação chegar na saída do nó e receberá uma resposta JSON 200. Clique em Ativar para obter um URL de produção que você pode chamar mesmo quando o editor não estiver ouvindo.


Etapa 7: exponha seu webhook publicamente (opcional, prático)

Quando você quiser testar webhooks de serviços externos (formulários, Stripe, GitHub), use um túnel seguro.

Opção A — ngrok

preparar instalar ngrok/ngrok/ngrok
ngrok http://localhost:5678

Opção B — Cloudflare Tunnel (gratuito, estável)

preparar instalar cloudflare/cloudflare/cloudflared
túnel cloudflared --url http://localhost:5678

Copie o URL HTTPS fornecido. Em n8n Configurações → Geral, defina temporariamente Webhook URL com esse valor para que seus URLs de produção usem HTTPS.


Etapa 8: Construa uma automação simples, mas significativa

Aqui está um começo real e útil: Uptime & Error Watchdog.

  • A cada 5 minutos: execute ping em uma lista de URLs
  • Se algum retornar >= 400, envie um alerta do Slack com a URL e o código de status

Importe o fluxo de trabalho abaixo (n8n → Importar → colar JSON). Em seguida, edite a lista de URLs e o canal do Slack.

{
  "name": "Tempo de atividade e monitoramento de erros",
  "nós": [
    {
      "parâmetros": {
        "triggerTimes": { "item": [ { "mode": "everyX", "unit": "minutos", "valor": 5 } ] }
      },
      "id": "Cron",
      "nome": "Cron (a cada 5m)",
      "tipo": "n8n-nodes-base.cron",
      "typeVersion": 1,
      "posição": [220, 280]
    },
    {
      "parâmetros": {
        "functionCode": "const urls = [\n 'https://www.ramlit.com/',\n 'https://www.colorpark.io/',\n 'https://www.xcybersecurity.io/',\n 'https://www.mejba.me/'\n];\nreturn urls.map(u => ({ url: u }));"
      },
      "id": "Semente",
      "nome": "URLs iniciais",
      "type": "n8n-nodes-base.function",
      "typeVersion": 2,
      "posição": [440, 280]
    },
    {
      "parâmetros": {
        "url": "={{$json.url}}",
        "responseFormat": "string",
        "opções": { "ignoreResponseCode": verdadeiro, "tempo limite": 10000 }
      },
      "id": "HTTP",
      "nome": "Verificação HTTP",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4,
      "posição": [660, 280]
    },
    {
      "parâmetros": {
        "condições": {
          "número": [ { "valor1": "={{$json.statusCode}}", "operação": "maiorEqual", "valor2": 400 } ]
        }
      },
      "id": "SE",
      "nome": "Erro SE (>=400)",
      "tipo": "n8n-nodes-base.if",
      "typeVersion": 1,
      "posição": [880, 280]
    },
    {
      "parâmetros": {
        "canal": "#alertas",
        "text": "Alerta de tempo de atividade: {{$json.url}} retornou HTTP {{$json.statusCode}}"
      },
      "id": "Folga",
      "nome": "Alerta de folga",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 1,
      "posição": [1100, 240],
      "credenciais": { "slackApi": { "id": "replace-in-ui" } }
    }
  ],
  "conexões": {
    "Cron (a cada 5m)": { "main": [ [ { "node": "Seed URLs", "type": "main", "index": 0 } ] ] },
    "URLs iniciais": { "main": [ [ { "node": "Verificação HTTP", "type": "main", "index": 0 } ] ] },
"Verificação HTTP": { "main": [ [ { "node": "IF error (>=400)", "type": "main", "index": 0 } ] ] },
    "Erro IF (>=400)": { "main": [ [ { "node": "Slack Alert", "type": "main", "index": 0 } ], [] ] }
  }
}

Por que isso é valioso: você detectará rapidamente tempos de inatividade ou erros de roteamento, antes que os clientes o façam. Estenda-o registrando falhas no Planilhas Google ou no Notion.


Etapa 9: Credenciais, privacidade e princípios básicos de segurança

Mesmo localmente, trate os segredos com cuidado:

  • Armazene tokens de API em Credenciais (eles são criptografados com seu N8N_ENCRYPTION_KEY).
  • Para webhooks de entrada, adicione um cabeçalho secreto (por exemplo, X-Webhook-Secret) e verifique-o com um nó Function.
  • Mantenha diagnósticos e personalização desativados para privacidade.
  • Use um gerenciador de senhas para armazenar seus segredos .env – não os envie para o Git.

Etapa 10: Backups e exportações de fluxo de trabalho

Seus ativos mais importantes estão em dois lugares:

  • ~/n8n-stack/n8n_data (configuração n8n e armazenamento de credenciais)
  • ~/n8n-stack/db_data (dados Postgres)

Backup manual rápido:

  • Pare os contêineres: docker compose down
  • Copie toda a pasta ~/n8n-stack para uma unidade segura ou S3
  • Comece de novo: docker compose up -d

Exporte fluxos de trabalho para um único arquivo JSON (ótimo para Git):

docker exec -it $(docker ps --filter nome=n8n -q) \
  exportação n8n: fluxo de trabalho --all --output=/home/node/.n8n/exports.json
# O arquivo aparecerá dentro de ./n8n_data

Etapa 11: Atualizando n8n com segurança

  1. Exporte seus fluxos de trabalho (exports.json)
  2. Faça uma cópia rápida das pastas n8n_data e db_data
  3. Extraia a imagem mais recente e recrie:
docker compor puxar
docker compor -d

Se algo parecer errado, você pode reverter trocando suas pastas de backup novamente.


Etapa 12: Aumento de desempenho opcional (Workers + Redis)

Quando os fluxos de trabalho ficarem pesados (chamadas de IA, uploads de arquivos, APIs lentas), mude para o modo de fila e gere trabalhadores.

  • Remova o comentário do serviço redis em docker-compose.yml

  • Definido em .env:

    N8N_EXECUTIONS_MODE=fila
    
  • Iniciar serviços e um trabalhador:

docker compor -d
docker compor execute --no-deps --name n8n-worker-1 \
  -e N8N_EXECUTIONS_MODE=fila \
  -e QUEUE_BULL_REDIS_HOST = redis\
  n8n n8n trabalhador

Você pode executar vários trabalhadores para execução paralela.


Etapa 13: Do Mac à produção (quando estiver pronto)

A beleza do Docker é que a promoção é simples. Em um VPS (ou em Kubernetes):

  • Reutilize as mesmas imagens e variáveis de ambiente
  • Coloque n8n atrás de Caddy/Nginx com HTTPS (Let’s Encrypt)
  • Adicione o Cloudflare Access ou seu SSO para obter uma UI de administração segura
  • Agende backups regulares do banco de dados Postgres e n8n_data

Seus aprendizados locais acompanham você, sem necessidade de reconstrução.


Armadilhas comuns (e soluções rápidas)

“Porta já em uso.” Altere N8N_PORT em .env e o mapeamento de ports em docker-compose.yml e, em seguida, docker compose up -d.

“Permissão negada” em volumes. Corrija propriedade/permissões:

chmod -R 775 ~/n8n-stack/n8n_data ~/n8n-stack/db_data

Erros de URL de teste do Webhook.

  • Use o URL de teste somente enquanto “Ouvir evento de teste” estiver ativo.
  • Após clicar em Ativar, use o URL de produção.

Grande crescimento do banco de dados.

  • Continue podando (já configurado).
  • Evite salvar grandes dados binários em nós; use S3/Drive sempre que possível.

Comparações: Por que n8n vs. Zapier/Make?

  • Controle de custos: o n8n é de código aberto e auto-hospedável — escalonável sem penalidades por zap.
  • Flexibilidade: lógica em nível de código por meio de nós de função; crie nós personalizados, se necessário.
  • Controle de dados: execute em seu hardware; alinhar-se com a conformidade ou com as demandas do cliente.
  • Portabilidade: A configuração Dockerizada reflete a produção – altere os ambientes facilmente.

Casos de uso do mundo real que você pode criar a seguir

  • Ingestão de leads: Webhook → Normalizar → Notificação do Slack → Anexo do Planilhas Google
  • Daily AI Digest: Cron → API de pesquisa → Resumo OpenAI → Postar no Notion
  • Roteamento de incidentes: GitHub/CI Webhook → Analisar logs → Alerta Slack/PagerDuty
  • Operações financeiras: Importação de CSV → limpar dados → armazenar no Postgres → relatório por e-mail
  • Operações de vendas: Evento Stripe → enriquecer com CRM → notificar e marcar no Slack

Cada um deles pode ser iniciado no seu Mac e produzido posteriormente com filas e HTTPS.


Marcadores / Conclusões rápidas

  • Docker + Postgres oferece um n8n estável e semelhante a produção no macOS.
  • Criptografe credenciais com N8N_ENCRYPTION_KEY e evite cometer segredos.
  • Use URLs de teste enquanto ouve; URLs de produção após ativação.
  • Faça backup de n8n_data e db_data ou exporte fluxos de trabalho regularmente.
  • Adicione Redis + trabalhadores quando os fluxos ficarem mais pesados; você ganhará paralelismo.
  • Túneis (ngrok/Cloudflare) tornam os testes de webhook externos simples e seguros.
  • A promoção para um VPS consiste principalmente em copiar e colar: mesmo arquivo do Compose, perímetro mais forte.

Chamada para ação

Se você leva automação a sério, não pare no “olá, mundo”. Escolha um processo – entrada de leads, alertas de tempo de atividade ou um relatório diário de IA – e envie-o hoje mesmo. Quer um fluxo de trabalho inicial personalizado (Slack + Sheets ou resumo de IA → Notion)? Diga-me suas ferramentas de destino e fornecerei um JSON pronto para importação que você pode executar imediatamente.


🤝 Contrate/Trabalhe comigo:


Perguntas frequentes

1) Posso usar SQLite em vez de Postgres? Você pode, mas não é ideal para nada além de experimentos rápidos. Postgres é mais confiável, mais fácil de fazer backup e recomendado para trabalhos reais.

2) Preciso de HTTPS no meu Mac? Para o desenvolvimento local, não. Se você expor webhooks publicamente, use um túnel (ngrok/Cloudflare). Para produção, coloque n8n atrás de um proxy reverso com HTTPS.

3) Como mantenho meus fluxos de trabalho seguros durante atualizações? Exporte fluxos de trabalho para JSON, faça backup de n8n_data e db_data e, em seguida, atualize. Se algo quebrar, reverta as pastas.

4) Por que meu URL de teste não funciona depois de um minuto? URLs de teste funcionam apenas enquanto o editor escuta eventos. Clique em “Ouvir evento de teste” novamente ou use o URL de produção após a ativação.

5) Posso executar vários fluxos de trabalho em paralelo no meu Mac? Sim. Mude para o modo de fila com Redis e inicie um ou mais trabalhadores.

6) Como me conecto ao Slack, ao Planilhas Google ou ao Notion? Crie credenciais em Credenciais (OAuth ou token) e selecione-as no arquivo node. n8n os armazena criptografados usando seu N8N_ENCRYPTION_KEY.

7) O n8n é adequado para empresas? Sim, quando auto-hospedado adequadamente com SSO/OIDC, HTTPS, backups e acesso baseado em função. A configuração do seu Mac reflete a arquitetura que você usará na produção.

8) E quanto aos fluxos de trabalho de IA? n8n integra-se com OpenAI e outros provedores. Adicione nós de função para prompts personalizados ou APIs de cadeia (pesquisar → resumir → publicar) com novas tentativas e tempos limite.


Pronto. Você instalou o n8n no seu Mac com Docker Desktop, verificou webhooks e aprendeu uma maneira voltada para a produção de criar automações nas quais você pode confiar. Agora coloque-o para funcionar.

Publicidade
Coffee cup

Gostou deste artigo?

Seu apoio me ajuda a criar mais conteúdo técnico aprofundado, ferramentas open-source e recursos gratuitos para a comunidade de desenvolvedores.

Tópicos Relacionados

Engr Mejba Ahmed

Engr Mejba Ahmed

Engr. Mejba Ahmed builds AI-powered applications and secure cloud systems for businesses worldwide. With 8+ years shipping production software in Laravel, Python, and AWS, he's helped companies automate workflows, reduce infrastructure costs, and scale without security headaches. He writes about practical AI integration, cloud architecture, and developer productivity.

Artigos Relacionados

Ver Todos

Comments

Leave a Comment

Comments are moderated before appearing.

Learning Resources

Expand Your Knowledge

Accelerate your growth with structured courses, verified certificates, interactive flashcards, and production-ready AI agent skills.

Sample Certificate of Completion

Sample certificate — complete any course to earn yours

Engr Mejba Ahmed

Engr Mejba Ahmed

AI assistant · trained on my work

👋

Hey there!

Quick Actions

WhatsApp Direct line to me

Chat on WhatsApp

+880 1723 741224 · Replies within the hour on working days

Popular Questions

Engr Mejba Ahmed is connected
Engr Mejba Ahmed is typing...
Engr Mejba Ahmed avatar

✉ Want me to follow up? Drop your email

Engr Mejba Ahmed avatar

📞 Connect Directly

Choose how you'd like to reach me

WhatsApp

+880 1723 741224

Email

mejba.13@gmail.com

✓ Details sent! I'll get back to you shortly.

Powered by OpenAI

335+

Blog Posts

25

AI Courses

63

Projects

Services & Expertise

Pricing & Process

Learning & Resources

Connect & Support