Skip to content

Deploy on Coolify

Coolify is a good fit for putting the hub on a public server (a Hetzner or similar VPS) where NAT’d agents can dial home to it. Runaway ships a docker-compose.coolify.yml that deploys the published hub image — Coolify sources the compose file from your repo but pulls the pinned image instead of building it. The hub image is public, so the hub needs no GHCR login.

  1. Create a Docker Compose resource from the repository.

    Create a Docker Compose resource sourced from this repository (via Coolify’s GitHub App) and point it at docker-compose.coolify.yml. Coolify reads the compose file and pulls the pinned hub image.

  2. Assign your domain.

    Assign your domain to the runaway service. Coolify provisions TLS and configures Traefik for you. WebSocket upgrades on /api/agent — which agents use to dial home — pass by default.

  3. Deploy.

    There are no secrets to paste. RUNAWAY_MASTER_KEY, BETTER_AUTH_SECRET, and RUNAWAY_HUB_URL are filled by Coolify’s SERVICE_* magic variables. Hit deploy and the hub comes up on your domain.

The Coolify deploy bundles no local agent — the hub holds no Docker socket, so no runner compute lives on the public server. That’s deliberate: a hub compromise grants no Docker access on the public box. All runner compute lives on agent hosts you enroll from the hosts page. See Add more hosts to connect your first agent.

SQLite is single-writer. Deploy one instance and use recreate, not rolling updates — two containers against the same data volume is unsupported.