· 7 min read · updated August 2, 2026

Tired of paying for automation tools that bill you for every single “run”?
Does the thought of opening ports, wrestling with NGINX or paying a subscription just to automate your repetitive tasks put you off?

Good news: you can run your own automation platform without paying a cent, without worrying about SSL certificates, without NGINX, and without exposing your infrastructure. Welcome to the power of open source plus smart DevOps.

By the end of this guide you’ll:

✅ Have ActivePieces self-hosted and running on your own server or VPS.
✅ Use Docker to keep the deployment clean and simple.
✅ Publish it on the internet over HTTPS thanks to Cloudflare Tunnels, without opening a single port.
✅ Enjoy unlimited runs and automations with no caps.
✅ Sleep easy: everything secure, private and under your control.


Why Bother Doing This?

SaaS automation platforms like Zapier, Make or Pabbly are great… until:

ActivePieces is open source, powerful and modular. And once you deploy it yourself, it becomes a tool with zero cost and endless possibilities.


🧠 The Architecture in Brief

Your stack will be:


🔧 What You’ll Need


🛠 Step by Step

1. Install Docker

sudo apt update && sudo apt upgrade -y
sudo apt install curl -y
curl -sSL https://get.docker.com/ | sh
sudo usermod -aG docker $USER

What does this do?
It updates your system, installs curl, and downloads and installs Docker automatically. Then it adds your user to the docker group so you can use it without sudo. Log out and back in for the group change to take effect.

2. Clone and Deploy ActivePieces

git clone https://github.com/activepieces/activepieces.git
cd activepieces
sh tools/deploy.sh

What’s going on here?
We download the ActivePieces source code and run its deployment script. That automatically generates a .env file with the variables it needs and sets up the structure for Docker Compose.

3. Bring the Platform Up

docker compose -p activepieces up -d

What does this command do?
It starts the containers (activepieces, postgres, redis) in the background (-d) under the activepieces project. The whole application ends up running on your local server.

Check that they’re running:

docker compose -p activepieces ps

Open this in your browser:
http://IP_DEL_SERVIDOR:8080

4. Create your ActivePieces user account

Once you go to the address:

http://IP_DEL_SERVIDOR:8080

you’ll get a sign-up screen like this one:

ActivePieces sign-up form for creating the first account of the installation

Fill in the required fields (name, email and password) to create a local account. You’ll use this account to get into the admin panel and manage all your automation flows.

This step confirms the platform deployed correctly and is up and running in your local environment. It isn’t reachable from the internet yet, though, and it isn’t ready to receive external webhooks.


5. Safe public exposure and working webhooks

So far your instance is only reachable from your local network. There’s one critical limitation, though:

By default, ActivePieces will try to use the server’s public IP to build the webhook URLs.

That gets messy if you’re running the platform on a personal machine, behind NAT, or without DNS properly configured, because external tools won’t be able to reach the webhook URLs it generates.

What does that mean in practice?

Any flow that relies on webhooks (receiving data from Stripe, GitHub or a form, for example) won’t work properly if the generated URL points to an IP that can’t be resolved or reached from outside.

To solve this safely and efficiently, we’re going to:


🌍 Publishing It over HTTPS Without Opening Ports

Now that we’ve spotted the problem with the webhook URLs (which point to localhost by default), let’s fix it properly. We’ll use this step to hit two key goals:

For that we’ll use a reliable, well-known tool: Cloudflare Tunnel.

Here’s a detailed guide on installing and configuring it:
👉 Expose your internal services with a Cloudflare Tunnel (free)

In this tutorial we’ll assume the tunnel is already configured and running on the server where ActivePieces is deployed.

Remember that ActivePieces is listening on port 8080

Tunnel public hostname form pointing the ap subdomain to the local service on port 8080

Now go to:
https://ap.tudominio.com

Checking public access: ActivePieces is now reachable from the internet

With the Cloudflare Tunnel configured, you can confirm your instance is reachable from anywhere by visiting the subdomain you set up.

Browser opening ActivePieces on its public subdomain, now reachable from outside the network

When you open it you should see the usual ActivePieces sign-up interface, but now served securely over HTTPS through the tunnel:

This confirms the tunnel is working properly, and that we no longer depend on the local network or have to expose any ports.

The critical detail: the webhooks still point to localhost

Even though the interface is published and reachable from outside, one key thing is still unresolved: the webhooks it generates still point to http://localhost:8080, as you can see in the screenshot below:

ActivePieces flow editor with the Catch Webhook step and its URL still pointing to localhost

With this default configuration, any external system that tries to call the webhook (Stripe, Slack, Notion and so on) can’t reach the server, because the generated URL isn’t valid outside the local environment.

📬 Webhooks That Actually Work

To fix this behavior we have to explicitly define the AP_FRONTEND_URL environment variable, which tells ActivePieces the public base URL it should use to build links, webhooks included.

How to do it:

  1. Open the .env file in the project directory:
nano .env
  1. Find this line:
AP_FRONTEND_URL=
  1. And update it with your tunnel’s URL, in this case:
ActivePieces environment variables with AP_FRONTEND_URL pointing to the public domain
AP_FRONTEND_URL=https://ap.itrafa.com
  1. Save and close the file. (Ctrl + X)
  2. Apply the changes by restarting the containers:
docker compose -p activepieces up -d

From this point on, every new webhook your flows generate will use the public URL correctly, so your automations can work reliably with external tools.

The same Catch Webhook step now showing the public webhook URL after fixing the configuration

🔄 What About Updates?

Always up to date with a single command:

sh tools/update.sh

🚀 Why This Approach Wins

Unlimited runs. Unlimited flows.
Zero cost, no licenses and no artificial limits.
No manual certificates.
Automatic HTTPS, enterprise-grade security.
No open ports. No needless risk.
Full control over your data, your processes and your environment.


💡 Ideal for…


TL;DR

ComponentWhy it matters
ActivePiecesPowerful, open source automation.
DockerClean, portable deployment.
Cloudflare TunnelHTTPS without opening ports. Security without the hassle.
CostNo licences, no subscriptions. You provide the infrastructure: a VPS or a machine running 24/7.

🎯 Automate Everything. Pay Nothing. No Limits.

This isn’t an experiment, it’s a professional solution that’s ready for production.
And the best part: you’re not tied to anyone. It’s yours. Run it wherever you like.

Ready to take control of your automations?

Alternative: automation without a server

If your site runs on WordPress and you want something simpler that needs no Docker and no extra infrastructure, take a look at Bit Flows as an automation alternative inside WordPress. It’s less powerful than ActivePieces, but it runs directly in your WordPress install with no external dependencies.

Leave a Reply

Your email address will not be published. Required fields are marked *