Duplicati ist eine Open-Source-Backup-Lösung mit Web-Interface. Sie unterstützt zahlreiche Cloud-Speicher und verschlüsselt Daten vor dem Upload.
Features
Übersicht
- AES-256 Verschlüsselung
- Inkrementelle Backups
- Kompression
- Web-Interface
- Zahlreiche Cloud-Backends
- Scheduler
- E-Mail-Benachrichtigungen
- Open Source
Unterstützte Backends
| Backend | Protokoll |
|---|
| Amazon S3 | S3 API |
| Backblaze B2 | B2 API |
| Google Drive | OAuth |
| Microsoft OneDrive | OAuth |
| Dropbox | OAuth |
| SFTP/SSH | SFTP |
| WebDAV | HTTP/HTTPS |
| FTP | FTP/FTPS |
| OpenStack Swift | Swift API |
| Local | Dateisystem |
Installation
Debian/Ubuntu
# Abhängigkeiten
apt install mono-complete gtk-sharp2
# Download
wget https://updates.duplicati.com/beta/duplicati_2.0.7.1-1_all.deb
# Installation
dpkg -i duplicati_2.0.7.1-1_all.deb
apt install -f
Als Systemd-Service
# /etc/systemd/system/duplicati.service
[Unit]
Description=Duplicati Backup Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/bin/duplicati-server --webservice-port=8200 --webservice-interface=any
Restart=always
[Install]
WantedBy=multi-user.target
systemctl enable duplicati
systemctl start duplicati
Docker
version: '3'
services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
container_name: duplicati
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/Berlin
volumes:
- ./config:/config
- /backup:/backups
- /source:/source:ro
ports:
- 8200:8200
restart: unless-stopped
Web-Interface
Zugriff
URL: http://server-ip:8200
Passwort setzen
Beim ersten Start:
Settings → Access to user interface → Set password
Nginx-Proxy
server {
listen 443 ssl;
server_name backup.example.de;
ssl_certificate /etc/letsencrypt/live/backup.example.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/backup.example.de/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8200;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Backup konfigurieren
Neues Backup erstellen
1. Add backup → Configure a new backup
2. General backup settings:
- Name: Server-Backup
- Encryption: AES-256
- Passphrase: sicheres_passwort
3. Backup destination wählen
4. Source data auswählen
5. Schedule festlegen
6. Options konfigurieren
Amazon S3 Backend
Backend: S3 Compatible
Server: s3.amazonaws.com
Bucket: mein-backup-bucket
Region: eu-central-1
Storage class: Standard
AWS Access ID: AKIAIOSFODNN7EXAMPLE
AWS Access Key: wJalrXUtnFEMI/K7MDENG...
Backblaze B2
Backend: B2 Cloud Storage
Bucket: mein-backup-bucket
Account ID: xxxxxxxxxxxx
Application Key: K000xxxxxxxxxxxxxxx
SFTP-Server
Backend: SFTP (SSH)
Server: backup.example.de
Port: 22
Path: /backup/duplicati
Username: backup
Password: passwort
# Oder SSH-Key verwenden
Kommandozeile
Backup starten
# Backup-Job ausführen
duplicati-cli backup \
"s3://bucket-name?aws-access-key-id=KEY&aws-secret-access-key=SECRET" \
/home /etc /var/www \
--passphrase="verschluesselung"
Wiederherstellen
duplicati-cli restore \
"s3://bucket-name" \
--passphrase="verschluesselung" \
--restore-path=/restore
Dateien auflisten
duplicati-cli list \
"s3://bucket-name" \
--passphrase="verschluesselung"
Backup verifizieren
duplicati-cli verify \
"s3://bucket-name" \
--passphrase="verschluesselung"
Filter und Ausschlüsse
Im Web-Interface
Source Data → Filters
Exclude:
- *.tmp
- *.log
- */.cache/
- */node_modules/
- */.git/
Kommandozeile
duplicati-cli backup ... \
--exclude="*.tmp" \
--exclude="*.log" \
--exclude="*/.cache/*" \
--exclude-regexp=".*\.bak$"
Typische Ausschlüsse
# Temporäre Dateien
*.tmp
*.temp
*.swp
# Logs
*.log
/var/log/*
# Cache
*/.cache/*
*/cache/*
# Entwicklung
*/node_modules/*
*/.git/*
*/__pycache__/*
*.pyc
# System
/proc/*
/sys/*
/dev/*
/run/*
Retention-Policy
Im Web-Interface
Options → Backup retention
Smart backup retention:
- Keep all backups younger than 7 days
- Keep one backup per day for 4 weeks
- Keep one backup per week for 4 months
- Keep one backup per month for 1 year
Kommandozeile
duplicati-cli backup ... \
--retention-policy="7D:1D,4W:1W,12M:1M"
Erklärung
7D:1D = 7 Tage lang: alle behalten
4W:1W = 4 Wochen: 1 pro Woche
12M:1M = 12 Monate: 1 pro Monat
Verschlüsselung
Optionen
| Methode | Beschreibung |
|---|
| AES-256 | Standard, empfohlen |
| GPG | GNU Privacy Guard |
| None | Keine Verschlüsselung |
AES-256 (Standard)
duplicati-cli backup ... \
--encryption-module=aes \
--passphrase="langes_sicheres_passwort"
GPG-Verschlüsselung
duplicati-cli backup ... \
--encryption-module=gpg \
--gpg-encryption-key="KEY_ID"
E-Mail-Benachrichtigungen
Konfiguration
Settings → Add advanced option
send-mail-url: smtp://smtp.example.de:587
send-mail-username: user@example.de
send-mail-password: passwort
send-mail-from: backup@example.de
send-mail-to: admin@example.de
send-mail-subject: Duplicati %PARSEDRESULT%
send-mail-level: Warning,Error,Fatal
Bei jedem Backup
--send-mail-level=Success,Warning,Error,Fatal
Nur bei Fehlern
--send-mail-level=Warning,Error,Fatal
Wiederherstellung
Über Web-Interface
1. Restore auswählen
2. Backup-Version wählen
3. Dateien/Ordner auswählen
4. Zielort festlegen:
- Original location
- Different location
5. Restore starten
Einzelne Dateien
duplicati-cli restore \
"s3://bucket" \
--passphrase="passwort" \
--include="/home/user/wichtig.txt" \
--restore-path=/tmp/restore
Bestimmte Version
duplicati-cli restore \
"s3://bucket" \
--passphrase="passwort" \
--version=5 \
--restore-path=/restore
Datenbank und Logs
Lokale Datenbank
~/.config/Duplicati/
├── XXXXXXXX.sqlite # Backup-Datenbank
├── control_dir/
└── Duplicati-server.sqlite
Datenbank reparieren
duplicati-cli repair \
"s3://bucket" \
--passphrase="passwort"
Datenbank neu aufbauen
duplicati-cli repair \
"s3://bucket" \
--passphrase="passwort" \
--rebuild-index
Logs
Settings → Log level → Profiling
Logs unter:
~/.config/Duplicati/log/
Block-Größe
--blocksize=100KB # Standard
--blocksize=1MB # Große Dateien
--blocksize=50KB # Viele kleine Dateien
Parallelität
--asynchronous-concurrent-upload-limit=4
--asynchronous-upload-limit=4
Kompression
--compression-module=zip # Standard
--compression-module=lz4 # Schneller
--no-compression # Deaktiviert
Troubleshooting
Backup fehlgeschlagen
# Verifizierung durchführen
duplicati-cli verify "backend-url" --passphrase="pw"
# Datenbank reparieren
duplicati-cli repair "backend-url" --passphrase="pw"
# Lücken füllen
duplicati-cli purge-broken-files "backend-url" --passphrase="pw"
Verbindungsprobleme
# Test-Verbindung
duplicati-cli test-backend "s3://bucket?params"
# Mit Debug
duplicati-cli backup ... --debug-output
Speicherplatz
# Alte Versionen löschen
duplicati-cli delete "backend-url" --passphrase="pw" --version=0-5
# Kompakte Datenbank
duplicati-cli compact "backend-url" --passphrase="pw"
API-Zugriff
REST API
# Status abfragen
curl http://localhost:8200/api/v1/serverstate
# Backup starten
curl -X POST http://localhost:8200/api/v1/backup/1/run
# Backup-Liste
curl http://localhost:8200/api/v1/backups
Zusammenfassung
| Backend | Anwendungsfall |
|---|
| S3/B2 | Kosteneffizient für große Daten |
| SFTP | Eigener Backup-Server |
| Google Drive | Privat/kleine Backups |
| Local | NAS/externe Festplatte |
| Option | Empfehlung |
|---|
| Verschlüsselung | AES-256, immer aktivieren |
| Retention | 7D, 4W, 12M |
| Kompression | Standard (zip) |
| Block-Größe | 100KB (Standard) |
| Befehl | Funktion |
|---|
| backup | Backup erstellen |
| restore | Wiederherstellen |
| verify | Backup prüfen |
| repair | Datenbank reparieren |
| list | Dateien auflisten |
Fazit
Duplicati ist ideal für verschlüsselte Cloud-Backups. Das Web-Interface macht die Konfiguration einfach, die CLI ermöglicht Automatisierung. Die breite Backend-Unterstützung erlaubt flexible Backup-Strategien. Für sensible Daten ist die integrierte Verschlüsselung essentiell. Die Kombination aus Deduplizierung und Kompression hält den Speicherverbrauch gering.