Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung Server & Netzwerk 17.09.2026 · 8 min Lesezeit

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

Regal mit Aktenordnern, einem kleinen Netzwerkspeicher mit vier Laufwerksschächten und einer Ablage mit Mappen in einem hellen Büro

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 ac laut 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

PunktWert
Imagecopyparty/ac:1.20.24 (auch ghcr.io/9001/copyparty-ac)
Versionv1.20.24 vom 19. September 2026, aktuelles Release am 30.09.2026
Port im Container3923 (HTTP und WebDAV)
Konfiguration/cfg, jede Datei *.conf wird gelesen
Freigegebene Dateien/w
Benutzerper user: "1000:1000" festgelegt
Weitere Variantenmin, 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/data

copyparty 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: admin

Die 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: 15s
docker 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 300

Im 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 start

Die 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 start

Ohne 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 mit chown -R 1000:1000 data cfg korrigieren.
  • Konfiguration wirkt nicht: Datei endet nicht auf .conf oder liegt nicht im nach /cfg eingebundenen 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

copypartyDocker ComposeWebDAVSelfhostingDatei-ServerLinux