Nomploy Nomad Packs

← All packs

copyparty v0.1.0

Apps

copyparty — a portable, feature-packed file server in one process: HTTP/WebDAV/FTP/TFTP, resumable and accelerated uploads, media indexing and thumbnails, audio streaming, and per-path access control. Deployed as a host-networked Nomad service serving a data volume with a config volume.

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

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

1 task http 3923 2 volumes image copyparty/ac:latest tracks :latest image bumped today
Variables 10
values.hcl

Save as values.hcl, edit, then run:

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

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

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

# The copyparty container image (ac = all codecs; use copyparty/min for a smaller image). Pin a tag in production.
image = "copyparty/ac:latest"

# Host port for the copyparty web server.
port = 3923

# Anonymous access to the shared volume: 'r' (read-only), 'rw' (read+write), 'w' (upload-only), or 'g' (get-only, no listing). Add named accounts via the config volume for finer control.
share_mode = "r"

# Named volume for the shared files (/w).
data_volume = "copyparty_data"

# Named volume for copyparty config (/cfg): drop .conf files here to define accounts and volumes.
config_volume = "copyparty_config"

# 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 copyparty task.
resources = {
    cpu    = 500
    memory = 256
  }
NameTypeDefaultDescription
job_name string
"copyparty"
The name of the Nomad job.
namespace string
"default"
The Nomad namespace to deploy into.
datacenters list
["*"]
The datacenters to deploy to.
image string
"copyparty/ac:latest"
The copyparty container image (ac = all codecs; use copyparty/min for a smaller image). Pin a tag in production.
port number
3923
Host port for the copyparty web server.
share_mode string
"r"
Anonymous access to the shared volume: 'r' (read-only), 'rw' (read+write), 'w' (upload-only), or 'g' (get-only, no listing). Add named accounts via the config volume for finer control.
data_volume string
"copyparty_data"
Named volume for the shared files (/w).
config_volume string
"copyparty_config"
Named volume for copyparty config (/cfg): drop .conf files here to define accounts and volumes.
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 = 256
  }
Resources for the copyparty task.
Back up this pack

This pack stores data in 2 Docker named volumes: copyparty_datacopyparty_config

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/copyparty_data/_data \
  /var/lib/docker/volumes/copyparty_config/_data

rclone (sync to S3/R2)

rclone sync /var/lib/docker/volumes/copyparty_data/_data backup:<bucket>/copyparty_data
rclone sync /var/lib/docker/volumes/copyparty_config/_data backup:<bucket>/copyparty_config

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

copyparty

copyparty — a portable, feature-packed file server in a single process. It speaks HTTP, WebDAV, FTP, and TFTP, with resumable/accelerated uploads, a slick file browser, media indexing with thumbnails, audio streaming, dedup, and fine-grained per-path access control.

Single host-networked Nomad service serving a data volume, with a config volume for accounts and rules.

Deploy

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

Configure

Variable Default Description
port 3923 Web server port.
share_mode r Anonymous access to /w: r (read), rw (read+write), w (upload-only), g (get-only).
data_volume copyparty_data /w — the shared files.
config_volume copyparty_config /cfg — drop .conf files here for accounts and volumes.
image copyparty/ac:latest Container image (ac = all codecs; copyparty/min is smaller). Pin a tag.
resources { cpu = 500, memory = 256 } Task resources.

The /w volume is shared with the anonymous access level in share_mode. For user accounts and per-path permissions, add a .conf file to the /cfg volume (see copyparty's example configs) — it is picked up automatically and can override the CLI args. Serves plain HTTP — front it with a reverse proxy for TLS or keep it internal. Pin the job to the node holding the volumes with constraints.