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/

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

| 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.