Serviços de automação hospedados cobram por tarefa, e o taxímetro roda até com coisas que nem são trabalho. Um fluxo que verifica um feed a cada cinco minutos dá 8.640 execuções por mês antes de ter feito qualquer coisa útil. Rode o mesmo fluxo no seu servidor e a conta passa a ser o servidor.
O Activepieces é um construtor de automações open source: gatilhos, passos, ramificações, algumas centenas de integrações prontas e passos de código quando as prontas não dão conta. A edição community tem licença MIT e roda bem num servidor pequeno com Docker Compose.
Qual plano
Instalamos num servidor de teste e medimos. O arquivo compose padrão sobe o app e cinco workers: cerca de 2,6–3 GB de RAM junto com Postgres e Redis. Com um worker só, cai para perto de 1,6 GB.
| O que você roda | Plano |
|---|---|
| Alguns fluxos pessoais, um worker | Micro-IP: 2 vCPU, 2 GB, 25 GB ($10/mês), com swap |
| A configuração padrão: cinco workers, fluxos da equipe, webhooks | Small-IP: 4 vCPU, 4 GB, 35 GB ($16/mês) |
| Muitas execuções ao mesmo tempo, passos de código pesados | Medium-IP: 6 vCPU, 6 GB, 45 GB ($20/mês) |
Escolha um plano com IPv4 próprio. Webhooks são o principal motivo para hospedar isso você mesmo, e os serviços que os chamam precisam alcançar as portas 80 e 443; nos planos NAT só a porta SSH é acessível de fora. As localizações são Alemanha e Finlândia; a disponibilidade aparece na hora do pedido. Dá para pagar em cripto, sem KYC.
Instalação
Primeiro aponte um domínio, por exemplo flows.example.com, para o servidor. Depois, como root no Ubuntu 24.04 ou Debian 12:
curl -fsSL https://get.docker.com | sh
git clone --depth 1 https://github.com/activepieces/activepieces.git
cd activepieces
sh tools/deploy.sh
O deploy.sh copia .env.example para .env e preenche segredos aleatórios. Antes da primeira inicialização, mude duas linhas no .env e uma no arquivo compose:
sed -i 's|^AP_FRONTEND_URL=.*|AP_FRONTEND_URL=https://flows.example.com|; s|^AP_TELEMETRY_ENABLED=.*|AP_TELEMETRY_ENABLED=false|' .env
sed -i "s|- '8080:80'|- '127.0.0.1:8080:80'|" docker-compose.yml
A que importa é a primeira linha. AP_FRONTEND_URL não serve só para os links da interface: os workers se conectam ao app por ela. Deixe em http://localhost:8080 e cada contêiner worker procura o app dentro de si mesmo, não encontra, e seus fluxos nunca são publicados. Foi exatamente o que aconteceu com a gente: «Socket.IO connection error» nos logs do worker, uma publicação travada e webhooks respondendo 404. Com o domínio real, o mesmo fluxo publicou e o webhook rodou.
O sed no docker-compose.yml mantém a porta 8080 no localhost. Portas publicadas pelo Docker passam por cima do ufw; sem isso, o app ficaria aberto numa porta crua ao lado do seu HTTPS.
No Micro-IP, reduza também para um worker:
sed -i 's/replicas: 5/replicas: 1/' docker-compose.yml
Agora o HTTPS e a inicialização:
apt install -y caddy
cat > /etc/caddy/Caddyfile <<'EOF'
flows.example.com {
reverse_proxy 127.0.0.1:8080
}
EOF
systemctl reload caddy
ufw allow 22/tcp && ufw allow 80/tcp && ufw allow 443/tcp && ufw enable
docker compose -p activepieces up -d
Espere meio minuto, abra https://flows.example.com e crie sua conta na hora. Quem se cadastra primeiro é dono da plataforma; depois disso, o cadastro é só por convite.
Confira se os webhooks funcionam
Crie um fluxo com o gatilho Webhook (Catch Webhook), adicione qualquer passo e publique. O painel do gatilho mostra a URL. Dispare um evento de teste nela:
curl -X POST https://flows.example.com/api/v1/webhooks/YOUR_FLOW_ID \
-H 'content-type: application/json' \
-d '{"event":"payment.paid","amount":16}'
Você deve receber um 200, e a execução aparece em Runs como bem-sucedida. Se vier 404, volte e confira AP_FRONTEND_URL.
No dia a dia
- Atualizações. O arquivo compose fixa uma versão exata (
0.92.2no momento em que escrevemos). Troque a tag nodocker-compose.ymle depois rodedocker compose -p activepieces pull && docker compose -p activepieces up -d. Dê uma olhada nas notas de versão antes; ferramentas de automação adoram renomear coisas. - Backups. Fluxos, conexões e histórico de execuções ficam no volume do Postgres. Faça dumps agendados e guarde a cópia fora do servidor: as conexões guardam seus tokens de API de outros serviços.
- Passos de código não ficam em sandbox nessa configuração (
AP_EXECUTION_MODE=UNSANDBOXED). O servidor é seu e os fluxos também, então é aceitável. Deixa de ser no momento em que você permite que pessoas em quem não confia montem fluxos.
Se você já conhece o n8n, a ideia é a mesma: veja VPS para n8n. Escolha o editor em que você pensa com mais facilidade; os dois vão bem nos mesmos planos.
Relacionados
- VPS para n8n: a outra grande ferramenta de automação auto-hospedada
- Vários serviços em um só VPS: Activepieces ao lado do seu app e de um painel, um só IP
- VPS para Docker
- Como adicionar swap em um VPS
- Como configurar um firewall ufw
Comentários
Nenhum comentário ainda. Seja o primeiro.