This script automatically creates snapshots of your Hetzner Cloud Servers and deletes the old ones.
Snapshots then work like the automatic backups offered directly by Hetzner, with the advantage that more backups and at self-defined times can be created.
For ease of use, the script works with the powerful labels directly in the Hetzner Cloud Console. Just add labels to the servers and you are done.
1. Run the docker image
docker run -d --name hcloud-snapshot-as-backup \
--restart unless-stopped \
-v /etc/localtime:/etc/localtime:ro \
-e API_TOKEN= \
-e SNAPSHOT_NAME="%name%-%timestamp%" \
-e LABEL_SELECTOR="AUTOBACKUP" \
-e KEEP_LAST=3 \
-e CRON="0 1 * * *" \
fbrettnich/hcloud-snapshot-as-backup
Put your Hetzner Cloud Console API-Key after API_TOKEN=
in line 4.
Optional: Set CRON
to false
to disable CronScheduler in the container and schedule outside of the container, especially for using services like Amazon ECS scheduled tasks or Google Cloud Run jobs.
1. Download docker-compose.yml
curl -sSL https://raw.githubusercontent.com/fbrettnich/hcloud-snapshot-as-backup/main/docker-compose.yml > docker-compose.yml
2. Edit configuration
Open the docker-compose.yml
file to complete the configuration.
You can find more information about the configuration below (click here)
3. Run docker-compose
docker-compose up -d
1. Clone this repository
apt install git
git clone https://github.com/fbrettnich/hcloud-snapshot-as-backup.git /opt/hcloud-snapshot-as-backup
2. Install requirements
apt install python3 python3-pip
pip3 install -r /opt/hcloud-snapshot-as-backup/requirements.txt
3. Copy config.json
cd /opt/hcloud-snapshot-as-backup/
cp config-example.json config.json
4. Edit configuration
Open the config.json
file to complete the configuration.
You can find more information about the configuration below (click here)
5. Run script
python3 /opt/hcloud-snapshot-as-backup/snapshot-as-backup.py
To execute the script automatically, you can create a crontab: Crontab Generator
crontab -e
Add the crontab at the end of the file:
0 1 * * * python3 /opt/hcloud-snapshot-as-backup/snapshot-as-backup.py >/dev/null 2>&1
This crontab executes the script every day at 1am.
Depending on how you run the script, you will need to configure.
When you run the script using Docker, the options are set by environment variables.
When you run the script via command/crontab, the options are set via the configuration file (config.json
).
API_TOKEN
or in the config under api-token
You can specify in the environment variables under KEEP_LAST
or in the config under keep-last
how many backups you want to keep per server by default.
Labels can be used to overwrite the default value directly in the Hetzner Cloud Console.
Add the label AUTOBACKUP.KEEP-LAST
with the value that should apply to the server.
The newest ones are kept and old ones are deleted.
All servers that should be included by the script and automatic snapshot backups should be created must have the label AUTOBACKUP
with the value true
.
You can change the default label from AUTOBACKUP
to something else by changing the label_selector
value in the config. If in a docker environment you can set the LABEL_SELECTOR
environment variable. When changing the label_selector
, you must also use this for the KEEP-LAST
setting.
Specify how you want your snapshots to be named in the environment variables under SNAPSHOT_NAME
or under snapshot-name
in the config.
By default they are named <server name>-<timestamp>
.
Placeholder | Value |
---|---|
%id% | ID of the server |
%name% | Name of the server |
%timestamp% | Current timestamp |
%date% | Current date (%Y-%m-%d ) |
%time% | Current time (%H:%M:%S ) |
If you run the script in Docker, a cron may be specified in the environment variables under CRON
.
The cron is used to define how often and at which times the script should be executed.
Optionally, set CRON
to false
to disable CronScheduler in the container and schedule outside of the container.
Here you can create a cron: Cron Generator
For example:
0 1 * * *
This cron executes the script every day at 1am.
This script works with the powerful Hetzner Labels.
AUTOBACKUP
AUTOBACKUP
and value true
are included by the scriptAUTOBACKUP.KEEP-LAST
(optional)AUTOBACKUP.KEEP-LAST
can be used to specify how many backups should be kept for this serverAUTOBACKUP
AUTOBACKUP
AUTOBACKUP
Advantages | Disadvantages |
---|---|
Snapshot Backups can be created at own times (Backups at given time) | Snapshots are limited (but higher limit can be requested) |
Any number can be kept (Backups only maximum 7) | May be more expensive for extremely large servers (lots of storage) |
Are cheaper than backups for smaller servers (less storage space) | |
Are not server bound (Backups will be deleted if you delete the cloud server) | |
New servers can be created directly from the snapshot | |
Snapshots are stored in a different location (same network zone) than the cloud server (Backups only in the same location as the cloud) | |
Snapshots can be moved to another project |