Back to Blog
backup devops tutorial

Backups mit Restic & Rclone

Kein Backup, kein Mitleid. Hier mein Setup mit Restic und Rclone.

Warum Restic?

  • Verschlüsselung: Alles AES-256 verschlüsselt
  • Deduplikation: Nur Änderungen werden gespeichert
  • Schnell: Inkrementelle Backups in Sekunden
  • Flexibel: Lokal, S3, SFTP, Rclone...

Installation

apt install restic rclone

Restic Basics

Repository erstellen

# Lokal
restic init --repo /backup/restic

# S3
restic init --repo s3:s3.amazonaws.com/bucket-name

# SFTP
restic init --repo sftp:user@server:/backup/restic

Du wirst nach einem Passwort gefragt. Nicht vergessen!

Backup erstellen

restic -r /backup/restic backup /var/www /home/user/data

Snapshots anzeigen

restic -r /backup/restic snapshots

Wiederherstellen

# Alles
restic -r /backup/restic restore latest --target /restore

# Bestimmte Dateien
restic -r /backup/restic restore latest --target /restore --include "/var/www"

Rclone für Cloud-Storage

Rclone ist wie rsync für die Cloud.

Konfigurieren

rclone config

Interaktiver Wizard für:

  • Hetzner Storage Box
  • Backblaze B2
  • AWS S3
  • Google Cloud Storage
  • Und 40+ andere

Beispiel: Hetzner Storage Box

[hetzner]
type = sftp
host = uXXXXX.your-storagebox.de
user = uXXXXX
pass = verschlüsseltes-passwort

Rclone testen

rclone ls hetzner:backup/
rclone copy /local/path hetzner:backup/

Restic + Rclone

Das Beste: Restic kann Rclone als Backend nutzen!

# Repository auf Hetzner erstellen
restic -r rclone:hetzner:restic-backup init

# Backup
restic -r rclone:hetzner:restic-backup backup /var/www

Automatisierung

Backup-Script

/usr/local/bin/backup.sh:

#!/bin/bash
set -e

export RESTIC_REPOSITORY="rclone:hetzner:restic-backup"
export RESTIC_PASSWORD="dein-sicheres-passwort"

# Backup
restic backup \
  /var/www \
  /home/user \
  /etc \
  --exclude="*.log" \
  --exclude="node_modules" \
  --exclude=".cache"

# Alte Snapshots aufräumen
restic forget \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 6 \
  --prune

# Integrität prüfen (1x pro Woche reicht)
if [ "$(date +%u)" = "1" ]; then
  restic check
fi
chmod +x /usr/local/bin/backup.sh

Cron

crontab -e
# Backup täglich um 2 Uhr
0 2 * * * /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

Docker Volumes sichern

Für Docker-Projekte:

#!/bin/bash
PROJECT_DIR="/opt/myapp"

# Datenbank dumpen
docker compose -f $PROJECT_DIR/docker-compose.yml exec -T db \
  pg_dump -U postgres mydb > /backup/mydb.sql

# Backup inkl. Dump
restic -r rclone:hetzner:restic-backup backup \
  $PROJECT_DIR \
  /backup/mydb.sql

Retention Policy

Wie lange Backups behalten?

restic forget \
  --keep-daily 7 \      # Letzte 7 Tage
  --keep-weekly 4 \     # Letzte 4 Wochen
  --keep-monthly 12 \   # Letzte 12 Monate
  --keep-yearly 2 \     # Letzte 2 Jahre
  --prune               # Speicher freigeben

Kosten

Beispiel Hetzner Storage Box:

  • BX11: 100GB für 3,81€/Monat
  • BX21: 500GB für 8,46€/Monat

Mit Deduplikation reicht das lange.

Restore testen!

# Monatlich testen
restic -r rclone:hetzner:restic-backup restore latest \
  --target /tmp/restore-test \
  --include "/var/www"

# Prüfen ob Dateien okay sind
ls -la /tmp/restore-test/

Ein Backup das du nicht getestet hast ist kein Backup.

Monitoring

In dein Backup-Script:

# Am Ende
curl -fsS -m 10 --retry 5 https://hc-ping.com/your-uuid

Healthchecks.io pingt dich an wenn das Backup nicht läuft.

Tipps

  1. Passwort sicher speichern: Nicht im Script, sondern in /root/.restic-password
  2. Offsite Backup: Mindestens ein Backup an anderem Standort
  3. Regelmäßig testen: Restore üben!
  4. Excludes nutzen: Logs, Caches, node_modules nicht sichern

Fazit

Restic + Rclone + Cron = Sorgenfreie Backups. Einmal einrichten, automatisch laufen lassen. Und bitte: Restore testen!

Made with by Daniel Hiller

|