Borgmatic mit Hetzner Storagebox

Irgendwie hab ich mein gesamtes Mail Archiv beim Anpassen eines Volumes gelöscht 🙈 Also schnell ins Backup geschaut und … naja das war leider korrupt 😱 Kein Backup kein Mitleid, die Mails waren weg. Daher hab ich mal wieder von Vorne begonnen und mein Backup System neuaufgesetzt. Diesmal mit Borgmatic und der vorhanden Hetzner Storagebox.

Hetzner Storagebox

Die Storagebox BX1 von Hetzner mit 1TB Speicherplatz reicht für mich für 3,81€ im Monat vollkommen aus und ist preislich top: https://www.hetzner.com/storage/storage-box/

Hetzner Storagebox Einstellungen

Borgmatic einrichten

Das Backup wird mit einer Passphrase verschlüsselt die in eine .env Datei geschrieben wird:

echo "BORG_PASSPHRASE=meine-geheime-passphrase" > .env

Speicher die Passphrase am besten auch in deinem Passwortmanager oder an einem sicheren Ort. Denn ohne lässt sich das Backup später nicht mehr einlesen.

Ich hab Borgmatic mit docker compose installiert:

# docker-compose.yml

services:
  borgmatic:
    image: ghcr.io/borgmatic-collective/borgmatic
    volumes:
      - /opt:/mnt/source/opt:ro # Sichert /opt
      - /mnt/v1:/mnt/source/mnt/v1:ro # Sichert /mnt/v1
      - ./data/borgmatic.d:/etc/borgmatic.d/
      - ./data/config:/root/.config/borg
      - ./data/ssh:/root/.ssh
      - ./data/cache:/root/.cache/borg
    environment:
      - TZ=Europe/Berlin
      - BORG_PASSPHRASE=${BORG_PASSPHRASE}
      - BACKUP_CRON=20 * * * * # 20 Minuten nach jeder vollen Stunde
    restart: always

Durch BACKUP_CRON=20 * * * * wird Borgmatic jede Stunde um 20 Minuten nach der vollen Stunde ausgeführt. Bei verschiedenen Backups verwende ich unterschiedliche Startzeiten, um ggf den Traffic etwas zu verteilen.

Und anschließen mit docker compose up -d den Container gestartet.

SSH Key

Erstmal brauchen wir einen SSH Key mit dem Borgmatic später auf die Storagebox zugreifen kann. Dafür öffnen wir eine Shell in dem Borgmatic Container:

docker compose exec borgmatic sh

In der Shell erstellen wir dann einen neuen SSH Key:

ssh-keygen

und den Key ohne Passphrase erstellen.

Jetzt muss der Key in der Storagebox hinterlegt werden:

ssh-copy-id -p23 -s u12345@u12345.your-storagebox.de

Danach einfach mal mit ssh -p23 u12345@u12345.your-storagebox.de testen und direkt nutzten, um mit mkdir backups einen Ordner für die Backups zu erstellen.

Borg Repository initialisieren

borg init --encryption repokey ssh://u12345@u12345.your-storagebox.de:23/./backups/server-am-meer

Anschließend den Key nochmal sichern:

borg key export ssh://u12345@u12345.your-storagebox.de:23/./backups/server-am-meer

Jetzt kannst du die Shell von Borgmatic wieder mit exit verlassen.

Borgmatic konfigurieren

Die Konfiguration von Borgmatic ist sehr einfach und besteht aus einer config.yaml Datei:

source_directories:
    - /mnt/source
repositories:
    - path: ssh://u12345@u12345.your-storagebox.de:23/./backups/server-am-meer
one_file_system: false

archive_name_format: 'backup-{now}'

keep_hourly: 2
keep_daily: 7
keep_weekly: 4
keep_monthly: 12
keep_yearly: 10

retries: 3
retry_wait: 10

checks:
  - name: repository
    frequency: 2 weeks
  - name: archives
    frequency: always
  - name: extract
    frequency: 2 weeks
  - name: data
    frequency: 1 month

before_everything:
    - echo "Starting a backup job."
after_everything:
    - echo "Backup created."
on_error:
    - echo "Error while creating a backup."

uptime_kuma:
    push_url: https://kuma-url-ohne-den-teil-hinter-dem-fragezeichen
    states:
        - start
        - finish
        - fail