diff --git a/serverAppConfigs-docs/Dankserver/Copyparty.md b/serverAppConfigs-docs/Dankserver/Copyparty.md index d9594e0..f64546e 100644 --- a/serverAppConfigs-docs/Dankserver/Copyparty.md +++ b/serverAppConfigs-docs/Dankserver/Copyparty.md @@ -9,7 +9,7 @@ Copyparty is a lightweight file server and media streamer that runs as a single | Item | Value | |------|-------| | Latest version | v1.20.21 (2026-08) | -| Image | `ghcr.io/9001/copyparty:latest` (official Dockerfile in repo) | +| Image | `ghcr.io/9001/copyparty-ac:latest` (ac = full edition; the bare `copyparty:latest` tag does not exist — ghcr answers 403 on the token request for nonexistent repos) | | Port | 3923 (host) → 3923 (container) | | Volume | bind mount the shared root directory | | Auth | Per-directory `.cpy` config files, HTTP basic auth, `dirkeys`, `filekeys` | @@ -18,12 +18,20 @@ Copyparty is a lightweight file server and media streamer that runs as a single ## Configuration -### Environment Variables +### Command-line interface (ac edition) -| Variable | Description | -|----------|-------------| -| `COPAY_PASS` | Master password for the web UI | -| `COPAY_MODE` | Set to `rw` for read-write shares | +The ac edition's entrypoint is `/bin/ash /z/cpp.sh -c /z/initcfg` — it parses +a config file, then `exec`s `python3 -m copyparty "$@"`, so accounts and +volumes are passed as **argv flags**, not env vars. `COPAY_PASS`/`COPAY_MODE` +envs are *not* consumed by this image (zero `COPAY_` references in the +package). The deployed interface: + +``` +command: ["-a", "dank:${COPAY_PASS}", "-v", "/w::A"] +``` + +`-a` takes `USER:PASS`; `-v` takes `SRC:DST:PERMS:FLAGS` — here volume `/w` +with the `A` ("all") flag for the `dank` account, nothing for anonymous. ### Configuration File Options @@ -47,9 +55,11 @@ The `iv` edition is no longer available for arm32/armv6. Use `dj` for maximum co ## Volumes -| Container path | Host path (convention) | -|----------------|------------------------| -| `/data` | `/opt/copyparty/data` | +Live deployment (2026-08-29): the whole LUKS array is served at URL root `/w` +via the `-v /w::A` flag — account `dank` holds the `A` (all) flag, anonymous +gets nothing. The compose bind mount is +`/mnt/entropy:/w` (host path → container path); the ac edition serves its +volume roots from argv, not from a `/data` convention. ## Docker Compose @@ -95,6 +105,11 @@ Upgrade to v1.20.19+ to cover all known CVEs. The dirkey fix (v1.20.17) matters - **Large transfers:** Disable TLS inside the app and let Caddy terminate TLS. This avoids double encryption overhead. - **Dedicated share directory:** Do not give Copyparty the whole disk. Mount only the intended share path. +- **Whole-disk share (live choice):** this deployment *does* serve the whole + 91 T array (`-v /w::A`). Safe only because anonymous gets zero permissions — + every request authenticates against the `dank` account first, and Caddy + + Anubis + authentik sit in front (see [[Anubis]], [[Authentik]]). Strip the + `A` flag or drop the account and the array becomes world-writable again. - **Upload tokens scoped per folder:** Prevents accidental global write access. - **CSP nonces (v1.20.17+):** Security hardening for JavaScript execution. May break third-party JS plugins (`--js-browser` / `--html-head`). - **Custom thumbnail extractors (v1.20.19+):** New `thumbex` framework. Requires configuration in `initcfg`.