호스팅형 자동화 서비스는 작업당 요금을 받고, 미터기는 일이라고 부르기도 어려운 것에도 돌아갑니다. 5분마다 피드를 확인하는 플로 하나가 쓸모 있는 일을 하기도 전에 한 달 8,640회 실행입니다. 같은 플로를 내 서버에서 돌리면 청구서는 서버 요금뿐입니다.
Activepieces는 오픈소스 자동화 빌더입니다. 트리거, 단계, 분기, 수백 개의 기성 통합이 있고, 기성품으로 부족할 때는 코드 단계를 씁니다. 커뮤니티 에디션은 MIT 라이선스이며 Docker Compose로 작은 서버 한 대에서 문제없이 돌아갑니다.
어떤 요금제
테스트 서버에 설치하고 측정했습니다. 기본 compose 파일은 앱과 worker 5개를 실행하며, Postgres와 Redis를 합쳐 약 2.6–3 GB RAM을 씁니다. worker를 하나로 줄이면 약 1.6 GB로 내려갑니다.
| 실행하는 것 | 요금제 |
|---|---|
| 개인 플로 몇 개, worker 1개 | Micro-IP: 2 vCPU, 2 GB, 25 GB (월 $10), swap 추가 |
| 기본 구성: worker 5개, 팀 플로, 웹훅 | Small-IP: 4 vCPU, 4 GB, 35 GB (월 $16) |
| 동시 실행이 많고 무거운 코드 단계 | Medium-IP: 6 vCPU, 6 GB, 45 GB (월 $20) |
전용 IPv4가 있는 요금제를 고르세요. 이걸 직접 운영하는 가장 큰 이유가 웹훅이고, 웹훅을 호출하는 서비스는 80번과 443번 포트에 닿아야 합니다. NAT 요금제에서는 외부에서 SSH 포트만 접속됩니다. 위치는 독일과 핀란드이며, 사용 가능 여부는 주문할 때 표시됩니다. 암호화폐로 결제할 수 있고 KYC는 없습니다.
설치
먼저 도메인(예: flows.example.com)을 서버로 지정합니다. 그다음 Ubuntu 24.04 또는 Debian 12에서 root로:
curl -fsSL https://get.docker.com | sh
git clone --depth 1 https://github.com/activepieces/activepieces.git
cd activepieces
sh tools/deploy.sh
deploy.sh는 .env.example을 .env로 복사하고 무작위 비밀값을 채웁니다. 처음 실행하기 전에 .env의 두 줄과 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
중요한 건 첫 줄입니다. AP_FRONTEND_URL은 화면의 링크만을 위한 값이 아닙니다. worker가 이 주소를 통해 앱에 접속합니다. http://localhost:8080으로 두면 각 worker 컨테이너가 자기 안에서 앱을 찾다가 못 찾고, 플로는 영영 게시되지 않습니다. 저희가 정확히 그 일을 겪었습니다. worker 로그의 «Socket.IO connection error», 멈춘 게시 요청, 404를 반환하는 웹훅. 실제 도메인을 넣자 같은 플로가 게시되고 웹훅이 실행됐습니다.
docker-compose.yml에 대한 sed는 8080번 포트를 localhost에 묶어 둡니다. Docker가 공개한 포트는 ufw를 우회하므로, 이게 없으면 앱이 HTTPS 옆에서 맨 포트로 열려 있게 됩니다.
Micro-IP에서는 worker도 하나로 줄이세요:
sed -i 's/replicas: 5/replicas: 1/' docker-compose.yml
이제 HTTPS와 실행:
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
30초쯤 기다린 뒤 https://flows.example.com을 열고 바로 계정을 만드세요. 처음 가입한 사람이 플랫폼의 소유자가 되고, 그 뒤로는 초대로만 가입할 수 있습니다.
웹훅이 동작하는지 확인
Webhook 트리거(Catch Webhook)로 플로를 만들고 아무 단계나 추가한 뒤 게시하세요. 트리거 패널에 URL이 표시됩니다. 거기로 테스트 이벤트를 보내세요:
curl -X POST https://flows.example.com/api/v1/webhooks/YOUR_FLOW_ID \
-H 'content-type: application/json' \
-d '{"event":"payment.paid","amount":16}'
200이 돌아오고, Runs에 실행이 성공으로 표시되어야 합니다. 대신 404가 나오면 돌아가서 AP_FRONTEND_URL을 확인하세요.
운영 메모
- 업데이트. compose 파일은 정확한 버전을 고정합니다(작성 시점
0.92.2).docker-compose.yml의 태그를 바꾼 다음docker compose -p activepieces pull && docker compose -p activepieces up -d를 실행하세요. 먼저 릴리스 노트를 훑어보세요. 자동화 도구는 이름 바꾸기를 좋아합니다. - 백업. 플로, 연결, 실행 기록은 Postgres 볼륨에 있습니다. 일정에 따라 덤프를 뜨고 사본은 서버 밖에 보관하세요. 연결에는 다른 서비스의 API 토큰이 들어 있습니다.
- 코드 단계는 샌드박스에서 실행되지 않습니다(이 구성은
AP_EXECUTION_MODE=UNSANDBOXED). 내 서버에 내 플로이니 받아들일 만합니다. 신뢰하지 않는 사람에게 플로를 만들게 하는 순간 그렇지 않게 됩니다.
n8n을 이미 안다면 개념은 같습니다. n8n용 VPS를 보세요. 더 생각하기 편한 편집기를 고르면 되고, 둘 다 같은 요금제에서 잘 돌아갑니다.
관련 글
- n8n용 VPS: 또 하나의 대표적인 셀프 호스팅 자동화 도구
- VPS 하나로 여러 서비스 운영: 앱과 대시보드 옆에 Activepieces, IP 하나
- Docker용 VPS
- VPS에 swap 추가하는 방법
- ufw 방화벽 설정 방법
댓글
아직 댓글이 없습니다. 첫 번째가 되세요.