BorgBackup auf Storagebox

Moin Leute.
Ich steh mal so richtig aufm Schlauch.
Folgendes ist mein Problem.
Ich möchte meinen Raspi 4 mit Docker, Vault, NGINX etc in meine StorageBox bei Hetzner backupen. Borgbackup bietet sich ja eigentlich dafür.
Mein Problem ist ich wollte das jetzt einrichten anhand der Hetzner Docs.
Den SSH Key hab wie beschreiben in „normal public“ und RFC4715 in den auhtorized_keys drin. Das hat alles sehr gut funktioniert.
Der erste Punkt den ich ich nicht verstehe ist der Bereich ab Punkt 2.2 in der Dokumentation zum Borgbackup.
Da es der einzige SSH Key ist sollte dies der Standart sein und den Bereich export überspringe ich zunächst bin gem. Anleitung Gedanklich noch auf der Storagebox. Bei der Initialisierung habe ich schon das Problem, dass ich mich frage ob hier in meinem Fall der Befehl auf dem Raspi ausgeführt wird oder auf der Storagbox.
Da ich hier eine SSH Verbindung aufbaue würde ich davon ausgehen, dass dies vom Raspi aus geschieht. ( mal abgesehen davon, dass ich ne Fehlermeldung auf der Storagebox bekomme wenn ich versuche den Befehl borg zu nutzen, da der Befehl nicht bekannt ist aber in der help mit aufgeführt ist…)
Frage wie muss der Befehl auf dem Raspi aussehen, dass hier auch der Speicherort des Privat Key für die SSH Verbindung angegeben ist?
Den muss ich bei der Verbindung über SSH ja mit „-i /xx/…/…“ auch angeben wenn ich mich ohne Passwort anmelden möchte.
Vielleicht kann mir ja jemand ein paar Tips aus eigener Erfahrung geben wie ich das Backup zum laufen bekomme. Später natürlich auf Skriptbasis automatisiert.
Schon mal herzlichen Dank im Vorraus.

Moin, ich würde dir empfehlen dir mal Borgmatic anzuschauen.
https://torsion.org/borgmatic/

Das ist ein CLI-Tool, das im Hintergrund auch nur Borg benutzt, aber die Nutzung deutlich vereinfacht. Da musst du dir deine borg-Befehle nicht selbst zusammenbauen, sondern konfigurierst alles einmal in einer YAML-Datei. Da drin ist dann alles festgehalten wie SSH-Ziel, zu nutzender SSH-Key, die Verzeichnisse die ins Backup sollen, etc.
Um das zu nutzen brauchst du am Ende nur noch den Befehl „borgmatic“ und er macht das Backup wie in der YAML beschrieben. Läuft bei mir schon seit langer Zeit täglich auf mehreren Systemen.

2 Likes

Danke für die Info das werde ich mal durch arbeiten. Dort sind mehr Schritte erklärt als in den Hetzner DOCS und wie beschrieben wahrscheinlich auch gleich einfacher zu händeln.

Ich habe ziemlich genau das selbe eingerichtet, was du grade vorhast.

Wichtig ist, dass du von deinem Raspi eine ssh Verbindung zu deiner Storagebox aufbauen kannst.

Wenn das klappt müsstest du auch borg bzw. borgmatic nutzen können.

Bei mir sieht die borgmatic config wie folgt aus:
location:
    source_directories:
        - /home
        - /etc
        - /var/www/

    repositories:
        - path: "ssh://u123456-sub1@storage-box/./backup"
          label: hetzner-storagebox

    exclude_patterns:
        - '/home/*/.cache/*'

storage:
    encryption_passphrase: "XXXXXXXXX"
retention:
    keep_daily: 7
    keep_weekly: 4
    keep_monthly: 6

consistency:
    checks:
        - name: repository
        - name: archives
          frequency: 2 weeks

hooks:
    before_backup:
        - /root/borgmatic-backup/before-backup.sh

    after_backup:
        - curl --silent --output /dev/null https://status.STATUSDOMAIN?status=up
    on_error:
        - curl --silent --output /dev/null https://status.STAUSDOMAINstatus=down&msg=error


    mysql_databases:
        - name: all
Ich habe folgende Einstellungen in /root/.ssh/config
Host storage-box
        HostName u123456-sub1.your-storagebox.de
        User u123456-sub1
        IdentityFile ~/.ssh/hetzner-backup #Pfad zum Privatekey, dessen Public Key in der Storagebox beim entsprechenden Subuser hinterlegt ist.
        Port 23
        AddressFamily inet

