Skip to content
self hosted
Enterprise

Self-hosted

The Enterprise edition runs entirely on your own infrastructure. No outbound connectivity, no licence heartbeat, no tier limits — a single self-contained binary or a Docker deployment you operate yourself.

Read
7 min
Edition
Enterprise

What changes versus cloud

The application is the same; the operating model is not. Cloud is a subscription with plan limits and a hosted control plane. Enterprise is a contract, a licence token, and an install that never talks to us.

CloudEnterprise (self-hosted)
HostingManaged by DataRunnerYour infrastructure
LicensingStripe subscriptionSigned licence token, direct contract
Outbound connectivityRequiredNone — runs air-gapped
Tier limitsBy planNone
Custom rolesFixed role setDefinable
Key managementManagedBYOK via your KMS
UpgradesContinuousYou choose when

Components

A full install is four moving parts. The worker is the one that matters operationally — it is what actually executes schedules, watches, and monitor probes, so an install with no worker will look healthy and quietly do nothing.

API
The REST surface and the console’s backend. Stateless; scale horizontally behind a load balancer.
Worker
Executes scheduled runs, watches, and probes. At least one instance is required.
PostgreSQL
The system of record. Your own instance, your own backup policy.
Console
The web UI. A static bundle pointed at your API origin at runtime — no rebuild per deployment.
Redis, an AMQP broker, and S3-compatible object storage are optional but recommended: they back caching, the delivery queue, and export storage respectively. Without object storage, large exports fall back to inline delivery.

Deploying with Docker

The compose file brings up the whole stack on one host. Point it at your own Postgres in production; the bundled one exists so an evaluation works out of the box.

evaluation installbash
# 1. Configure
cp .env.example .env
#   set DR_LICENSE_TOKEN, POSTGRES_*, and App__FrontendUrl

# 2. Bring up API, worker, console, and dependencies
docker compose -f docker-compose.prod.yml up -d

# 3. Migrations apply automatically on API boot.
docker compose logs -f api
Set the frontend URL correctly. App__FrontendUrl is what invite links, password resets, and public status pages are built from. A wrong value produces links that 404 for your users while everything looks fine internally.

Licensing

Enterprise activates from a signed token you install as configuration. Validation is local and offline — the token is verified against an embedded public key. There is no call home, so an install in a disconnected network keeps working indefinitely.

Offline validation
Signature checked locally. No heartbeat, no phone-home, no degradation if the network is cut.
Renewal
A new token replaces the old one in configuration and takes effect on restart.

Keys and data control

Connection credentials are encrypted at rest. On Enterprise you can hold the key material yourself: envelope encryption wraps each data key with a key from your own KMS, so revoking access in your KMS revokes it here.

BYOK
GCP KMS or Azure Key Vault wrap the data encryption keys. DataRunner never holds the root key.
Column policies
Mask or block sensitive columns per role, enforced when results are read rather than when they are displayed.

Operating it

Migrations run automatically when the API boots, so an upgrade is: pull the new image, restart, watch the logs. Back up PostgreSQL — it holds everything, including encrypted credentials. A health endpoint reports database, cache, and broker reachability for your own monitoring to scrape.