docs(dankserver): copyparty doc matches the ac edition's real interface

The page claimed an env-var interface (COPAY_PASS/COPAY_MODE) and a /data
volume convention that this image does not implement: the ac edition consumes
accounts and volumes as argv flags (-a USER:PASS, -v SRC:DST:PERMS), serves
the LUKS array at /w, and answers HTTP 500 with its own error page when zero
volumes are configured. Image ref corrected to copyparty-ac (bare latest tag
does not exist on ghcr).
This commit is contained in:
Frank
2026-08-29 03:39:23 -07:00
parent 2c8e65e82f
commit 7190720a9e
+24 -9
View File
@@ -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`.