scripts/docker/README.md
copyparty is availabe in these repos:
run this command to grab the latest copyparty image and start it:
docker run --rm -it -u 1000 -p 3923:3923 -v /mnt/nas:/w -v $PWD/cfgdir:/cfg copyparty/ac
/w is the path inside the container that gets shared by default, so mount one or more folders to share below there/cfg is an optional folder with zero or more config files (*.conf) to loadcopyparty/ac is the recommended image editioncopyparty/ac with ghcr.io/9001/copyparty-ac-u 1000:z to all -v args (for example -v /mnt/nas:/w:z)this example is also available as a podman-compatible docker-compose yaml; example usage: docker-compose up (you may need to systemctl enable --now podman.socket or similar)
i'm not very familiar with containers, so let me know if this section could be better 🙏
this section basically explains how the docker-compose yaml works, so you may look there instead
the container has the same default config as the sfx and the pypi module, meaning it will listen on port 3923 and share the "current folder" (/w inside the container) as read-write for anyone
the recommended way to configure copyparty inside a container is to mount a folder which has one or more config files inside; -v /your/config/folder:/cfg
something.conf to get picked up/home/ed/Music should be /w/something and so on)also see docker-specific recommendations
with image size after installation and when gzipped
min (57 MiB, 20 gz) is just copyparty itselfim (70 MiB, 25 gz) can thumbnail images with pillow, parse media files with mutagenac (163 MiB, 56 gz) is im plus ffmpeg for video/audio thumbs + audio transcoding + better tagsiv (211 MiB, 73 gz) is ac plus vips for faster heif / avic / jxl thumbnailsdj (309 MiB, 104 gz) is iv plus beatroot/keyfinder to detect musical keys and bpmac is recommended since the additional features available in iv and dj are rarely useful
most editions support x86, x86_64, armhf, aarch64, ppc64le, s390x
dj doesn't run on ppc64le, s390x, armhfiv doesn't run on ppc64le, s390xNOTE: the following editions are unfinished experiments, and not published anywhere: djd djf djff dju
some notable alternative copyparty distributions, made and maintained by other people, unaffiliated unless mentioned otherwise -- please use your own judgement whether to trust these
the dj edition comes with keyfinder and beatroot which can be used to detect music bpm and musical keys
enable them globally in a config file:
[global]
e2dsa, e2ts # enable filesystem indexing and multimedia indexing
mtp: .bpm=f,t30,/mtag/audio-bpm.py # should take ~10sec
mtp: key=f,t190,/mtag/audio-key.py # should take ~50sec
or enable them for just one volume,
[/music] # share name / URL
music # filesystem path inside the docker volume `/w`
flags:
e2dsa, e2ts
mtp: .bpm=f,t30,/mtag/audio-bpm.py
mtp: key=f,t190,/mtag/audio-key.py
or using commandline arguments,
-e2dsa -e2ts -mtp .bpm=f,t30,/mtag/audio-bpm.py -mtp key=f,t190,/mtag/audio-key.py
the following advice is best-effort and not guaranteed to be entirely correct
failed to register layer: lsetxattr user.overlay.impure /etc: operation not supported
fuse-overlayfs storage drivercopyparty will generally create a .hist folder at the top of each volume, which contains the filesystem index, thumbnails and such. For performance reasons, but also just to keep things tidy, it might be convenient to store these inside the config folder instead. Add the line hist: /cfg/hists/ inside the [global] section of your copyparty.conf to do this
if you want more performance, and you're OK with doubling the RAM usage, then consider enabling mimalloc (maybe buggy) with one of these:
-e LD_PRELOAD=/usr/lib/libmimalloc-secure.so.2 makes download-as-zip 3x as fast, filesystem-indexing 1.5x as fast, etc.
-e LD_PRELOAD=/usr/lib/libmimalloc-insecure.so.2 adds another 10% speed but makes it easier to exploit future vulnerabilities
complete example: podman run --rm -it -p 3923:3923 -v "$PWD:/w:z" -e LD_PRELOAD=/usr/lib/libmimalloc-secure.so.2 copyparty/ac -v /w::r
...is tricky because ftp is a weird protocol and docker is making it worse 🎉
add the following three config entries into the [global] section of your copyparty.conf:
ftp: 3921 to enable the service, listening for connections on port 3921
ftp-nat: 127.0.0.1 but replace 127.0.0.1 with the actual external IP of your server; the clients will only be able to connect to this IP, even if the server has multiple IPs
ftp-nat if you are running the container with host networkingftp-pr: 12000-12099 to restrict the passive-mode port selection range; this allows up to 100 simultaneous file transfers
then finally update your docker config so that the port-range you specified (12000-12099) is exposed to the internet
basically ./make.sh hclean pull img push but see devnotes.md
in case you wish to make a small modification to the official image, for example add a python package you need, then you don't really need to build the whole image from scratch -- see modifying an image in devnotes