Nomploy Nomad Packs

← All packs

duplicati v0.1.0

Backup

Duplicati — a backup client with a friendly web UI that makes encrypted, incremental, deduplicated backups to local disk or cloud storage (S3, B2, WebDAV, SFTP, and many more), on a schedule. Deployed as a host-networked Nomad service with config, source, and backup volumes.

nomad-pack run duplicati --registry nomploy
…or one line (add registry + run)
curl -fsSL https://packs.nomploy.com/install.sh | sh -s -- duplicati

Needs nomad-pack on PATH. The script only adds the nomploy registry and runs this pack.

1 task http 8210 3 volumes image lscr.io/linuxserver/duplicati:latest tracks :latest image bumped today
Variables 14
values.hcl

Save as values.hcl, edit, then run:

nomad-pack run duplicati -f values.hcl --registry nomploy
# The name of the Nomad job.
job_name = "duplicati"

# The Nomad namespace to deploy into.
namespace = "default"

# The datacenters to deploy to.
datacenters = ["*"]

# The Duplicati container image. Pin a tag in production.
image = "lscr.io/linuxserver/duplicati:latest"

# Host port for the Duplicati web UI.
port = 8210

# User ID the app runs as (PUID).
puid = 1000

# Group ID the app runs as (PGID).
pgid = 1000

# Container timezone (TZ), e.g. Europe/Bratislava.
tz = "UTC"

# Key that encrypts Duplicati's own settings database (SETTINGS_ENCRYPTION_KEY). CHANGE THIS and keep it stable.
settings_encryption_key = "change-me-to-a-random-key"

# Named volume for Duplicati config (/config): jobs, schedules, and its settings database.
config_volume = "duplicati_config"

# Named volume mounted read data from at /source (what you back up). Swap for a bind mount to back up real host paths.
source_volume = "duplicati_source"

# Named volume for local backup destinations (/backups). Not needed if you back up to cloud storage.
backups_volume = "duplicati_backups"

# Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
constraints = []

# Resources for the Duplicati task.
resources = {
    cpu    = 500
    memory = 512
  }
NameTypeDefaultDescription
job_name string
"duplicati"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"lscr.io/linuxserver/duplicati:latest"
The Duplicati container image. Pin a tag in production.
port number
8210
Host port for the Duplicati web UI.
puid number
1000
User ID the app runs as (PUID).
pgid number
1000
Group ID the app runs as (PGID).
tz string
"UTC"
Container timezone (TZ), e.g. Europe/Bratislava.
settings_encryption_key set me string
"change-me-to-a-random-key"
Key that encrypts Duplicati's own settings database (SETTINGS_ENCRYPTION_KEY). CHANGE THIS and keep it stable.
config_volume string
"duplicati_config"
Named volume for Duplicati config (/config): jobs, schedules, and its settings database.
source_volume string
"duplicati_source"
Named volume mounted read data from at /source (what you back up). Swap for a bind mount to back up real host paths.
backups_volume string
"duplicati_backups"
Named volume for local backup destinations (/backups). Not needed if you back up to cloud storage.
constraints list
[]
Placement constraints. Pin to the node holding the volumes. On a nomploy cluster: attribute = "$${meta.nomploy_control_plane}", operator = "=", value = "true".
resources object
{
    cpu    = 500
    memory = 512
  }
Resources for the Duplicati task.
Back up this pack

This pack stores data in 3 Docker named volumes: duplicati_configduplicati_sourceduplicati_backups

restic

# Run on the node hosting this pack. Point restic at your repo first:
#   export RESTIC_REPOSITORY="s3:https://<account>.r2.cloudflarestorage.com/<bucket>"
#   export RESTIC_PASSWORD="<repo-password>"
#   export AWS_ACCESS_KEY_ID=<key>  AWS_SECRET_ACCESS_KEY=<secret>
restic backup \
  /var/lib/docker/volumes/duplicati_config/_data \
  /var/lib/docker/volumes/duplicati_source/_data \
  /var/lib/docker/volumes/duplicati_backups/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/duplicati_config/_data backup:<bucket>/duplicati_config
rclone sync /var/lib/docker/volumes/duplicati_source/_data backup:<bucket>/duplicati_source
rclone sync /var/lib/docker/volumes/duplicati_backups/_data backup:<bucket>/duplicati_backups

Paths assume the default Docker volume location (/var/lib/docker/volumes). Restore by stopping the job, restoring files into the same volume, and re-running the pack.

Readme

duplicati

Duplicati — a backup client with a friendly web UI. Make encrypted, incremental, deduplicated backups to local disk or a huge range of cloud/remote targets (S3, Backblaze B2, WebDAV, SFTP, Google Drive, and more), on a schedule, with restore-browsing built in.

Single host-networked Nomad service with config, source, and backup volumes.

Deploy

nomad-pack registry add nomploy https://github.com/Nomploy/nomad-packs
nomad-pack run duplicati --registry=nomploy

Configure

Variable Default Description
port 8210 Web UI port.
settings_encryption_key change-me-… SETTINGS_ENCRYPTION_KEY — encrypts Duplicati's settings DB. Change it, keep it stable.
config_volume duplicati_config /config — jobs, schedules, settings DB.
source_volume duplicati_source /source — the data to back up (swap for a bind mount for real host paths).
backups_volume duplicati_backups /backups — local backup destinations (skip if backing up to cloud).
puid / pgid 1000 / 1000 User/group (PUID/PGID).
tz UTC Container timezone (TZ).
image lscr.io/linuxserver/duplicati:latest Container image. Pin a tag in production.
resources { cpu = 500, memory = 512 } Task resources.

Set a UI password, then create a backup job: pick a destination, select /source, set a schedule and a strong backup passphrase. Keep that passphrase and settings_encryption_key safe — they're required to restore. A GUI alternative to the restic-based backrest pack. Front the UI with a reverse proxy for TLS.