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:
Have a Hetzner Cloud project API token - Supply it with
-k, --api-keyor theHCLOUD_TOKENenvironment variable (matching the officialhcloudCLI convention).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.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
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
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 deprovision — delete-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.
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
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
Launch the Monitor node (Grafana)
Start the Monitor node
Stop the Monitor node
Terminate the Monitor node
Message Brokers
Solace broker
Kafka broker
ActiveMQ (rumi-messaging) broker
Platform
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
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
Run a shell command on a service instance
Run an admin script against a deployed system
High-Level Lifecycle
Common Options
Most Hetzner commands support these common options:
--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:
Related Documentation
Cloud Commands - The standardized Rumi private cloud model
AWS Commands - The equivalent commands on AWS
Installation - Install the Rumi CLI
Last updated