Self-hosting Activepieces on a Hetzner Ubuntu Server

Self-hosting Activepieces on a Hetzner Ubuntu Server

Yulei Chen - Content-Engineerin bei sliplane.ioYulei Chen
8 min

Want to build no-code automations and AI workflows with Activepieces but prefer to fully control your infrastructure? By self-hosting Activepieces on an Ubuntu server, you can cut down costs and manage your automation data yourself!

Looking for something simpler? If you'd rather skip server management and deploy Activepieces in minutes, check out Sliplane—deploy Activepieces with cost-effective pricing and a few clicks:

Follow along this easy-to-understand guide to learn how you can deploy your own Activepieces instance using Docker and Caddy web server for automatic HTTPS.

For this post, we're using an affordable server from Hetzner. Hetzner is known to provide great service at an exceptional price/performance ratio, making it an excellent choice for hosting automation platforms like Activepieces.

Prerequisites

Before we start, make sure you have a Hetzner Cloud account (or be ready to create one).

Step 1: Setup Your Hetzner Server

If you don't have a Hetzner server yet, follow these steps to create one:

  1. Go to the Hetzner Cloud Console, choose a project or create a new one, then navigate to ServersAdd Server

Hetzner Cloud Console

  1. Follow Hetzner's guidelines to choose:
    • Server type: Select a server type that fits your needs.

Select Server Type

  • Location: Choose a data center location closest to you or your users.

Select Location

  • Image: Select Ubuntu (latest LTS version recommended).

Select Ubuntu Image

  1. Add SSH key: Add your SSH public key for secure access. If you don't have an SSH key yet, you can generate one using ssh-keygen:
Terminal
ssh-keygen -t ed25519 -C "your_email@example.com"

Check it out with cat ~/.ssh/id_ed25519.pub and paste it into your server.

SSH Connection

  1. Configure networking if needed, then click Create & Pay to provision your server

Networking Options

Once your server is created, note down its IP address. You'll use this to connect via SSH in the next step.

Server IP Address

Step 2: Update Your Server

Open your terminal and log into your Ubuntu server via SSH:

Terminal
ssh root@your-server-ip

and update the system to ensure it has the latest security patches and updates:

Terminal
sudo apt-get update
sudo apt-get upgrade -y

Once finished, your server is ready for installing the software.

Step 3: Install and Configure UFW Firewall

Only keep necessary ports open: SSH (22), HTTP (80), HTTPS (443).

Install UFW and configure the firewall as follows:

Terminal
sudo apt install ufw -y
sudo ufw allow 22    # SSH
sudo ufw allow 80    # HTTP
sudo ufw allow 443   # HTTPS
sudo ufw enable

Check your firewall configuration:

Terminal
sudo ufw status verbose

Docker can sometimes ignore UFW rules. To tackle this, verify extra settings as explained here.

Step 4: Docker Installation

Docker will be the container system running Activepieces. Install Docker by running these commands:

Setup dependencies and Docker's GPG key:

Terminal
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg

sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

Add Docker repository:

Terminal
echo \
  "deb [arch=$(dpkg --print-architecture) \
signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo $VERSION_CODENAME) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

sudo apt-get update

Install Docker Engine and compose-plugin:

Terminal
sudo apt-get install docker-ce docker-ce-cli \
containerd.io docker-buildx-plugin docker-compose-plugin -y

Check installation:

Terminal
sudo docker run hello-world

If you see the "hello-world" message, Docker is ready.

Step 5: Installing Caddy for Automatic HTTPS

Caddy simplifies HTTPS configuration since it handles SSL certificates automatically from Let's Encrypt.

Install Caddy:

Terminal
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' \
| sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' \
| sudo tee /etc/apt/sources.list.d/caddy-stable.list

sudo apt update
sudo apt install caddy -y

Before configuring Caddy, you need to point your domain to your server's IP address. If you haven't configured DNS yet, follow these steps:

