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
- Passwort sicher speichern: Nicht im Script, sondern in
/root/.restic-password - Offsite Backup: Mindestens ein Backup an anderem Standort
- Regelmäßig testen: Restore üben!
- Excludes nutzen: Logs, Caches, node_modules nicht sichern
Fazit
Restic + Rclone + Cron = Sorgenfreie Backups. Einmal einrichten, automatisch laufen lassen. Und bitte: Restore testen!