← All articles
INFRASTRUCTURE Self-Hosting Duplicati: Automated Encrypted Backups ... 2026-02-09 · duplicati · backup · encryption

Self-Hosting Duplicati: Automated Encrypted Backups with a Web UI

Infrastructure 2026-02-09 duplicati backup encryption disaster-recovery storage

BorgBackup and Restic are the darlings of the self-hosting community, and for good reason — they're fast, efficient, and scriptable. But they're also CLI-only tools that require writing bash scripts, cron jobs, and monitoring wrappers. If you want something your non-terminal-using household member can configure, or if you just prefer a web UI over editing cron files, Duplicati fills that niche.

Duplicati is a backup tool with a full web interface. You configure backup jobs through a browser, it encrypts everything with AES-256 before uploading, and it supports more cloud storage backends than any other open-source backup tool. It's not as fast as Restic or as space-efficient as Borg, but it's dramatically easier to set up and manage.

Why Duplicati?

The trade-offs: Duplicati is written in C#/.NET, uses more CPU during backup than Borg/Restic, and its deduplication is less efficient. It also has occasional stability issues with very large backup sets (10+ TB). For homelabs with a few TB of data, it works well.

SOURCE DATA Docker volumes Photos & documents Config files Duplicati Deduplicate & compress AES-256 encrypt Schedule & monitor Web UI on :8200 BACKENDS Backblaze B2 Amazon S3 Google Drive SFTP / Local / WebDAV encrypted You (Web UI)

Docker Deployment

# docker-compose.yml
services:
  duplicati:
    image: lscr.io/linuxserver/duplicati:latest
    ports:
      - "8200:8200"
    volumes:
      - duplicati_config:/config
      - /home:/source/home:ro
      - /var/lib/docker/volumes:/source/docker-volumes:ro
      - /etc:/source/etc:ro
      - /mnt/backup:/backups  # local backup target
    environment:
      - PUID=0    # Run as root to read all files
      - PGID=0
      - TZ=America/Los_Angeles
    restart: unless-stopped

volumes:
  duplicati_config:
docker compose up -d

The web interface is at http://your-server:8200. No login by default — set a password immediately in Settings > Access > Interface password.

Note on PUID/PGID: Running as root (0/0) lets Duplicati read all files on the system. If you're only backing up your own user files, use your regular UID/GID instead.

Configuring Your First Backup Job

The setup wizard walks you through everything:

1. General settings

2. Choose a backend

Popular choices for self-hosters:

Backblaze B2 (cheapest cloud storage):

Local / NAS:

SFTP (to another server):

3. Source data

Select the directories mounted as volumes in your Docker Compose:

Add filters to exclude unnecessary files:

# Exclude patterns
*.tmp
*.cache
node_modules/
.cache/
Thumbs.db

4. Schedule

5. Retention

Configure how long to keep backups:

This gives you granular recent recovery with long-term monthly snapshots.

Restoring Files

From the web UI

  1. Go to Restore
  2. Select the backup job
  3. Browse the file tree to find what you need
  4. Select files or folders to restore
  5. Choose a restore location (original path or custom)

Direct restore (disaster recovery)

If your Duplicati server is gone, you can restore from any machine with Duplicati installed:

  1. Install Duplicati on a new machine
  2. Add a new backup job pointing to the same backend
  3. Go to Restore — Duplicati reads the encrypted backup data
  4. Enter your encryption passphrase
  5. Browse and restore

This is a major advantage over Borg/Restic for disaster recovery — Duplicati's web UI makes it accessible to anyone, not just command-line users.

Advanced Configuration

Email notifications

In Settings > Options, add:

--send-mail-url=smtp://smtp.gmail.com:587/?starttls=when-available
[email protected]
[email protected]
--send-mail-username=your-email
--send-mail-password=your-app-password
--send-mail-subject=Duplicati %OPERATIONNAME% - %PARSEDRESULT%
--send-mail-level=Warning,Error,Fatal

Set --send-mail-level to All if you want confirmation of successful backups too.

Bandwidth throttling

If backups saturate your upload:

--throttle-upload=5mb
--throttle-download=10mb

Pre/post backup scripts

Run commands before or after a backup:

--run-script-before=/scripts/pre-backup.sh
--run-script-after=/scripts/post-backup.sh

Use pre-backup scripts to dump databases before the backup runs:

#!/bin/bash
# pre-backup.sh
docker exec postgres pg_dumpall -U postgres > /source/home/db-dumps/postgres.sql
docker exec mariadb mariadb-dump --all-databases -u root -p > /source/home/db-dumps/mariadb.sql

Duplicati vs BorgBackup vs Restic

Feature Duplicati BorgBackup Restic
Interface Web UI CLI only CLI only
Encryption AES-256 AES-256 AES-256
Deduplication Block-level Content-defined Content-defined
Cloud backends 20+ native SSH only S3, B2, SFTP, rclone
Speed Moderate Fast Fast
Storage efficiency Good Excellent Very good
Setup difficulty Easy Medium Medium
Monitoring Built-in UI Needs wrapper Needs wrapper
Email alerts Built-in Script it yourself Script it yourself
OS support Win, Mac, Linux Linux, Mac Win, Mac, Linux

When to choose Duplicati

When to choose Borg or Restic

Common Issues

Slow first backup: The initial backup transfers everything. Subsequent runs only transfer changes and are much faster. Be patient with the first one.

Database lock errors: Duplicati uses a local SQLite database to track backup state. If a backup is interrupted, the database can get locked. Fix with: Database > Repair.

Memory usage on large backups: For backup sets over 5 TB, Duplicati's memory usage can climb. Set --blocksize=1mb (up from the default 100KB) to reduce the number of blocks tracked.

The Bottom Line

Duplicati trades some performance and storage efficiency for accessibility. It's the backup tool you can set up for your family's NAS and know they can restore files when you're not around. The web UI, built-in scheduling, email notifications, and broad cloud storage support make it the most user-friendly self-hosted backup solution available. If you've been putting off setting up backups because you don't want to write bash scripts and cron jobs, Duplicati removes that excuse.