n8n e Activepieces: Automação Self-Hosted para PME

O cenário típico: a equipa quer automatizar fluxos entre apps (formulário → folha de cálculo → email → Teams), mas o Power Automate cobra por utilizador e a subscrição de uma equipa de 15 pessoas passa dos 140 €/mês. As alternativas self-hosted — n8n e Activepieces — instalam-se em Docker num servidor que a PME já tem, com custo de infraestrutura marginal e sem licença por utilizador. Este artigo cobre a instalação de ambos por Docker, os conceitos base de workflows, a integração com Microsoft 365 e o critério de escolha entre os dois.

Neste artigo

Quando uma Plataforma de Automação Faz Sentido

Uma plataforma de automação liga serviços entre si sem código: um evento (novo email, formulário submetido, linha adicionada) despoleta um fluxo que chama APIs de vários sistemas. As três hipóteses mais comuns numa PME:

  • Power Automate (Microsoft 365) — integração perfeita com o tenant, mas licenciado por utilizador. Faz sentido se a equipa já tem licenças que o incluem (M365 E3/E5, Business Premium) e os fluxos são só entre serviços Microsoft.
  • n8n — self-hosted, licença fair-code (fair-code, não open-source clássico). Forte em fluxos complexos, com mais de 400 integrações e possibilidade de código JavaScript dentro do fluxo. A instância self-hosted com edição community é gratuita (n8n docs).
  • Activepieces — open-source (MIT no core), editor mais próximo do Zapier, mais leve que o n8n. Tem um servidor MCP embutido que expõe os fluxos como ferramentas para assistentes de IA (Activepieces docs).

O critério de decisão fica no fim do artigo. A regra curta: fluxos só Microsoft + licenças incluídas → Power Automate. Fluxos com serviços externos, volume alto ou necessidade de código → n8n. Fluxos simples e equipa não técnica → Activepieces.

Passo 1 — Instalar o n8n com Docker

O n8n corre num container único com volume persistente. O comando oficial de instalação (Install with Docker):

docker volume create n8n_data

docker run -it --rm --name n8n \
  -p 5678:5678 \
  -e GENERIC_TIMEZONE="Europe/Lisbon" \
  -e TZ="Europe/Lisbon" \
  -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
  -e N8N_RUNNERS_ENABLED=true \
  -v n8n_data:/home/node/.n8n \
  n8nio/n8n

O comando cria o volume n8n_data (onde ficam workflows, credenciais e a base SQLite) e arranca o container com a UI na porta 5678. As variáveis GENERIC_TIMEZONE e TZ definem o fuso — a primeira controla os triggers agendados (Schedule Trigger), a segunda o fuso do sistema dentro do container. N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true protege o ficheiro de configuração e N8N_RUNNERS_ENABLED=true activa os task runners, forma recomendada de executar código no n8n.

Acesso inicial: http://IP-do-servidor:5678 — o primeiro arranque pede criação da conta owner local (armazenada no volume, sem LDAP por defeito). Para produção na rede da PME, publica atrás de um reverse proxy com HTTPS (Caddy ou Nginx Proxy Manager) e restringe a porta 5678 à rede interna.

Dois pontos críticos de produção:

  • N8N_ENCRYPTION_KEY — a chave que cifra as credenciais guardadas. O n8n gera-a no primeiro arranque e guarda-a no ficheiro de config dentro do volume. Se removeres o volume sem guardar esta chave, as credenciais dos workflows ficam irrecuperáveis. Guarda-a em password manager.
  • Base de dados — por defeito usa SQLite dentro do volume. Para uso multi-utilizador intensivo, o n8n suporta PostgreSQL (variáveis de ambiente DB_TYPE=postgresdb e afins, environment variables).

Passo 2 — Primeiro Workflow no n8n

Fluxo exemplo: um formulário de contacto (HTTP endpoint) cria um item numa lista e notifica no Teams.

  1. Cria um workflow novo e adiciona o trigger Webhook. O n8n gera um URL de teste e um de produção.
  2. Adiciona o nó Microsoft Outlook (ou Microsoft Teams) — o n8n pede OAuth2; usas uma App Registration no Entra ID com redirect para a URL do n8n.
  3. Adiciona um nó IF ou Set para transformar o payload (ex.: normalizar o email do contacto).
  4. Activa o workflow (toggle Active). O URL de produção fica a receber POSTs.

Os nós Microsoft usam OAuth2 com a API Graph — a configuração da App Registration (permissões Mail.ReadWrite, TeamMember.ReadWrite.All conforme o nó) é o passo mais demorado. Os nós disponíveis incluem Outlook, Excel, OneDrive, Teams e SharePoint (n8n Microsoft nodes).

O n8n também expõe um servidor MCP que permite a um assistente IA (Claude, Copilot Studio via API) executar workflows como ferramentas — relevante se a PME já usa assistentes IA (Connect to n8n MCP server).

Passo 3 — Instalar o Activepieces

O Activepieces instala-se com um script que prepara Docker Compose com PostgreSQL e Redis (Install overview):