Man könnte natürlich die Einstellungen in der .ssh/config auch direkt in der borgmatic.yaml hinterlegen, jedoch war es für mich so einfacher.

Vielleicht hilft dir dieses Beispiel bei der Konfiguration deines Backups. Viel Erfolg!

1 Like

Ja vielen Dank das hilft sehr da ich meine Konfig dann ja damit vergleichen und eventuelle Fehler sich schneller identifizieren lassen. Herzlichen Dank

1 Like

Ich danke nochmal für die Erklärungen. Die Idee mit der SSH-config hab ich auch mitumgesetzt was ein echter vortail ist wenn man mal kurz „rübergehen“ und sich auf der Storagebox was ansehen oder abändern will. Borg wollte die Daten trotzdem irgendwie nicht nutzen und verlange das Passwort beim Verbindungsaufbau, weshalb ich diese in die Borgmatic YAML mit aufgenommen habe. Mit in der Config läuft es jetzt ohne Eingabe vom PW und mit public key.
Es hat bei mir zwar etwas gedauert aber ich bin nun an dem Punkt dass ich eine validierte YAML Datei habe.
Anscheinend hat sich in der Syntax auch einiges getan, weshalb ich beim Lesen häufig auf die ältere Syntax Version gestoßen bin.
Den Bereich hooks, prefix etc wird es in zukünftigen Versionen nicht mehr geben. was mir auch der Befehl
borgmatig config validate
zurück liefert. Die einzelnen Abschnitte habe ich jetzt einfach untereinander wie in der example Config reingeschrieben.

source_directories:
   - /

repositories:
   - path: ssh://uXXXXXX@uXXXXXX.your-storagebox.de/./backup
     label: backup

exclude_caches: true

retries: 3
retry_wait: 30

ssh_command: ssh -i /home/pi/.ssh/backupbox -p 23
relocated_repo_access_is_ok: true
archive_name_format: '{hostname}-{now:%Y-%m-%d_%H-%M}'
encryption_passphrase: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

keep_daily: 7
keep_weekly: 2
keep_monthly: 1

check_last: 3

before_backup:
   - /etc/borgmatic/dockerstop.sh
after_backup:
   - /etc/borgmatic/dockerstart.sh
# Berechtigung
# umask: 0077

Ob der Bereich relocated_repo_access_is_ok wichtig ist kann ich derzeit nicht sagen sollte aber sich die IP der Hetzner Server sich ändern könnte dieser Part wichtig sein.
Zusätzlich habe ich zwei Skripte geschrieben die meine Docker Container stoppen damit die diese nicht korrumpiert werden beim Backup und anschließend wieder gestartet werden. Ob die Reihenfolge in der ich diese angegeben habe nachher wirklich einen Unterschied mach bezweifle ich zwar aber da könnte man ggf. noch nach bessern.
dockerstop.sh

#! /usr/bin/bash

docker stop 8xxxxxxxxxxxxx6
docker stop 5xxxxxxxxxxxxd
docker stop 5xxxxxxxxxxx0d
docker stop axxxxxxxxxxx7

dockerstart.sh

#! /usr/bin/bash

docker start axxxxxxxxxxx7
docker start 5xxxxxxxxxxx0d
docker start 5xxxxxxxxxxxxd
docker start 8xxxxxxxxxxxxx6

Den Bereich umask hab ich noch nicht genutzt mal sehen ob ich das für nötig halte später.
Mit borgmatic init -e repokey hab ich das backup schonmal initialisiert.
Der nächste Schritt den ich verfolge ist eine passenden Cronjob zu erstellen.
diese beiden Varianten sind mir bisher ins Auge gesprungen
15 23 * * * borgmatic -v 1 2>&1 | mail -s "Backup Report" admin@example.org

0 1 * * * root /usr/local/bin/borgmatic --log-file /var/log/borg/borgmatic.log --syslog-verbosity 2

aber bei beiden werde ich wohl meinen eigenen weg gehen. Die Mail Benachrichtgung finde ich interessant über mailutils jedoch ein Log reicht mir erstmal aber den Pfad wie in der zweiten variante muss man nach meiner Meinung nicht angeben für den Borgmatic befehl. Naja das ist jedenfalls die nächste Baustelle.