Skip to main content

backrest (restic repo GUI mit Autobackups + Luckycloud S3-Storage oder Hetzner StorageBox)

image.png

https://github.com/garethgeorge/backrest 

version: "3.2"
services:
  backrest:
    image: garethgeorge/backrest
    container_name: backrest
    hostname: backrest
    volumes:
      - data:/data
      - config:/config
      - cache:/cache
      - /var/lib/docker/volumes:/docker-var-lib
      - /data/compose:/docker-data-compose
      #- /MY-BACKUP-DATA:/userdata # [optional] mount local paths to backup here.
      #- /MY-REPOS:/repos # [optional] mount repos if using local storage, not necessary for remotes e.g. B2, S3, etc.
    environment:
      - BACKREST_DATA=/data # path for backrest data. restic binary and the database are placed here.
      - BACKREST_CONFIG=/config/config.json # path for the backrest config file.
      - XDG_CACHE_HOME=/cache # path for the restic cache which greatly improves performance.
      - TZ=Europe/Berlin # set the timezone for the container, used as the timezone for cron jobs.
    restart: unless-stopped
    ports:
      - 9898:9898

volumes:
  data:
  config:
  cache:

Konfiguration mit Luckycloud

In Luckyclouc einen S3 Speicher anlegen:

image.png

auf das grüne Schloss drücken, um die Zugangsdaten AWS_ACCESS_KEY_ID und AWS_SECRET_ACCESS_KEY zu erhalten:

image.png

die Zugangsdaten bei backrest als neues repo anlegen:

image.png

die repository url ist dann sowas wie

s3:https://<luckycloudserver>.luckycloud.de/<bucketname>

und ist zu finden im luckycloud portal:

image.png

als Plan dann zb folgendes:

image.png

oder /docker-var-lib als Path wenn man das Beispiel aus der docker-compose.yaml von oben nimmt

Konfiguration mit Hetzner Storage Box (SFTP)

  1. Unter Hetzner Robot SSH aktivieren:

    image.png



  2. Auf dem Server, auf dem Docker mit backrest als Container läuft, einen SSH-Key erzeugen, wenn noch nicht geschehen:
    ssh-keygen

     

  3. SSH Public Key an Storage Box SSH Port 23 übertragen (kann auch id_ed25519.pub heißen oä, wenn es kein rsa ist):
    cat ~/.ssh/id_rsa.pub | ssh -p23 uXXXXX@uXXXXX.your-storagebox.de install-ssh-key

  4. testweise nochmal mit der Storage Box über ssh verbinden, sollte nun ohne Bestätigung klappen:
    ssh -p 23 uXXXXX@uXXXXX.your-storagebox.de

    oder mit Angabe zum Private-Key

    ssh -i /root/.ssh/id_mein-admin_ed25519 -p 23 uXXXXX@uXXXXX.your-storagebox.de
  5. /home/<user>/.ssh/known_hosts und /home/<user>/.ssh/id_ed25519 (SSH Private Key) vom Docker Server in das Config Volume vom Backrest Container kopieren, sodass backrest Zugriff auf den PrivateKey und die known_hosts Datei hat:

    image.png


    oder als Bsp auf hz-02:

    image.png


  6. Neues Repository in backrest hinzufügen:

    image.png

    image.png

    Repository URL bei SFTP hinzufügen:
    sftp:user@host:/path/to/repo
    also zb 
    sftp:u12345@u12345.your-storagebox.de:ResticBackup/DockerServer

    Das Passwort für das Restic Backup kann man einfach mit klick auf Generate generieren lassen *udontsay.gif*

    Flags (sftp.args) hinzufügen:

    -o sftp.args="-i /config/ssh_keys/id_ed25519 -P 23 -o UserKnownHostsFile=/config/ssh_keys/known_hosts"

Falls es zu Problemen kommt, kann die SSH config angepasst werden, sodass man die SSH Flags weglassen kann:

Quelle: https://forum.restic.net/t/usability-issue-with-sftp-and-sftp-command/1170/2 

OBACHT 
Dieser "Trick" ist vollkommen sinnlos, weil man einen ssh-key und eine ssh-config in den flüchtigen ordner /root/.ssh im backrest-container legt. Nach jedem Neustart des Containers sind die Dateien also weg. Besser bei oben bleiben, wo man Flags hinzufügt und den SSH-Key sowie die known_hosts in das backrest_config Docker-Volume legt

docker exec -it backrest /bin/bash
nano /root/.ssh/config

.ssh/config:

Host storagebox
    Hostname u12345.your-storagebox.de
    Port 23
    User u12345
    IdentityFile /root/.ssh/id_admin_ed25519
    ODER
    IdentityFile /config/ssh_keys/id_admin_ed25519
    JE NACHDEM WO DER SSH-KEY LIEGT!

wenn dannn noch WARNING UNPROTECTED PRIVATE KEY FILE Meldung kommt, einfach

chown 600 /config/ssh_keys/id_admin_ed25519

danach sollte

ssh storagebox

funktionieren und damit auch bei Repository URI:

sftp:storagebox:MEIN-PROJEKT/restic-backup

image.png

restic unlock

https://github.com/restic/restic/issues/1450 

Falls es zu folgender Fehlermeldung bei einem Backup kommt, kann man das Repository mit restic unlock wieder entsperren:

unable to create lock in backend: repository is already locked by PID 3604 on HOSTNAME by HOSTNAME\User (UID 0, GID 0)
lock was created at 2025-08-17 22:58:46 (725h49m33.96593014s ago)
storage ID 42...bce
the `unlock` command can be used to remove stale locks

Lösung:

In die Shell des Backrest Docker-Container gehen und folgende Befehle eingeben:

restic -r /path/to/repository/external/drive unlock
# release previous lock
restic -r /path/to/repository/external/drive check
# Return some "not referenced in any index"
restic -r /path/to/repository/external/drive rebuild-index
# rebuild index 
restic -r /path/to/repository/external/drive check
# return a few  "not referenced in any index"
restic -r /path/to/repository/external/drive prune
# remove those few incomplete packs
restic -r /path/to/repository/external/drive check
# no errors were found

Wobei aus dem Hetzner-Storagebox SFTP Beispiel oben als Repository mit angegebenem SSH-Key folgende Zeile resultiert:

restic -r sftp:u12345@u12345.your-storagebox.de:ResticBackup/DockerServer -o sftp.args="-i /config/ssh_keys/i
d_ed25519 -p 23 -o UserKnownHostsFile=/config/ssh_keys/known_hosts" check

Danach das repository-Passwort eingeben:

image.png