IT

BorgBackup mit Hetzner Storage Box verwenden

Ein kurzer Erfahrungsbericht mit Anleitung zum Setup von BorgBackup mit einer Hetzner Storage Box

· 5 Minuten Lesezeit
BorgBackup mit Hetzner Storage Box verwenden

Hintergrund

Trotz meines IT-Studiums habe ich erst spät daran gedacht, eine Backup-Strategie für mein Homelab zu entwickeln. Meine persönlichen Daten sind schon länger in einem Backup System mit Syncthing (Vielleicht gibt es hier auch bald einen Post darüber).

Nun hat sich für mich die Frage gestellt:

Wie Backup man einen Server der in Deutschland steht, während man selbst in Österreich ist.

Meine erste Überlegung war, das Backup über mein Tailscale-Netzwerk auf meine Home-NAS zu übertragen. Da diese jedoch bereits fast ihre Speichergrenze erreicht hat und ein Festplatten-Upgrade ansteht, welches ich versuche hinauszuzögern, habe ich nach einer anderen Lösung gesucht.
Schlussendlich ist mir eingefallen, dass meine persönlichen Daten bei Hetzner in einer StorageBox liegen. Warum nicht die Docker Files meines PROD-Servers auch.

Nach etwas Recherche habe ich nun herausgefunden, dass die Storageboxen BorgBackup unterstützen. So jetzt nur noch BorgBackup einrichten.

Was ist eine Hetzner Storagebox

Hetzner selbst definiert die StorageBox als:

DIE SCHNELLE, SICHERE UND PRAKTISCHE STORAGE LÖSUNG

und ich muss zugeben, dem Stimme ich zu. Ob über Webdav oder einfach über SSH gibt es viele Möglichkeiten auf die gespeicherten Daten zuzugreifen.

Features

Flexibler Zugriff

Die Storage Box bietet maximale Flexibilität beim Zugriff. Unterstützt werden Protokolle wie FTP, SFTP, SCP und RSYNC, sodass man immer die passende Methode hat. Zusätzlich lässt sich die Storage Box über WebDAV oder Samba direkt in dein Dateisystem einbinden!

Hohe Ausfallsicherheit

Mit Snapshots kann man jederzeit Momentaufnahmen seiner Daten erstellen und bei Bedarf darauf zurücksetzen. Dies erhöht die Ausfallsicherheit der gespeicherten Inhalte. Diese Snapshots lassen sich sogar automatisiert nach Zeitplan anlegen.

Flexibler Speicher

Die Speichergröße der Storage Box kann man jederzeit anpassen – ob Upgrades oder Downgrades, alles ist problemlos möglich.
Und das Beste: Der Wechsel zwischen verschiedenen Kapazitäten erfolgt ohne Datenverlust. Einfach die gewünschte Option auswählen und direkt loslegen.

Pricing

Ich persönlich finde das Pricing ebenfalls angemessen. 3,20€ für 1TB Cloud speicher ist nicht viel. Zugegeben es ist nicht so leicht wie eine fertige Lösung wie zum Beispiel OneDrive oder sogar die hauseigene Lösung von Hetzner StorageShare (diese Bietet eine vorkonfigurierte Nextcloud-Instanz)

Gut genug herum geredet wie habe ich nun BorgBackup installiert und welche Fehler habe ich gemacht

Anleitung zur Einrichtung

Schritt 1: SSH-Key einrichten

Zunächst wird ein SSH-Key generiert und auf der Storage Box hinterlegt, um eine sichere Verbindung zu ermöglichen. Hierzu gibt es ein Script von Hetzner, welches automatisch den SSH-Key für Port 22 und 23 hinterlegt.
Siehe: Hetzner Docs | Storage Box SSH Keys

Schritt 2: SSH-Config erstellen

Als Nächstes erstellen wir eine SSH-Config, damit wir die StorageBox leichter in folgenden Befehlen ansprechen können
Falls noch nicht erstellt, erstelle im .ssh Verzeichnis des Servers die config Datei
In diese Datei muss man nun folgendes einfügen:

Host storagebox
    HostName <storagebox-hostname>
    Port 23
    User <username>
    IdentityFile ~/.ssh/<key-file>

Sobald diese Datei erstellt ist kann man sich mit folgendem Befehl auf die StorageBox vebinden: ssh storagebox

Schritt 3: Borg-Repository erstellen

Nun muss das Backup-Repository auf der StorageBox erstellt werden.
Hierzu muss auf dem Server folgender Befehl ausgeführt werden

borg init --encryption=repokey ssh://storagebox/./backups/server1
💡
Hinweis: Du wirst nach einem Passwort gefragt, das als Verschlüsselungsschlüssel dient. Das Passwort ist nicht dein SSH-Schlüssel! Es sollte sicher und einzigartig sein.

Schritt 4: Erstes Backup

Nachdem das Repo erstellt wurde können wir nun das erste Backup testen und hochladen. Hierzu wird wieder ein Befehl von borg verwendet:

borg create ssh://storagebox/./backups/server1::2024_01_18_initial /home

Dieser Befehl startet den Backupvorgang und sichert den Home Folder des Nutzers. Beim Ausführen des Befehls besteht die Möglichkeit, dass nach einem Passwort gefragt wird. Mir persönlich war nicht klar welches genau gemeint ist und ich habe prompt das Passwort vom SSH-Key eingegeben, da ich dachte dieser wird für die Verbindung benötigt. Jedoch muss man hier das Passwort eingeben, welches man im Schritt 3 erstellt hat.

Schritt 5: Automatisierung

