Skip to main content
Mini PC Lab logo
Mini PC LabMini PCs for Homelabs
tutorials

How to Set Up Duplicati on a Mini PC 2026

By Max · May 2, 2026 · Updated May 5, 2026

This article contains affiliate links. If you purchase through our links, we may earn a commission at no extra cost to you. We only recommend products we’ve thoroughly researched and verified.

How to set up Duplicati on a mini PC hero image

The 3-2-1 backup rule: 3 copies, 2 different media, 1 offsite. Duplicati handles the offsite copy — encrypted, deduplicated, and scheduled. This guide deploys Duplicati on a mini PC running Ubuntu Server, configures Backblaze B2 as the cloud destination, and sets up automated daily backups of your home server’s critical data.

What you need:

  • A mini PC running Ubuntu Server 24.04 LTS with Docker installed
  • A Backblaze account free, create at backblaze.com — B2 is pay-per-use storage
  • Approximately 30 minutes for initial setup

Step 1: Set Up Backblaze B2

Backblaze B2 is S3-compatible, costs $0.006/GB/month, and provides 10GB free. It’s the standard choice for home server off-site backups.

Create a B2 Bucket

  1. Sign in to backblaze.com
  2. Buckets → Create a Bucket
  3. Name: yourhostname-duplicati-backup
  4. Files in Bucket: Private
  5. Default Encryption: Enabled
  6. Object Lock: Disabled unless you want immutable backups
  7. Create a Bucket

Create Application Keys

  1. Application Keys → Add a New Application Key
  2. Name: duplicati-homeserver
  3. Allow access to bucket: select your new bucket
  4. Type of Access: Read and Write
  5. File name prefix: leave empty or add one for organization
  6. Create New Key
  7. Copy both the keyID and applicationKey immediately — applicationKey is shown only once

Step 2: Deploy Duplicati

mkdir -p ~/duplicati
nano ~/duplicati/docker-compose.yml
services:
  duplicati:
    image: lscr.io/linuxserver/duplicati:latest
    container_name: duplicati
    ports:
      - "8200:8200"
    volumes:
      - ./config:/config
      - /backups:/backups                     # Optional local backup destination
      - /home:/source/home:ro                 # Source to back up (read-only)
      - /opt:/source/opt:ro                   # Docker Compose directories
      - /var/lib/docker/volumes:/source/docker-volumes:ro  # Docker volumes
    environment:
      - PUID=0                                # Root needed to read all files
      - PGID=0
      - TZ=America/New_York
    restart: unless-stopped

Setting PUID=0 root allows Duplicati to read all files, including those owned by other users in Docker volumes. This is necessary for a complete home server backup.

cd ~/duplicati
docker compose up -d

Access Duplicati at http://192.168.1.100:8200.


Step 3: Create a Backup Job

In the Duplicati web UI → Add backup → Configure a new backup.

Step 1 — General settings

SettingValue
NameHome Server Daily Backup
EncryptionAES-256
Passphrasegenerate a strong passphrase — store it in Vaultwarden

The passphrase encrypts your backup data before it leaves your machine. If you lose this passphrase, you cannot restore your backup. Store it in your Vaultwarden password manager immediately.

Step 2 — Backup destination Backblaze B2

SettingValue
Storage TypeBackblaze B2
Bucket nameyourhostname-duplicati-backup
Bucket createNo you created it manually
Folder path/homeserver/
Account IDyour B2 keyID
Application Keyyour B2 applicationKey

Click Test Connection — Duplicati verifies it can reach and write to your bucket.

Step 3 — Source data

Add the paths to back up:

PathWhat it contains
/source/home/username/Docker Compose directories configs, data volumes
/source/home/username/nextcloud/Nextcloud data
/source/home/username/homeassistant/Home Assistant config
/source/opt/Any services installed in /opt

Exclude paths to save space and speed:

/source/home/username/jellyfin/cache/
/source/home/username/nextcloud/data/*/files_trashbin/
/source/docker-volumes/*/overlay2/
*.tmp
*.log

Step 4 — Schedule

SettingValue
RepeatDaily
Time03:00 AM during low-activity hours

Step 5 — Options

SettingValue
Remote volume size50MB default, suitable for most
Backup retentionKeep all backups for 30 days, keep one monthly backup indefinitely
Upload volume limitUnlimited or throttle for shared connections

Save the backup job.


Step 4: Back Up Database-Dependent Services

Running containers with databases PostgreSQL, MariaDB need database dumps before backup — files copied while a database is active may be corrupt.

Create a Pre-Backup Script

Create a script that dumps all databases before Duplicati runs:

mkdir -p ~/duplicati/scripts
nano ~/duplicati/scripts/pre-backup.sh
#!/bin/bash
DUMP_DIR=/home/username/backups/db-dumps
mkdir -p "$DUMP_DIR"
DATE=$(date +%Y%m%d-%H%M%S)

