Restic einrichten

Last change on 2024-11-29 • Created on 2024-11-29 • ID: ST-8D7B9

Auf Grund der Skalierbarkeit und der hohen Verfügbarkeit eignen sich Buckets besonders gut zum Speichern von Backups.

Restic ist ein Open-Source-Programm für schnelle und sichere Backups. Es verschlüsselt die Backups, sodass nur du darauf zugreifen kannst. Weitere Information über Restic findest du hier:


  1. Erstelle deine S3-Zugangsdaten

    Für eine Schritt-für-Schritt-Anleitung, siehe das Getting Started "S3-Zugangsdaten hinzufügen".

    Denk daran, die Zugangsdaten nach dem Erstellen an einem sicheren Ort zu speichern. Der Secret Key kann weder über die Hetzner Console noch über die API erneut angezeigt werden.


  1. Installiere Restic

    Wenn Restic auf deinem System noch nicht installiert ist, installiere es jetzt. Verwende dafür die offiziellen Schritte unter restic.readthedocs.io.


  1. Das Restic-Passwort erzeugen und speichern

    Mit apg (Advanced Password Generator) kannst du ein zufälliges Passwort generieren. Auf Debian-basierten Systemen kannst du es mit apt install apg installieren.

    apg -a 1 -m 32 -n 1 -M NCL

    Kopiere das Restic-Passwort aus dem Output und speichere es lokal ab.


  1. Umgebungsvariablen erstellen

    Ersetze die Werte mit deinen eigenen Daten.

    unset HISTFILE
    export AWS_DEFAULT_REGION="fsn1"
    export RESTIC_REPOSITORY="s3:fsn1.your-objectstorage.com/<your_bucket_name>"
    export AWS_ACCESS_KEY_ID="<your_access_key>"
    export AWS_SECRET_ACCESS_KEY="<your_secret_key>"
    export RESTIC_PASSWORD="<your_restic_password>"

  1. Das Restic-Repository initialisieren

    restic init

    Der Output sollte in etwa so aussehen:

    created restic backend <random_hash> at s3:fsn1.your-objectstorage.com/<your_bucket_name>

  1. Einen Backup erstellen

    Erstelle zunächst eine Test-Datei:

    echo "Content of test file." > ~/test.txt

    Erstelle nun ein Backup von dieser Datei:

    restic backup ~/test.txt

    Das Backup sollte direkt in deinem Bucket erscheinen.


  1. Auf Fehler prüfen

    restic check

  1. Automatische Backups einrichten

    Es gibt zwei Methoden, um Backups automatisiert zu erstellen: resticprofile und Cron-Jobs.

    • resticprofile

      Installiere "resticprofile" wie in der offiziellen Dokumentation angegeben. Erstelle die Datei profiles.yaml und füge folgenden Inhalt ein:

      ---
      # yaml-language-server: $schema=https://creativeprojects.github.io/resticprofile/jsonschema/config-1.json
      
      version: '1'
      
      default:
        repository: 's3:https://fsn1.your-objectstorage.com/<your_bucket_name>'
        initialize: true
        env:
          AWS_DEFAULT_REGION: fsn1
          AWS_ACCESS_KEY_ID: <your_access_key>
          AWS_SECRET_ACCESS_KEY: <your_secret_key>
          RESTIC_PASSWORD: <your_restic_password>
        backup:
          source:
            - ~/test.txt
          #  - /etc
          #  - /home
          #  - /root
          #exclude:
          #  - .ansible/
          #  - .cache/
          schedule-permission: system
          schedule-log: "profile-backup.log"
          # Jeden Tag um Mitternacht
          schedule: "*-*-* 00:00:00"
        forget:
          # Nur die letzten 10 Snapshots behalten
          keep-last: 10
          prune: true
          schedule-permission: system
          schedule-log: "profile-forget.log"
          # Jeden Tab um halb eins morgens
          schedule: "*-*-* 00:30:00"

      Teste nun das Erstellen eines Backups:

      resticprofile --dry-run backup

      Wenn im Output "finished 'backup'" steht, kannst du nun das automatische Erstellen deiner Backups starten:

      resticprofile schedule

      Status prüfen:

      systemctl status resticprofile-backup@profile-default.timer 
      systemctl status resticprofile-forget@profile-default.service

    • Cron jobs

      Erstelle ein Skript mit den Informationen aus Schritt 4:

    #!/bin/bash
    
    # Umgebungsvariablen erstellen
    unset HISTFILE
    export AWS_DEFAULT_REGION="fsn1"
    export RESTIC_REPOSITORY="s3:fsn1.your-objectstorage.com/<your_bucket_name>"
    export AWS_ACCESS_KEY_ID="<your_access_key>"
    export AWS_SECRET_ACCESS_KEY="<your_secret_key>"
    export RESTIC_PASSWORD="<your_restic_password>"
    
    restic backup ~/test.txt
    
    # Alte Snapshots löschen, siehe:
    # https://restic.readthedocs.io/en/stable/060_forget.html#removing-snapshots-according-to-a-policy
    restic forget --keep-last 10 --prune
    restic check

    Mach das Skript ausführbar:

    chmod +x ~/backup.sh
    chmod 700 ~/backup.sh

    Führe das Skript manuell aus, um zu testen, ob es funktioniert:

    ./backup.sh

    Wenn der Snapshot im Bucket erscheint, kann der Cron-Job eingerichtet werden:

    crontab -e

    Füge diese Zeile ein:

    0 0 * * * $HOME/backup.sh

    Mit diesem Cron-Job wird das Skript täglich um Mitternacht ausgeführt.

    * * * * * /path
    │ │ │ │ └───────────── Wochentag (0 - 6)
    │ │ │ └───────────── Monat (1 - 12)
    │ │ └───────────── Tag des Monats (1 - 31)
    │ └───────────── Stunde (0 - 23)
    └───────────── Minute (0 - 59)

Von deinen Daten sollten nun automatisch Backups erstellt werden.