Skip to main content

Bot Runners — Where Your Bots Actually Run

A Runner is the infrastructure that executes your bots. Bots themselves are just configuration (a strategy, an exchange connection, risk parameters); the runner is the server — Docker host, Kubernetes cluster, or local control-plane process — that actually pulls the Freqtrade image, mounts the bot's database, places trades, and reports results back to VolatiCloud.

This page explains the three runner types, when to pick each, what they store, and how visibility and sharing work across an organization. For step-by-step setup, see Docker Runner or Kubernetes Runner.

VolatiCloud Runners page in an empty state, with a placeholder explaining that no runners have been configured yet and a green Create Runner button in the top right

Runner Types Compared

CapabilityDocker RunnerKubernetes RunnerLocal Runner
Best forSelf-hosted, single VPSProduction, 10+ botsDevelopment, debugging
Plan availabilityStarter+Pro+Dev only
Setup complexityLow (TLS certs)Medium (kubeconfig, ingress)None
Multi-bot isolationPer-containerPer-pod + namespaceShared process
Horizontal scalingSingle host limitMulti-nodeSingle host
High availabilityNoYes (multi-node)No
S3 database backupsYesYesNo
Prometheus metricsManualBuilt-inNo
Recommended bot count1–2010–200+1–3

If you're running fewer than 10 bots and you have a VPS or cloud VM you can administer, Docker is simpler and just as production-capable for that scale. If you're running 10+ bots, want bot-level isolation, or need high availability and Prometheus, go straight to Kubernetes.

Docker Runner

Connect VolatiCloud to any Docker host — a VPS, cloud VM, or bare-metal server with Docker installed and exposed over TLS.

Best for:

  • Self-hosted setups with a single server
  • Cost-sensitive deployments (one VPS can run many bots)
  • Solo traders who don't want to manage Kubernetes

Requirements:

  • Linux server with Docker installed
  • Docker daemon exposed over TCP with TLS verification (port 2376 by default)
  • Network reachable from VolatiCloud's egress IPs

See Docker Runner for the full setup walkthrough including TLS certificate generation.

Kubernetes Runner

Connect to a Kubernetes cluster for production-grade isolation, scaling, and observability. Each bot becomes a Deployment with its own Service, Ingress, and PersistentVolumeClaim.

Best for:

  • Production trading at scale (10–200+ bots)
  • Teams with DevOps capability
  • Workloads needing high availability and per-bot isolation
  • Anyone who already runs other workloads on Kubernetes

Features:

  • Per-bot isolation — each bot lives in its own pod with its own resource quotas
  • Namespace sharding — at high scale, bots are distributed across multiple namespaces to avoid RBAC and quota bottlenecks
  • Persistent volumes for bot SQLite databases
  • Automatic ingress for the Freqtrade API
  • Prometheus integration for metrics collection
  • S3 backup integration for SQLite database snapshots

See Kubernetes Runner for cluster preparation, kubeconfig setup, and ingress configuration.

Local Runner

Runs bots directly on the VolatiCloud control plane process. Intended for development and testing only.

warning

The Local Runner is for development environments only. Production deployments should use Docker or Kubernetes runners — Local Runner does not provide isolation, persistence, or backup.

Creating a Runner

Click Create Runner on the Runners page to open the configuration drawer. The drawer adapts to the runner type you select — Docker fields ask for TLS certificates and host URL, Kubernetes fields ask for kubeconfig and ingress settings.

Create Runner drawer with the Name field filled, a Runner Type selector, connection fields for Docker host URL and TLS certificates, and optional S3 backup settings collapsed in an accordion

Every runner stores three categories of configuration:

CategoryWhat it contains
Connection credentialsDocker TLS certs and host URL, or Kubernetes kubeconfig + context + namespace
S3 storage settingsEndpoint, bucket, access keys for SQLite database backups and historical OHLCV cache
Data download configWhich exchanges and timeframes to pre-cache historical OHLCV data for

Connection credentials and S3 access keys are protected by field-level AES-256-GCM encryption — even database administrators cannot read them in plaintext.

Runner Operations

Test Connection

Before deploying bots, click Test Connection on the runner. VolatiCloud connects to the Docker daemon (or Kubernetes API) and verifies it can list resources, pull images, and create deployments. Failures here surface as actionable errors — wrong port, expired certificate, missing namespace, RBAC denied.

Refresh Historical Data

Bots and backtests need historical OHLCV data. Trigger a download from the runner detail page:

  1. Open the runner
  2. Click Refresh Data
  3. Pick the exchange, timeframes, pair pattern, and how many days of history to fetch
  4. Watch the download progress in real time

The downloaded data lives on the runner (in a shared PVC for Kubernetes runners) and is reused across all bots and backtests on that runner.

What the Runner Manages

When a bot runs, the runner is responsible for:

  • Creating, starting, stopping, and removing Freqtrade containers (or pods)
  • Mounting and managing the bot's SQLite database
  • Uploading database backups to S3 on stop and on schedule (per ADR-0032)
  • Restoring SQLite databases from S3 when bots restart
  • Serving the Freqtrade REST API endpoints VolatiCloud uses to monitor bots

VolatiCloud's control plane never holds your trading state — it lives on the runner and is backed up to your S3 bucket.

Sharing Runners Across Your Team

Runners can be public or private within an organization, the same model as bots and strategies:

VisibilityWho can see itWho can deploy bots on it
Private (default)Owner onlyOwner only
PublicAll organization membersAll organization members
Sensitive config (TLS certs, kubeconfig, S3 keys)Only users with the view-secrets UMA scope

Making a runner public is the standard pattern for teams: the org admin sets up the runner and makes it public, and everyone else creates bots on it without ever seeing the credentials.

Resource Sizing Guidance

The right runner size depends on bot count and strategy complexity. Rough guidelines:

BotsDocker hostKubernetes nodes
1–52 GB RAM, 1 vCPU1 node, 4 GB RAM, 2 vCPU
5–204 GB RAM, 2 vCPU1–2 nodes, 4 GB RAM, 2 vCPU
20–508 GB RAM, 4 vCPU3–5 nodes, 8 GB RAM, 4 vCPU
50–200Not recommended (move to K8s)5–10 nodes, 16 GB RAM, 8 vCPU
200+Not recommended10+ nodes, 32 GB RAM, 16 vCPU

Storage scales with retained historical OHLCV data and per-bot SQLite database size.

Next Steps