Configure DNS for Your Domain

  1. Log into your domain registrar's dashboard (where you purchased your domain)
  2. Navigate to the DNS settings or DNS management section
  3. Add an A record with the following settings:
    • Type: A
    • Name: @ (for root domain) or a subdomain like activepieces (for activepieces.yourdomain.com)
    • Value/Target: Your Hetzner server's IPv4 address
  4. Add an AAAA record for IPv6 support:
    • Type: AAAA
    • Name: @ (for root domain) or the same subdomain you used for the A record
    • Value/Target: Your Hetzner server's IPv6 address

DNS changes can take a few minutes to several hours to propagate. You can check if your DNS is configured correctly using tools like dig or online DNS checkers. Once the DNS record is active, you can proceed with Caddy configuration.

Configure Caddy

Edit the Caddyfile configuration file:

Terminal
sudo nano /etc/caddy/Caddyfile

Enter your domain and configure reverse proxy. Replace "yourdomain.com" with your actual domain name:

Caddyfile
yourdomain.com {
    reverse_proxy localhost:8080
}

If no domain yet, use this temporarily:

Caddyfile
:80 {
    reverse_proxy localhost:8080
}

Restart Caddy to load the config:

Terminal
sudo systemctl restart caddy

Step 6: Running Activepieces with Docker Compose

We're going to use Docker Compose for easier setup. The following compose.yml is based on the official Activepieces Docker setup. It uses PGLite (embedded PostgreSQL) and an in-memory queue—ideal for personal use or small teams on a single server. For production with multiple instances, use the Docker Compose option with PostgreSQL and Redis instead.

First create a directory for Activepieces, then navigate to it and create the compose file:

Terminal
mkdir -p ~/activepieces
cd ~/activepieces
sudo nano compose.yml

Copy/paste the following content into compose.yml. If you have a domain, replace http://localhost:8080 with your actual URL (required for webhooks and triggers to work correctly):

compose.yml
services:
  activepieces:
    image: activepieces/activepieces:0.77.8
    restart: always
    ports:
      - "8080:80"
    volumes:
      - activepieces_data:/root/.activepieces
    environment:
      - AP_REDIS_TYPE=MEMORY
      - AP_DB_TYPE=PGLITE
      - AP_FRONTEND_URL=http://localhost:8080

volumes:
  activepieces_data:

This setup ensures:

  • Your data persists across container restarts
  • Webhooks and triggers work correctly with your public URL
  • The container restarts automatically if it crashes

Now deploy Activepieces by running Docker compose:

Terminal
sudo docker compose up -d

Docker pulls the Activepieces image and runs it in background mode using port 8080.

Step 7: Accessing Your Self-Hosted Activepieces Instance

Visit your domain in any web browser. Your Activepieces instance should now load successfully at https://yourdomain.com. Create your admin account and start building automations!

Security Recommendations

Public servers should always be secure. The following practises are recommended:

  • Regularly apply updates and security patches.
  • Set strong passwords and control user access.
  • Monitor server logs for suspicious activity.
  • Install tools like Fail2ban for extra security.

Updating Your Activepieces Installation

When you want to update your Activepieces instance, first check the latest version on Docker Hub, then update the image version in your compose.yml file and run:

Terminal
cd ~/activepieces
sudo docker compose pull
sudo docker compose up -d

Docker will download updated versions automatically and replace your current containers.

Cost Comparison with Other Providers

Self-hosting Activepieces typically results in lower cost compared to hosted automation platforms:

ProvidervCPU CoresRAMDiskEstimated Monthly CostNotes
Sliplane22 GB40 GB~€9.5 Flatcharge per server
Render12 GB40 GB~$25–$40VM Small $25/mo; disk extra
Fly.io22 GB40 GB~$17–$25shared-cpu-2x 2GB ~$11/mo + volume ~$6/mo
Railway22 GB40 GB~$15–$66Usage-based; Hobby $5/mo + $20 credits, $66 max*

You maintain complete control and avoid usage-based charges by self-hosting. But of course there is no free lunch and you're now responsible for managing your own server!

Deploy Activepieces in minutes

If managing and securing your own server is a bit too much for you, deploy Activepieces on Sliplane with one click—no SSH, no firewall config, just works.