Die Automatisierung erfolgt mit einem Skript aus der Hetzner-Community, welches von mir um Monitoring Angepasst wurde:

#!/usr/bin/env bash

##
## Setzen von Umgebungsvariablen
##

## Falls nicht der Standard SSH Key verwendet wird, können
## Sie hier den Pfad zu Ihrem privaten Key angeben
# export BORG_RSH='ssh -i ~/.ssh/<key-file>'

## Damit das Passwort vom Repository nicht eingegeben werden muss,
## kann es in der Umgebungsvariable gesetzt werden
# export BORG_PASSPHRASE="<repo-passphrase>"

##
## Setzen von Variablen
##

LOG='/var/log/borg/backup.log'
export BACKUP_USER='<username>'
export REPOSITORY_DIR='<repository-name>'

## Hinweis: Für die Verwendung mit einem Backup-Account muss
## '<storagebox-hostname>' in '<backup-hostname>' geändert werden.

export REPOSITORY="ssh://<storagebox-alias>/./backups/<repository-name>"
HEALTHCHECK_URL="https://hc-ping.com/<your-healthcheck-id>"  # <-- Ersetze durch deinen Healthchecks.io-URL

##
## Ausgabe in Logdatei schreiben
##

exec > >(tee -i ${LOG})
exec 2>&1

echo "###### Backup gestartet: $(date) ######"

##
## An dieser Stelle können verschiedene Aufgaben vor der
## Übertragung der Dateien ausgeführt werden, wie z.B.
##
## - Liste der installierten Software erstellen
## - Datenbank Dump erstellen
##

##
## Dateien ins Repository übertragen
## Gesichert werden hier beispielsweise die Ordner root, etc,
## var/www und home
## Außerdem finden Sie hier gleich noch eine Liste Excludes,
## die in kein Backup sollten und somit per default ausgeschlossen
## werden.
##

echo "Übertrage Dateien ..."
if borg create -v --stats                   \
    $REPOSITORY::'{now:%Y-%m-%d_%H:%M}'  \
    /home/<user>/docker/                \
    /home/<user>/dockerdata/            \
    --exclude /dev                       \
    --exclude /proc                      \
    --exclude /sys                       \
    --exclude /var/run                   \
    --exclude /run                       \
    --exclude /lost+found                \
    --exclude /mnt                       \
    --exclude /var/lib/lxcfs; then

    echo "Backup erfolgreich abgeschlossen."
    
    echo "Entferne alte Backups ..."
    if borg prune -v --list \
        --keep-within=30d \
        ssh://<storagebox-alias>/./backups/<repository-name>; then
        echo "Alte Backups erfolgreich entfernt."
    else
        echo "Fehler beim Entfernen alter Backups."
        exit 1
    fi

    curl -fsS --retry 3 $HEALTHCHECK_URL >/dev/null 2>&1
else
    echo "Backup fehlgeschlagen."
    exit 1
fi

echo "###### Backup beendet: $(date) ######"

Passe im Skript den Speicherpfad, die zu sichernden Ordner und den Healthchecks-Endpunkt an.

Als Nächstes muss der Cronjob eingerichtet werden:
Hierzu öffnen wir mit dem Befehl crontab -e den Cronjob Editor und fügen folgende Zeile am Ende der Datei hinzu:

0 3 * * * /usr/local/bin/backup.sh

Hier wird das Backup täglich um 03:00 durchgeführt.

Weiters wird die Ausführung des Scripts mittels eines healthcheck.io Endpoints überprüft. Dies ist wichtig um zu sehen, ob die Backups erfolgreich durchgeführt werden, da denke ich die Wenigsten um 03:00 vor dem PC sitzen werden und das Backup überwachen.

Um so einen Endpoint zu bekommen, muss man auf die healthcheck.io Website gehen und sich einen kostenlosen Account erstellen. (20 Endpoints sind gratis)
Hier dann einfach den Link des Endpoints kopieren und die Zeiten einstellen. Ich habe in meinem fall den Cronjob hinzugefügt, mit einer grace time vom 5 Stunden, damit er nicht mitten in der Nacht alarmiert.

Settings des Endpoints

Fazit

Die Einrichtung von BorgBackup in Kombination mit einer Hetzner Storagebox hat sich als äußerst effiziente und flexible Lösung für meine Backup-Strategie erwiesen. Obwohl der Prozess anfangs etwas Zeit und Recherche erfordert hat, insbesondere bei der Automatisierung und der Einrichtung von Healthchecks.io, war das Ergebnis die Mühe wert.

Mit diesem Setup kann ich sicherstellen, dass meine Serverdaten regelmäßig und zuverlässig gesichert werden – unabhängig davon, wo sich der Server oder ich selbst geografisch befinden. Dank der Integration mit Healthchecks.io erhalte ich Benachrichtigungen, falls ein Backup fehlschlägt.

Besonders beeindruckend finde ich die Vielseitigkeit der Hetzner Storagebox, die nicht nur zahlreiche Zugriffsprotokolle unterstützt, sondern auch Flexibilität bei der Speichergröße und hohe Ausfallsicherheit durch Snapshots bietet. Auch das Preis-Leistungs-Verhältnis überzeugt mich, da 1 TB Speicher für 3,20 € im Monat.

Für alle, die ein zuverlässiges und skalierbares Backup-System suchen, kann ich BorgBackup in Kombination mit einer Hetzner Storagebox wärmstens empfehlen.


Quellen

Installation und Konfiguration von BorgBackup
Ein Tutorial zur Installation und Konfiguration von BorgBackup, mit vielen zusätzlichen Hinweisen.