# Nextcloud PostgreSQL
docker exec nextcloud-db pg_dump -U nextcloud nextcloud > "$DUMP_DIR/nextcloud-$DATE.sql" 2>/dev/null
echo "Nextcloud DB: $?"

# Gitea PostgreSQL
docker exec gitea-db pg_dump -U gitea gitea > "$DUMP_DIR/gitea-$DATE.sql" 2>/dev/null
echo "Gitea DB: $?"

# Vaultwarden SQLite
docker exec vaultwarden sqlite3 /data/db.sqlite3 ".backup /tmp/vw-backup.db"
docker cp vaultwarden:/tmp/vw-backup.db "$DUMP_DIR/vaultwarden-$DATE.db" 2>/dev/null
echo "Vaultwarden DB: $?"

# Keep last 7 daily dumps
find "$DUMP_DIR" -name "*.sql" -mtime +7 -delete
find "$DUMP_DIR" -name "*.db" -mtime +7 -delete

echo "Pre-backup dumps complete: $(ls $DUMP_DIR | wc -l) files"
chmod +x ~/duplicati/scripts/pre-backup.sh

In Duplicati → Edit Backup → Options → Advanced options:

  • run-script-before: /source/home/username/duplicati/scripts/pre-backup.sh
  • run-script-before-required: true fail backup if script fails

Now Duplicati dumps all databases before uploading — the backup contains consistent snapshots.


Step 5: Test a Restore

A backup you’ve never tested is not a backup. After the first successful backup run, test a restore:

  1. Duplicati → select the backup job → Restore
  2. Select today’s backup point
  3. Navigate to a test file e.g., a non-critical config file
  4. Restore to: /tmp/restore-test/
  5. Verify the file is correct

For a full restore test: restore a Docker service’s config directory to a temporary location and verify it contains what you expect.


Monitoring Backup Jobs

Email Notifications

Duplicati → Settings → Advanced → add notification settings:

  • send-mail-to: your email
  • send-mail-from: duplicati@yourserver
  • send-mail-url: smtp://smtp.gmail.com:587/?from=...
  • send-mail-subject: Duplicati backup: %PARSEDRESULT%
  • send-mail-body: %RESULT%

Set send-mail-level to Error to receive email only on backup failures.

Uptime Kuma Webhook

Notify Uptime Kuma when a backup completes or fails:

In Duplicati → Advanced options:

  • send-http-url: your Uptime Kuma push monitor URL
  • send-http-result-output-format: Json

In Uptime Kuma: Add Monitor → Push → copy the heartbeat URL. Duplicati pings this URL after each backup run — if it stops sending, Uptime Kuma marks backup as DOWN.


What to Back Up: Priority Order

PriorityWhat to back upWhy
CriticalVaultwarden dataPassword vault
CriticalHome Assistant config + databaseSmart home config
CriticalNextcloud dataPersonal files, photos
HighGitea repositoriesCode history
HighPaperless-ngx media + DBDocument archive
MediumDocker Compose YAML filesRebuild reference
MediumWiki.js databaseDocumentation
LowJellyfin metadataRebuildable from media
SkipJellyfin media filesToo large, replace from source

Who Should Skip This Comparison

Frequently Asked Questions

Should I use Duplicati or Restic for home server backups?

Both are excellent. Duplicati has a polished web UI and broad storage backend support, making it easier to configure for non-technical household members. Restic is CLI-based, faster, and has better handling of concurrent backups. For home servers where one person manages everything: either works. Duplicati’s web UI makes it easier to verify backups visually and set up notifications without command line work.

How long does the first Duplicati backup take?

The initial backup uploads everything — this can take hours depending on your data size and upload speed. At 50GB with a 50Mbps upload connection, expect 2-3 hours. Subsequent daily backups are incremental and typically complete in 5-30 minutes depending on how much changed.

Can Duplicati back up to a local NAS in addition to cloud storage?

Yes. Create two separate backup jobs: one to Backblaze B2 off-site, one to a local SMB/NFS share or another machine via SFTP local backup. This implements the 3-2-1 rule directly: original data on the mini PC, local backup on NAS, cloud backup on B2.

How much does Duplicati cost to run with Backblaze B2?

Backblaze B2 charges $0.006/GB/month for storage and $0.01/GB for downloads. A typical home server backup set — Docker volumes, Home Assistant config, Nextcloud data, and documents — totals 50-200GB. At 100GB, that’s $0.60/month in storage. Downloads for restores are rare and usually just the files you need, not the full backup.

Can Duplicati back up Docker volumes while containers are running?

Yes, with the caveat that running containers may have open file handles. For database-backed services PostgreSQL, SQLite, the recommended approach is to dump the database to a file first, then back up that dump file. For file-based volumes Nextcloud data, Jellyfin metadata, Duplicati can back up running volumes safely since file changes during backup are handled by its deduplication engine.