Lightweight CLI tool to programmatically rescale your Hetzner virtual server daily to optimize your budget spending, scaling to a cheaper machine when you don't need or need few resources, and scaling to a more performant one when you know the load will be higher.
First, you need to generate an Hetzner API Token.
Next you need to create your configuration file or export the required environment variables for the tool.
config command helps you generate a valid configuration, warning you if there are any logic errors and validating your input.
Keep in mind if env vars are defined, they will take priority.
After setting the configuration, you can start the tool by running
Use with environmental variables
Export these env vars to override or completely bypass the generated configuration:
||A valid Hetzner API Token
||The ID of the target server
||The code of the cheap server type
||The code of the high performance server type
||24h format, colon separated hour when the server should be upgraded
||24h format, colon separated hour when the server should be downgraded
Use with Docker
Pull the image from dockerhub
docker pull jonamat/hetzner-rescaler
Opt A: Create a config file inside the container & start immediately
docker run -ti jonamat/hetzner-rescaler hr plug
Opt B: Mounting a configuration file
docker run -v ~/.hetzner-rescaler.yaml:/.hetzner-rescaler.yaml jonamat/hetzner-rescaler
Opt C: Passing config as env vars
docker run \ -e HCLOUD_TOKEN=abc123 \ -e SERVER_ID=4567 \ -e BASE_SERVER_NAME=cpx11 \ -e TOP_SERVER_NAME=cpx21 \ -e HOUR_START=09:00 \ -e HOUR_STOP=20:00 \ jonamat/hetzner-rescaler
You can also pass a partial configuration file and define the missing vars as env vars (useful eg to hide the API key)
Use with compose/swarm stacks
version: '3.7' services: hetzner-rescaler: image: jonamat/hetzner-rescaler // Provide the env vars environment: HCLOUD_TOKEN: abc123 SERVER_ID: 4567 BASE_SERVER_NAME: cpx11 TOP_SERVER_NAME: cpx21 HOUR_START: "09:00" HOUR_STOP: "20:00" // ...or mount the config file volumes: - /var/hetzner/config-file.yaml:/.hetzner-rescaler.yaml
The configuration file
The default path for the config file is
You can provide (and create) a custom config path passing the
--config /custom/path/config.yml flag.
Config yaml file example
hcloud_token: abc123 server_id: 15393230 base_server_name: cx11 top_server_name: cx21 hour_start: "09:00" hour_stop: "20:00"
Usage: hetzner-rescaler [command] Available Commands: config Create the configuration file help Help about any command plug Configure and start immediately start Start rescale timers try Try a complete rescale cycle Flags: --config string config file (default is $HOME/.hetzner-rescaler.yaml) -h, --help help for hetzner-rescaler Use "hetzner-rescaler [command] --help" for more information about a command.
This tool was developed for a my specific use case: I use an Hetzner server for remote development, using the Remote SSH extension to simplify my cross-device development workflow. This machine also serve some personal services, which require very little resources but cannot be stopped for a long time.
It could be useful for all servers running applications related to a company's opening hours, such as booking, delivery or management software.