curl -fsSL https://get.activepieces.com | sh

O script pergunta o directório de instalação e a porta. Gera o docker-compose.yml (app + PostgreSQL + Redis + worker) e arranca tudo. O acesso fica na porta escolhida (por defeito 8080). A edição Community é gratuita; funcionalidades enterprise (SSO, ambientes multi-projecto avançados) requerem licença (license).

Para produção com mais de dois ou três utilizadores, o doc de produção recomenda variáveis de execução em workers separados e storage S3-compatible (AP_EXECUTION_MODE, AP_FILE_STORAGE_LOCATION, production setup). Para uma PME com volume normal, o compose gerado pelo script chega.

O diferencial do Activepieces face ao n8n: o menu MCP incorporado expõe os fluxos como ferramentas MCP que assistentes IA podem chamar — o fluxo “criar factura no ERP” torna-se uma ferramenta que o Copilot/Claude pode invocar (MCP tools).

Passo 4 — Integração com Microsoft 365

Ambos precisam de uma App Registration no Entra ID para falar com o Microsoft 365:

  1. Entra admin center > App registrations > New registration.
  2. Redirect URI: a URL de OAuth do n8n/Activepieces (ex.: https://automatiza.pme.local/rest/oauth2-credential/callback no Activepieces; a URL que o n8n mostra no diálogo de OAuth no Outlook node).
  3. API permissions: Mail.ReadWrite, Mail.Send, Files.ReadWrite.All (conforme os nós que vais usar), com grant de admin.
  4. Client secret gerado e colado na credencial da plataforma.

O fluxo OAuth é o mesmo nos dois — a diferença está no URL de callback que cada plataforma mostra. Regra prática: uma App Registration por plataforma, com scope mínimo para os nós que vais usar.

n8n vs Activepieces vs Power Automate — Critério de Escolha

Critério Power Automate n8n Activepieces
Custo típico PME (10 utilizadores) Incluído em E3/E5 ou ~120-150 €/mês (per-user) Servidor Docker + tempo de gestão Servidor Docker + tempo
Modelo SaaS (tenant Microsoft) Fair-code, self-hosted ou cloud Open-source core, self-hosted ou cloud
Complexidade de fluxos Média-alta (expressões, loops) Alta (código JS, sub-workflows, AI nodes) Média (editor simplificado)
Integrações Microsoft Nativa e completa Completas via OAuth (Outlook, Excel, Teams, OneDrive) Núcleo coberto (Outlook, Teams, Excel)
MCP para assistentes IA Via Copilot Studio (licenciado) Servidor MCP nativo Servidor MCP embutido na UI
Manutenção Zero (Microsoft) Backups do volume + updates de imagem Backups do compose + updates
Privacidade de dados Dados passam pelo tenant Microsoft Dados ficam no servidor da PME Dados ficam no servidor da PME

Três critérios que decidem na prática:

  1. Onde estão os dados a serem processados. Fluxos que movem dados de clientes por serviços SaaS externos têm implicações de privacidade (e RGPD). O self-hosted mantém tudo dentro.
  2. Quem mantém. Power Automate é zero-manutenção. Self-hosted precisa de quem aplique updates e backups — se ninguém na PME toca a Docker, o custo real do self-hosted é maior do que parece.
  3. Complexidade real dos fluxos. Fluxos com branches, retries e transformação de dados → n8n. Fluxos de 2-3 passos tipo notificação → Activepieces chega e é mais rápido de configurar.

Erros Comuns

Problema Causa provável Solução
Workflows e credenciais desaparecem após recreate do container Volume n8n_data não mapeado ou N8N_ENCRYPTION_KEY perdida Recrear com o mesmo volume e a mesma encryption key
OAuth do Microsoft 365 falha com redirect_uri mismatch Redirect URI na App Registration não coincide Copiar o URL exacto mostrado pelo nó OAuth e registá-lo no Entra
Webhook externo não chega ao n8n Porta 5678 sem publicação ou reverse proxy sem HTTPS Publicar via reverse proxy com HTTPS; webhooks exigem HTTPS em alguns serviços
Activepieces lento com muitos fluxos paralelos Execution mode em modo único container Passar para workers separados com AP_EXECUTION_MODE (production setup)
Timezone dos triggers errado Só TZ definida, GENERIC_TIMEZONE em falta Definir as duas no container (a GENERIC_TIMEZONE governa o Schedule Trigger)

Checklist Rápido de Verificação

  • Volume persistente + N8N_ENCRYPTION_KEY guardados em password manager.
  • Porta da UI acessível só da rede interna (ou atrás de proxy com auth).
  • App Registration no Entra ID com permissões mínimas por nó usado.
  • Backup do volume do n8n (n8n_data) e do directório do Activepieces no plano de backup da PME.
  • Updates aplicados mensalmente (n8n e Activepieces têm releases frequentes).
  • Fluxos críticos com tratamento de erro (nó Error Trigger no n8n, notificação em falha).

Artigos Relacionados