For the complete documentation index, see llms.txt. This page is also available as Markdown.

hetzner

The rumi cloud hetzner commands provision and manage Rumi private clouds in Hetzner Cloud.

Overview

Hetzner commands provide lifecycle management for Rumi private clouds on Hetzner Cloud:

  • Catalog Inspection - List the SSH keys, server types, system images, and locations available in a project

  • Network Infrastructure - Create a private network and the per-role cloud firewalls that secure the fleet

  • Platform Services - Launch the Bastion, Admin, Monitor, and messaging broker nodes

  • Service Instances - Launch application workers and open their app ports

  • HTTPS - Terminate TLS on the bastion with a Let's Encrypt wildcard certificate

  • Lifecycle Management - Launch a whole platform in one step, and tear a deployment down

The Hetzner deployment model

Hetzner uses a prebaked-snapshot model (the same shape as the AWS AMI model): each role's software is baked once into a Hetzner snapshot, and every launch boots a node from that snapshot. Launches select the right snapshot by label, so before you can launch, the role snapshots must exist in the project.

The topology is public-only: every node has a public IP and also joins a private network (10.0.0.0/16). Internal names resolve through BIND on the bastion (the rumi.local zone → private IPs); each launched node's resolver is pointed at the bastion. Only the bastion is reachable from the internet (its firewall opens 22/80/443 to the world); every other role opens its ports only to the network CIDR, so all fleet operations flow through the bastion.

A managed public-DNS + NAT / private-only topology is on the roadmap; today every node is public and on the private net.

Prerequisites

Before using Hetzner commands, you must:

  1. Have a Hetzner Cloud project API token - Supply it with -k, --api-key or the HCLOUD_TOKEN environment variable (matching the official hcloud CLI convention).

  2. Have the role snapshots baked into the project - Launches boot from per-role snapshots discovered by label (rumi-role=<role>). Non-worker roles are baked from the service (Worker base) snapshot, so the service snapshot is baked first.

  3. Have an SSH key pair - Referenced by -K, --key-pair; the private key lives at ~/.ssh/<key-pair> and its public half is uploaded to the project (generated and uploaded automatically if absent).

Commands

All three providers (AWS, Hetzner, Civo) now share one command vocabulary: per-component lifecycle verbs (start-admin, stop-solace, terminate-monitor, …), an env-wide start/stop, and deprovision.

Catalog

Command
Description

List the SSH keys uploaded to the project

List the available server types (instance sizes)

List the available system (OS) images

List the available locations (regions)

Network Management

Command
Description

Create a private network and the per-role firewalls

List the networks provisioned in the project

Delete a network + its firewalls (refuses if instances are attached)

Tear down a network (servers, firewalls, network)

delete-network is the granular inverse of create-network: it removes the network and its firewalls but refuses if any instance is still attached. To tear a whole environment down (instances and network together), use deprovisiondelete-network is the scalpel, deprovision the sledgehammer.

Bastion

The bastion is the network's public entry point and internal DNS server. It fronts the fleet's nginx reverse proxies and is the SSH entry point; it must be launched before any other role.

Command
Description

Launch the bastion (DNS + public entry point)

Start the bastion

Stop the bastion

Terminate the bastion

Reverse-proxy a service publicly at <service>.<domain>

Issue a Let's Encrypt wildcard certificate and terminate TLS on the bastion

Admin Service

Command
Description

Launch the Admin node (agent + admin server + discovery broker + InfluxDB/Grafana)

Start the Admin node

Stop the Admin node

Terminate the Admin node

Monitor Service

Command
Description

Launch the Monitor node (Grafana)

Start the Monitor node

Stop the Monitor node

Terminate the Monitor node

Message Brokers

Command
Description

Platform

Command
Description

Launch a standard platform (bastion, admin, monitor, solace)

Start every platform instance (bastion first)

Stop every platform instance (bastion last)

Terminate every platform instance (bastion last)

Service Instances

Command
Description

Launch a service (worker) instance and open its app ports

Start a service instance

Stop a service instance

Terminate a service instance

Resize a service instance to a new server type

List the platform + service instances in a network

Remote Execution

Command
Description

Run a shell command on a service instance

Run an admin script against a deployed system

High-Level Lifecycle

Command
Description

Provision a complete environment (network + platform)

Deploy a XAR system to an environment

Add/update/remove a controller config property

Start every instance in a network

Stop every instance in a network

Tear down an environment

Common Options

Most Hetzner commands support these common options:

Option
Short
Description
Default

--api-key

-k

The Hetzner Cloud project API token (or set HCLOUD_TOKEN)

Required

--region

-r

The Hetzner location to operate in

fsn1

--network

-n

Name of the Rumi network

Required

--key-pair

-K

The SSH key pair to launch with (note: capital -K, since -k is the token)

Required for launches

Typical Workflow

Getting Help

Use --help (or -h) on any command:

Last updated