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
- Passo 1 — Instalar o n8n com Docker
- Passo 2 — Primeiro Workflow no n8n
- Passo 3 — Instalar o Activepieces
- Passo 4 — Integração com Microsoft 365
- n8n vs Activepieces vs Power Automate — Critério de Escolha
- Erros Comuns
- Checklist Rápido de Verificação
- Artigos Relacionados
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=postgresdbe 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.
- Cria um workflow novo e adiciona o trigger Webhook. O n8n gera um URL de teste e um de produção.
- 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.
- Adiciona um nó IF ou Set para transformar o payload (ex.: normalizar o email do contacto).
- 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:
- Entra admin center > App registrations > New registration.
- Redirect URI: a URL de OAuth do n8n/Activepieces (ex.:
https://automatiza.pme.local/rest/oauth2-credential/callbackno Activepieces; a URL que o n8n mostra no diálogo de OAuth no Outlook node). - API permissions:
Mail.ReadWrite,Mail.Send,Files.ReadWrite.All(conforme os nós que vais usar), com grant de admin. - 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:
- 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.
- 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.
- 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
- Coolify: PaaS Self-Hosted — Alternativa ao Heroku/Vercel para PME — plataforma self-hosted que também corre n8n e Activepieces como apps.
- 1Panel: Painel Web Open-Source para Gerir Servidores Linux — gestão de servidores Docker onde os dois se instalam.
- Mailcow: Servidor de Email Self-Hosted com Docker para PME — o email self-hosted com que os fluxos de notificação integram.
- PowerShell 7 para Sysadmins: 15 Scripts de Automação para PME — automação por script quando o fluxo não justifica plataforma.
- k0s: Kubernetes Binário Único para PME — se a frota self-hosted crescer e precisar de orquestração.