copyparty mit Docker selbst hosten: Datei-Server mit Web-UI und WebDAV
copyparty 1.20.24 mit Docker Compose als schlanken Dateiserver betreiben: Konten und Rechte, WebDAV, Port nur lokal hinter Reverse Proxy, tmpfs-Falle sowie Backup und Restore, praktisch getestet.
Geprüft am 14.10.2026 · für copyparty 1.20.24
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

copyparty ist ein Datei-Server in einem einzigen Prozess (MIT-Lizenz). Er stellt Verzeichnisse per Weboberfläche, WebDAV, FTP, SFTP und TFTP bereit, ohne Datenbankserver, Cache oder Hintergrunddienste. Für Upload-Postfächer von Kunden, WebDAV-Laufwerke für Außenstellen oder einen schnellen internen Dateiablageserver ist das oft passender als eine komplette Groupware. Diese Anleitung richtet copyparty 1.20.24 mit Docker Compose ein, vergibt Konten und Rechte, prüft WebDAV und zeigt Backup und Wiederherstellung.
Voraussetzungen
- Linux-Server oder VPS, 1 bis 2 CPU-Kerne, 4 GB RAM sind großzügig. Im Test belegte der Container im Leerlauf rund 39 MB RAM. Mehr Speicher braucht nur der Medienindex bei großen Beständen.
- Architektur x86_64, AArch64, arm32, ppc64le oder s390x für die Variante
aclaut Docker-Dokumentation des Projekts. Getestet wurde x86_64. - Etwa 150 MB für das Image (im Test 141 MB) plus Platz für Ihre Dateien auf einem echten Datenträger (ext4, xfs, btrfs), nicht tmpfs.
- Docker Engine mit Compose-Plugin (Docker-Installation).
- Für den Zugriff von außen eine Domain und ein Reverse Proxy mit TLS (Nginx als Reverse Proxy mit TLS).
Eckdaten
| Punkt | Wert |
|---|---|
| Image | copyparty/ac:1.20.24 (auch ghcr.io/9001/copyparty-ac) |
| Version | v1.20.24 vom 19. September 2026, aktuelles Release am 30.09.2026 |
| Port im Container | 3923 (HTTP und WebDAV) |
| Konfiguration | /cfg, jede Datei *.conf wird gelesen |
| Freigegebene Dateien | /w |
| Benutzer | per user: "1000:1000" festgelegt |
| Weitere Varianten | min, im, iv, dj (weniger oder mehr Vorschaufunktionen) |
Schritt 1: Verzeichnisse anlegen
Legen Sie Konfigurations- und Datenordner an und prüfen Sie den Dateisystemtyp:
mkdir -p /opt/copyparty/cfg /opt/copyparty/data/oeffentlich
cd /opt/copyparty
df -hT /opt/copyparty/datacopyparty erkennt, wenn ein Volume im Arbeitsspeicher liegt. Im Test mit einem Datenordner unter /tmp (tmpfs) entzog copyparty der Freigabe selbst die Schreibrechte und meldete write-access was removed from the following volumes because they are not mapped to an actual HDD for storage!. Die Option wram würde das übergehen, Uploads wären nach einem Neustart aber weg.
Verifizieren: In der Spalte Type von df -hT steht ein echtes Dateisystem wie ext4 oder xfs, nicht tmpfs.
Schritt 2: Konfiguration mit Konten und Rechten
Die Datei cfg/copyparty.conf sieht wie YAML aus, hat aber ein eigenes Format. Kommentare am Zeilenende brauchen zwei Leerzeichen vor dem Rautezeichen.
[global]
e2dsa # Dateiindex für Suche und Deduplizierung
e2ts # Medien-Tags lesen
ansi
hist: /cfg/hists/
df: 16 # Uploads ablehnen, wenn weniger als 16 GB frei
vc-url: https://api.github.com/repos/9001/copyparty/security-advisories?per_page=9
[accounts]
admin: BITTE-EIGENES-LANGES-PASSWORT
[/]
/w
accs:
rwmda: admin
[/oeffentlich]
/w/oeffentlich
accs:
r: *
rwmda: adminDie Rechte bedeuten: r lesen und herunterladen, w hochladen, m verschieben und umbenennen, d löschen, a Administration. * steht für alle, auch nicht angemeldete Besucher. Für ein Upload-Postfach, in dem Absender den Bestand nicht sehen sollen, vergeben Sie nur w. Mit hist liegen Index und Vorschaubilder zentral unter cfg statt in jeder Freigabe. vc-url lässt copyparty laut Beispielkonfiguration des Projekts prüfen, ob die laufende Version eine bekannte Sicherheitslücke hat, und im Kontrollpanel warnen. Im Test meldete das Log danach ver-chk ok; v1.19.8 and newer is safe.
Verifizieren: cat cfg/copyparty.conf zeigt Ihr eigenes Passwort statt des Platzhalters, und die Datei endet auf .conf.
Schritt 3: Compose-Datei und Start
Die Datei folgt dem offiziellen Beispiel aus docs/examples/docker/basic-docker-compose, mit festem Tag und Port nur an 127.0.0.1:
services:
copyparty:
image: copyparty/ac:1.20.24
container_name: copyparty
user: "1000:1000"
restart: unless-stopped
ports:
- "127.0.0.1:3923:3923"
volumes:
- ./cfg:/cfg:z
- ./data:/w:z
environment:
PYTHONUNBUFFERED: "1"
stop_grace_period: 15s
healthcheck:
test: ["CMD-SHELL", "wget --spider -q 127.0.0.1:3923/?reset=/._"]
interval: 1m
timeout: 2s
retries: 5
start_period: 15sdocker compose up -d
docker compose logs --no-log-prefix | grep -i 'copyparty v'Im Log können Zeilen wie NG: vips, mutagen, pillow-heif erscheinen. Das ist im Image ac normal, das Projekt vermerkt dazu selbst „this is fine btw“.
Verifizieren: Das Log zeigt copyparty v1.20.24, docker compose ps meldet nach etwa 15 Sekunden healthy, und docker compose exec copyparty id gibt uid=1000 gid=1000 aus.
Schritt 4: Zugriff und Rechte prüfen
Prüfen Sie nicht nur, dass Uploads funktionieren, sondern auch, dass sie ohne Anmeldung scheitern:
echo "Testdatei" > /tmp/test.txt
curl -s -o /dev/null -w '%{http_code}\n' -u admin:IHR-PASSWORT -T /tmp/test.txt http://127.0.0.1:3923/test.txt
curl -s -o /dev/null -w '%{http_code}\n' -T /tmp/test.txt http://127.0.0.1:3923/anon.txt
curl -s -o /dev/null -w '%{http_code}\n' -u admin:falsch -T /tmp/test.txt http://127.0.0.1:3923/x.txt
curl -s http://127.0.0.1:3923/?ls | head -c 300Im Test lieferte der Upload mit Konto 201, ohne Anmeldung 401 und mit falschem Passwort 403. Ein anonymer Besucher sieht auf der Startseite nur die öffentliche Freigabe.
Verifizieren: Die drei Upload-Aufrufe liefern 201, 401 und 403. ls -ln data/ zeigt test.txt mit Besitzer 1000 1000.
Schritt 5: WebDAV nutzen
WebDAV läuft auf demselben Port wie die Oberfläche und muss nicht eingeschaltet werden:
curl -s -I -u admin:IHR-PASSWORT -X OPTIONS http://127.0.0.1:3923/ | grep -i -E '^(allow|dav):'
curl -s -o /dev/null -w '%{http_code}\n' -u admin:IHR-PASSWORT -X PROPFIND -H "Depth: 1" http://127.0.0.1:3923/
curl -s -o /dev/null -w '%{http_code}\n' -u admin:IHR-PASSWORT -X MKCOL http://127.0.0.1:3923/davtest/Die Antwort enthält Dav: 1, 2, also auch Sperren. Das brauchen Windows und macOS, um die Freigabe als Laufwerk einzubinden. Unter Windows verbinden Sie über „Netzlaufwerk verbinden“ mit https://dateien.example.de/, sobald der Proxy mit TLS steht. Manche WebDAV-Clients überschreiben bestehende Dateien laut Dokumentation erst mit der Option daw. Sie bewirkt allerdings, dass jeder PUT-Upload vorhandene Dateien ersetzt, sofern der Benutzer Löschrechte hat.
Verifizieren: Der PROPFIND liefert 207, MKCOL liefert 201, und der neue Ordner erscheint in der Weboberfläche.
Schritt 6: Reverse Proxy und Zugriffsschutz
copyparty bringt nur ein selbst signiertes Zertifikat mit und meldet selbst using default TLS certificate; https will be insecure. TLS gehört deshalb vor den Container. Das Projekt liefert unter contrib/nginx/copyparty.conf eine Vorlage. Die wichtigsten Punkte daraus sind hohe Grenzen für Anfragegröße und Timeouts sowie abgeschaltete Pufferung für große Uploads:
client_max_body_size 1024M;
client_body_timeout 610m;
send_timeout 610m;
location / {
proxy_pass http://127.0.0.1:3923;
proxy_http_version 1.1;
proxy_buffering off;
proxy_request_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}Damit copyparty die echte Client-IP für Sperren und Protokolle kennt, empfiehlt das README einen Header, der nur die Client-IP enthält, und dazu in [global] die Optionen xff-hdr: x-real-ip und rproxy: 1. Ohne diese Angaben weist das Log mit farbigen Meldungen auf die fehlende Einstellung hin.
Ergänzend begrenzt ipa: 10.0.0.0/8 oder ipa: lan im Abschnitt [global] den Zugriff auf bestimmte Netze. SMB ist laut Projekt nicht vollständig in die interne Rechteprüfung eingebunden und nicht für das Internet gedacht. Im Firmennetz ist dafür Samba die bessere Wahl.
Verifizieren: curl -sI https://dateien.example.de/ liefert 200, ein Upload über die Domain ohne Anmeldung liefert 401.
Schritt 7: Backup und Wiederherstellung
Die Dateien liegen als normale Dateien in data, Index und Konfiguration in cfg. Stoppen Sie den Container, damit kein Upload mitten im Schreiben gesichert wird:
cd /opt/copyparty
docker compose stop
tar czf /opt/backup/copyparty-$(date +%F).tar.gz -C /opt/copyparty data cfg
docker compose startDie Wiederherstellung im Test: Daten und Index gelöscht, Archiv entpackt, gestartet. Der Container war wieder healthy, die Testdatei abrufbar.
docker compose stop
rm -rf data cfg/hists
tar xzf /opt/backup/copyparty-2026-09-30.tar.gz -C /opt/copyparty
docker compose startOhne cfg/hists verlieren Sie keine Dateien, copyparty baut den Index beim Start neu auf. Das dauert bei großen Beständen entsprechend.
Verifizieren: tar tzf listet data/ und cfg/copyparty.conf. Nach dem Restore liefert curl -u admin:IHR-PASSWORT http://127.0.0.1:3923/test.txt den Inhalt der Testdatei.
Typische Fehler
write-access was removed … type=tmpfs: Datenordner liegt im Arbeitsspeicher. Auf einen echten Datenträger verlegen.- HTTP 401 beim Upload: Keine Zugangsdaten gesendet.
- HTTP 403 beim Upload: Falsches Passwort oder kein Schreibrecht in dieser Freigabe.
- Dateien gehören root:
user: "1000:1000"fehlt. Zeile ergänzen, Besitz mitchown -R 1000:1000 data cfgkorrigieren. - Konfiguration wirkt nicht: Datei endet nicht auf
.confoder liegt nicht im nach/cfgeingebundenen Ordner. Kommentar ohne zwei Leerzeichen davor wird als Wert gelesen. - Rootless Docker bricht mit
lsetxattr-Fehler ab: Laut Projekt-FAQ liegt das am Speichertreiber overlay2. Abhilfe laut Dokumentation: Podman oder fuse-overlayfs. - iPhone-Fotos ohne Vorschau: Die offiziellen Images verarbeiten laut Projekt aus rechtlichen Gründen kein HEIF, HEIC und H.265.
Häufige Fragen
Welche Image-Variante ist die richtige?
Das Projekt empfiehlt ac: Bild-, Audio- und Videovorschau mit ffmpeg. min spart rund 100 MB, zeigt aber keine Vorschaubilder. iv und dj bringen Zusatzfunktionen, die selten gebraucht werden.
Ersetzt copyparty Nextcloud?
Nein. Es gibt keine Kalender, keine gemeinsame Dokumentbearbeitung und keine Sync-Clients. Für Dateiaustausch und WebDAV reicht copyparty, für Groupware eignet sich zum Beispiel OpenCloud.
Wie aktualisiere ich?
Tag in der Compose-Datei ändern, docker compose pull und docker compose up -d. Eine Datenbankmigration entfällt. Nach einem Rückschritt auf eine ältere Version kann es nötig sein, cfg/hists zu löschen, die Dateien bleiben unberührt.
Gibt es FTP und SFTP?
Ja, über die Optionen ftp und sftp mit eigenem Port. FTP braucht in Docker zusätzlich ftp-nat und einen Portbereich für den Passivmodus. SFTP erlaubt standardmäßig nur SSH-Schlüssel.
Fazit
copyparty liefert Weboberfläche und WebDAV aus einem Container ohne Datenbank. Mit festem Tag, eigenem Benutzer, sauber vergebenen Rechten, Port nur an 127.0.0.1 und einem regelmäßigen Archiv von data und cfg ist es ein schlanker Dateiserver für den Austausch mit Kunden und Außenstellen.
Weiterführende Anleitungen und Quellen
- Nginx als Reverse Proxy mit TLS einrichten
- SFTPGo als SFTP- und WebDAV-Server
- OpenCloud mit Docker
- Docker Compose absichern: Secrets, Healthchecks und Non-Root
- copyparty: Docker-Dokumentation und Image-Varianten
- copyparty: Compose-Beispiel und copyparty.conf
- copyparty README: Konten, Rechte, WebDAV, FTP, SFTP, SMB
- copyparty Release v1.20.24


