Externes Backup eines Uberspace

Diese Webseite wird bei Uberspace gehostet - eine Zusammenfassung, wie ich meine Daten extern sichere.
   

Die Webseite ist umgezogen, alles funktioniert und man ist happy, dass endlich alles erledigt ist... moment, wie sichere ich eigentlich meine Daten?

Ungefähr das war mein Gedankengang, nachdem ich diese Webseite zu Uberspace umgezogen habe. Uberspace selbst erstellt zwar Backups eurer Daten, darauf sollte man sich aber nie komplett verlassen, sondern die Daten auch extern sichern!

Wohin und womit?

Ich habe mich für die relativ einfache und günstige Variante entschieden: eine Storage Box von Hetzner... die Sicherung selbst möchte ich mit Restic durchführen, dabei aber so wenig Arbeit wie möglich haben.

Voraussetzungen

Nachdem unsere Storage Box geliefert wurde, aktivieren wir den SSH-Support für die Box und erstellen ein neues Passwort - gut merken (oder notieren)!

Nun installieren wir auf unserem Uberspace das Restic-Binary. Bitte achtet darauf, dass ihr die aktuellste Version von Restic installiert - im Code-Beispiel ist die neueste Version zum Zeitpunkt dieses Artikels verlinkt (0.17.3). Die neueste Version findet ihr immer hier.

wget https://github.com/restic/restic/releases/download/v0.17.3/restic_0.17.3_linux_amd64.bz2
bzip2 -d restic_0.17.3_linux_amd64.bz2
mv restic_0.17.3_linux_amd64 ~/bin/restic
chmod 700 ~/bin/restic

Nachdem das erledigt ist, installieren wir unseren SSH-Key auf unserer neuen Storage Box. Bitte denkt daran, eure Daten hier zu hinterlegen (uXXXXXX).

cat .ssh/id_rsa.pub | ssh -p23 uXXXXXX@uXXXXXX.your-storagebox.de install-ssh-key

Zur Vereinfachung der Sicherung habe ich mich dazu entschieden, resticprofile zu nutzen. Das installieren wir auch noch auf unserem Uberspace.

curl -sfL https://raw.githubusercontent.com/creativeprojects/resticprofile/master/install.sh | sh

Die Vorbereitungen sind nun abgeschlossen und wir können uns endlich der eigentlichen Datensicherung widmen.

Die Konfigurationsdatei

Wir erstellen uns eine Konfigurationsdatei (profiles.yaml), die wir dann an mit resticprofile nutzen. Meine Konfiguration sieht so aus:

---
# yaml-language-server: $schema=https://creativeprojects.github.io/resticprofile/jsonschema/config-1.json

version: "1"
global:
  scheduler: crond
default:
  # Daten unserer Storage Box
  repository: sftp://uXXXXXX@uXXXXXX.your-storagebox.de:23
  initialize: true
  env:
    # Verschlüsselungspasswort für unser Backup
    RESTIC_PASSWORD: PASSWORD
  backup:
    # Zu sicherende Dateien
    source:
      - /var/www/virtual/pratt/html
    exclude-file: /home/pratt/.restic-excludes.txt
    schedule-log: /home/pratt/logs/profile-backup.log
    schedule: "* *-*-* 01:00:00"
  forget:
    keep-last: 14
    prune: "true"
    schedule-permission: user
    schedule-log: /home/pratt/logs/profile-forget.log
    schedule: "* *-*-* 01:45:00"

Einige Optionen habe ich markiert, eine ausführliche Dokumentation über alle Optionen findet ihr hier.

Wichtig: achtet bei der Source darauf, dass ihr nicht den Symlink /home/pratt/html hinterlegt, sondern den eigentlichen Pfad zu eurem DocumentRoot /var/www/virtual/pratt/html. Restic folgt keinen Symlinks.

Wir sind nun bereit, unser Backup zu initialisieren und unser Schedule anzulegen:

resticprofile --dry-run backup
2024/12/10 16:54:03 using configuration file: profiles.yaml
2024/12/10 16:54:03 profile 'default': initializing repository (if not existing)
2024/12/10 16:54:03 dry-run: /home/pratt/bin/restic init --repo=sftp://uXXXXXX@uXXXXXX.your-storagebox.de:23
2024/12/10 16:54:03 profile 'default': starting 'backup'
2024/12/10 16:54:03 dry-run: /home/pratt/bin/restic backup --exclude-file=/home/pratt/.restic-excludes.txt --repo=sftp://uXXXXXX@uXXXXXX.your-storagebox.de:23 /var/www/virtual/pratt/html
2024/12/10 16:54:03 profile 'default': finished 'backup'

Wenn eure Ausgabe so oder so ähnlich aussieht, dann ist alles in Ordnung mit eurer Konfiguration. Wir können den Schedule und unser erstes Backup nun anlegen:

resticprofile schedule
resticprofile backup

Eventuell müsst ihr noch in eurer Crontab die PATH-Variable korrekt setzen. Hierzu einfach mit crontab -e die Crontab öffnen und ganz am Anfang der Datei

PATH=/home/pratt/bin:/usr/bin:/bin

einfügen... natürlich mit eurem Uberspace-Nutzernamen.

Das war's! Eure Daten werden jetzt verschlüsselt gesichert... :)