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

BackendProtokoll
Amazon S3S3 API
Backblaze B2B2 API
Google DriveOAuth
Microsoft OneDriveOAuth
DropboxOAuth
SFTP/SSHSFTP
WebDAVHTTP/HTTPS
FTPFTP/FTPS
OpenStack SwiftSwift API
LocalDateisystem

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

MethodeBeschreibung
AES-256Standard, empfohlen
GPGGNU Privacy Guard
NoneKeine 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/

Performance-Optimierung

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

BackendAnwendungsfall
S3/B2Kosteneffizient für große Daten
SFTPEigener Backup-Server
Google DrivePrivat/kleine Backups
LocalNAS/externe Festplatte
OptionEmpfehlung
VerschlüsselungAES-256, immer aktivieren
Retention7D, 4W, 12M
KompressionStandard (zip)
Block-Größe100KB (Standard)
BefehlFunktion
backupBackup erstellen
restoreWiederherstellen
verifyBackup prüfen
repairDatenbank reparieren
listDateien 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.