doable.do

BYO + Hetzner

How to self-host apps on a Hetzner server with Doable

Hetzner Cloud's CX22 is around $6/month for 2 vCPU / 4 GB RAM. That's enough to comfortably run a handful of small apps. Pair it with Doable's agent and you get the same one-command deploy workflow you'd have on Doable Cloud, but on hardware you own and pay for directly.

Doable BYO is free at every plan tier. You only pay Hetzner.

Step by step

  1. 1

    Spin up a Hetzner Cloud VM

    Pick CX22 or larger, Ubuntu 24.04, your SSH key. Note the public IP.

  2. 2

    Register the server with Doable

    In your local terminal, point the CLI at your account.

    doable server add
  3. 3

    Install the agent on the VM

    Doable returns a one-line install command containing a single-use enrollment token. SSH into your VM and run it.

    curl -fsSL https://doable.do/install-agent.sh | bash -s -- --enrollment-token <token>
  4. 4

    Deploy

    From any project directory, target your new server.

    doable deploy --target <server-id>

What the agent does (and doesn't do)

The Doable agent is a single Go binary, ~12 MB, that runs as a systemd service on your VM. It long-polls the Doable control plane for tasks (build / deploy / stop / addon-provision) and runs them via the local Docker daemon. It only manages containers it created itself, verified via the `doable.managed=true` Docker label, so existing containers on the host are untouched.

The agent is outbound-only. It never opens an inbound port. The control plane never sees your VM's IP except as a connection origin in the agent's heartbeat.

How traffic reaches your apps

The agent installs Traefik on your VM (with your permission) and configures it as a reverse proxy. Traefik listens on 80/443, terminates TLS via Let's Encrypt, and routes based on Host header.

For each deploy, the agent updates Traefik's config to add a route for the project's hostname. Custom domains work too, point the DNS at your VM's IP, then `doable domain connect <hostname>`.

When this beats managed cloud

If you have 3+ small apps or one always-on app with non-trivial CPU/memory, a $6/month Hetzner box is cheaper than any managed PaaS at the same scale. You absorb the ops responsibility (you're the one who SSH's in if Docker daemon dies) but Doable handles the deploy + routing automation that's annoying to build yourself.

Doable also supports addons (Postgres, Redis, MongoDB) running natively on your BYO server. Opt in with `doable server addons enable <id>` then `doable addon create --engine postgres`.

FAQ

Does Doable cost extra for BYO servers?

No. BYO is free at every plan tier, Free, Starter, and Pro. You only pay your hosting provider (Hetzner, DigitalOcean, etc.).

Can I run other things on the same server?

Yes. The agent only manages containers it created (filtered by the `doable.managed=true` label). Existing services, manual containers, and anything outside Docker are untouched.

What if the agent crashes or my server reboots?

The agent runs as a systemd unit with `Restart=always`. After a reboot it reconnects to the control plane and re-syncs container state. Active deployments resume; if a build was in flight it gets retried.

Does this work on DigitalOcean / Vultr / Fly Machines?

Yes, any Linux host with Docker. The install script targets Ubuntu 24.04 and Debian 12; other distros work but may need a manual install.

Try Doable free

No credit card. Deploy your first project in under a minute.