Duplicati Backup Setup: Encrypted, Automated Homelab Backups
Duplicati backs up your homelab data to local storage, a NAS, or cloud storage, encrypted and deduplicated. Here's how to set it up and what to actually back up.
This post contains affiliate links. If you buy through them, I earn a small commission at no extra cost to you.
Most homelab backup strategies fall into two categories: the ones that exist and the ones people plan to set up eventually. Duplicati makes having an actual strategy easy enough that “eventually” can be today.
It runs in Docker, has a web UI, supports encryption, handles deduplication (so only changed blocks are uploaded after the first run), and can send backups to almost anywhere — a local drive, a NAS via SMB/NFS, Backblaze B2, Amazon S3, SFTP, or a dozen other destinations.
What You’ll Back Up
The most important things to back up in a homelab:
- Docker compose files and configs — usually in
/opt/or/home/user/docker/ - Container data volumes — databases, app data, uploaded files
- Your
/etc/directory — system configuration - Vaultwarden database —
vw-data/db.sqlite3 - Anything irreplaceable — documents, photos stored locally
Things you don’t need to back up: the Docker images themselves (they pull from registries), the OS (reinstall from scratch and restore configs), large media libraries (re-downloadable).
Install
Create a directory:
mkdir -p /opt/duplicati
docker-compose.yml:
version: "3.8"
services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
container_name: duplicati
restart: unless-stopped
environment:
- PUID=0
- PGID=0
- TZ=America/Chicago
volumes:
- ./config:/config
- /:/source:ro
ports:
- "8200:8200"
Note: PUID=0 and PGID=0 runs as root, which gives Duplicati read access to your entire filesystem. This is needed to back up Docker volumes and other system paths. The volume is mounted read-only (ro) so Duplicati can read but not modify your data.
Set your timezone in the TZ variable.
Start it:
docker compose up -d
Access at http://your-server-ip:8200.
Create Your First Backup Job
From the Duplicati web UI, click Add backup.
Step 1: General
- Name: something descriptive like “Homelab Docker Configs”
- Encryption: AES-256 is the default. Set a strong passphrase and store it somewhere safe — if you lose this, your backups are unrecoverable.
Step 2: Backup Destination
Choose where your backups go.
Local folder or drive — useful for a NAS or external drive:
- Type: Local folder or drive
- Path:
/source/mnt/nas/backups/duplicati(adjust to where your NAS is mounted inside the container)
Backblaze B2 — good off-site option, costs about $0.006/GB/month:
- Type: B2 Cloud Storage
- Account ID and Application Key from Backblaze console
- Bucket name
SFTP — if you have another server or VPS:
- Type: SFTP (SSH File Transfer Protocol)
- Server: your remote server address
- Port: 22
- Credentials: username + SSH key or password
For a real backup strategy, use both a local destination (fast recovery) and an off-site destination (survives physical disaster).
Step 3: Source Data
Click “Add path” and add what you want to back up.
Inside the container, your host filesystem is mounted at /source. So:
/source/opt/covers everything in/opt/on the host/source/home/covers home directories/source/etc/covers system config
Recommended source paths:
/source/opt— Docker compose files and configs/source/home/YOUR_USER— home directory/source/var/lib/docker/volumes— Docker named volumes (container data)
Exclude filters to add:
*.log— log files change constantly and rarely need backupnode_modules— package directories (re-installable)*/cache/*— application caches*/tmp/*— temporary files
Step 4: Schedule
Set the backup to run daily. Recommended: 2-4am when the system is least active.
Duplicati uses deduplication — after the first full backup, only changed blocks are uploaded. Subsequent backups are fast.
Step 5: Options
Key settings to configure:
- Remote volume size: 50MB is a good default for most destinations
- Backup retention: “Keep 1 backup per day for 7 days, 1 per week for 4 weeks, 1 per month for 12 months” — gives you a good history without unlimited growth
- Upload throttle: if backing up to a cloud service, limit upload speed so it doesn’t saturate your connection during the first backup
Testing Your Backup
After the first backup completes, test the restore. This is non-optional.
- Go to Restore in the Duplicati UI
- Select your backup job
- Choose a file you can verify (a config file, a text file)
- Restore it to a different path and compare to the original
A backup you’ve never tested is a backup you don’t actually have.
Setting Up Email Notifications
In Duplicati settings (the gear icon in the top right):
- Go to Settings > Notification options
- Configure your SMTP server to get emailed when backups succeed or fail
You want to know when a backup fails. Duplicati’s notification emails include the number of files backed up, the backup duration, and any errors.
Monitoring Backup Health
Combine Duplicati with Uptime Kuma’s push monitor for backup verification:
- Add a push monitor in Uptime Kuma with a heartbeat interval slightly longer than your backup schedule (e.g., 25 hours for a daily backup)
- Add the push URL as a Duplicati “run script after” option (in backup job advanced settings):
--run-script-after=curl -fsS "YOUR_UPTIME_KUMA_PUSH_URL"
If the backup job fails or doesn’t run, the push URL doesn’t get called, and Uptime Kuma alerts you.
Off-Site Backup Storage
For a physical off-site option, a portable external SSD that you rotate between home and another location (office, family member’s house) gives you genuine off-site protection for less than a cloud subscription. Pair it with Duplicati’s local destination.
The 3-2-1 Rule
A useful backup framework: 3 copies of your data, on 2 different media, with 1 off-site.
- Copy 1: Live data on your server
- Copy 2: Local backup to NAS or external drive
- Copy 3: Off-site backup to cloud or a rotated drive
Duplicati can run multiple backup jobs to multiple destinations. Set one up for local and one for cloud, and you’re following the 3-2-1 rule without additional complexity.