Dateien teilen auf die smarte Art: Plik selbst hosten mit Docker

82 % der Menschen verwenden unsichere File-Sharing-Tools.
Dabei geht’s auch anders – schnell, modern, selbstbestimmt.
Wenn du Plik nutzt, behältst du die Kontrolle – ohne auf Komfort verzichten zu müssen.

Ich zeige dir heute, wie du Plik ganz einfach mit Docker selbst betreibst – inklusive Web-Upload, curl-Support und sogar Streaming ohne Zwischenspeicherung.
Ob für dich selbst, dein Team oder im Internet.

🔍 Was ist Plik – und warum solltest du es nutzen?

Plik ist ein Open-Source-Dateiübertragungsdienst, den du selbst hosten kannst.
Er bietet eine schöne Web-Oberfläche, aber auch eine einfache API und curl-Support. Perfekt also für Power-User und Endanwender zugleich.

Was Plik besonders macht:

  • Keine Anmeldung nötig (optional möglich)
  • Dateien laufen über deinen eigenen Server
  • Lebensdauer, Passwortschutz, Streaming – alles mit an Bord
  • Der Dienst kann Dateien auch direkt von A nach B streamen, ohne sie zu speichern!

Wenn du bisher auf Tools wie WeTransfer oder File.io angewiesen warst, dann ist Plik eine super Alternative.

🐳 Schritt 1: Plik via Docker bereitstellen

Du brauchst nichts weiter als eine funktionierende Docker-Umgebung.
Erstelle dir z. B. folgende docker-compose.yaml:

services:
  plik:
    image: rootgg/plik:latest
    container_name: plik-app
    hostname: plik-app
    user: "1000:1000"
    ports:
      - "3000:3000"
    volumes:
      - ./data/files:/home/plik/server/files
      - ./data/plikd.cfg:/home/plik/server/plikd.cfg:ro
      - ./data/background1.jpg:/home/plik/webapp/dist/img/background.jpg:ro
    environment:
      - PLAK_DISABLE_AUTHENTICATION=false
      - PLAK_DEBUG=true
      - PLAK_DEFAULT_TTL=30d
    restart: unless-stopped
  - ./data/background1.jpg:/home/plik/webapp/dist/img/background.jpg:ro

Optional: Mit dieser Zeile bindest du ein eigenes Hintergrundbild für das Webinterface von Plik ein.
Das Bild (background1.jpg) ersetzt den Standardhintergrund und sorgt für einen individuellen Look deiner File-Sharing-Seite.
So kannst du z. B. dein Logo, CI-Farben oder ein dezentes Design hinterlegen.

🔧 Tipp: Das Bild sollte im Format JPG oder PNG vorliegen und ca. 1920×1080 px groß sein.

Wenn du das nicht brauchst, kannst du diese Zeile einfach weglassen – Plik verwendet dann den Standardhintergrund.

⚙️ Schritt 2: Konfiguration

Die Konfigurationsdatei (plikd.cfg) ist das Herzstück.
Hier legst du Dinge wie Logging, Features, Download-Domain und Limits fest.

Erstelle die Konfigurationsdatei unter ./data/plikd.cfg und bearbeite sie:

# ─── Logging ───────────────────────────────────────────
Debug               = true
DebugRequests       = true
LogLevel            = "INFO"

# ─── Netzwerk ──────────────────────────────────────────
ListenPort          = 3000
ListenAddress       = "0.0.0.0"
MetricsPort         = 0
MetricsAddress      = "0.0.0.0"
Path                = ""

# SSL im Reverse Proxy, daher hier aus
SslEnabled          = false
EnhancedWebSecurity = true
TlsVersion          = "tlsv12"

# ─── Web Interface ─────────────────────────────────────
NoWebInterface      = false
DownloadDomain      = "https://share.domain.com"
DownloadDomainAlias = ["https://share.domain.com"]
WebappDirectory     = "../webapp/dist"
AbuseContact        = "abuse@domain.com"
SessionTimeout      = "365d"

# ─── Upload Einschränkungen ───────────────────────────
UploadWhitelist     = []
MaxFileSizeStr      = "10GB"
MaxUserSizeStr      = "unlimited"
MaxFilePerUpload    = 100
DefaultTTLStr       = "30d"
MaxTTLStr           = "90d"

# ─── Feature Flags ─────────────────────────────────────
FeatureAuthentication = "disabled"
FeatureOneShot        = "enabled"
FeatureRemovable      = "enabled"
FeatureStream         = "enabled"
FeaturePassword       = "enabled"
FeatureComments       = "enabled"
FeatureSetTTL         = "enabled"
FeatureExtendTTL      = "disabled"
FeatureClients        = "enabled"
FeatureGithub         = "enabled"
FeatureText           = "enabled"

# ─── Daten-Backend ─────────────────────────────────────
DataBackend = "file"
[DataBackendConfig]
    Directory = "files"

# ─── Metadaten-Backend (lokal, ohne Server-DB) ────────
[MetadataBackendConfig]
    Driver = "sqlite3"
    ConnectionString = "plik.db"
    Debug = false

Die Datei landet im Container unter /home/plik/server/plikd.cfg.
Du kannst sie einfach im Volume mounten.

🌐 Schritt 3: Reverse Proxy mit NGINX – auch für Streaming

Damit alles sauber über https://share.domain.com läuft, brauchst du einen NGINX als Reverse Proxy.
Wichtig ist hier: Der Streaming-Endpunkt muss eigene Parameter bekommen!

location / {
    proxy_pass http://plik-app:3000;
    proxy_http_version 1.1;
    proxy_request_buffering on;
    client_max_body_size 10G;
    proxy_read_timeout 300s;
    send_timeout 300s;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location /stream/ {
    proxy_pass http://plik-app:3000;
    proxy_http_version 1.1;
    proxy_request_buffering off;
    proxy_buffering off;
    client_max_body_size 0;
    proxy_read_timeout 600s;
    send_timeout 600s;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Mit dieser Konfiguration funktioniert das Webinterface perfekt, und Streaming-Downloads laufen reibungslos – selbst bei schwankender Verbindung.

🟢 Plik starten und loslegen

Wenn deine Konfiguration steht, startest du deinen Container ganz einfach mit:

docker-compose up -d

Der Parameter -d sorgt dafür, dass der Container im Hintergrund läuft.

Falls du Änderungen an deiner docker-compose.yaml oder an plikd.cfg vorgenommen hast, kannst du den Container auch wie folgt neu starten:

docker-compose down && docker-compose up -d

Nach dem Start erreichst du dein Webinterface unter der von dir konfigurierten Adresse – z. B.:

https://share.domain.com

💻 Das Webinterface im Überblick

Das Webinterface von Plik ist bewusst einfach und übersichtlich gehalten. Du kannst direkt loslegen, ohne dich anmelden zu müssen.

Das kannst du tun:

  • Dateien hochladen – per Drag & Drop oder Dateiauswahl
  • ⚙️ Optionen pro Upload setzen, z. B.:
    • Einmal-Download („Destruct after first download“)
    • Streaming-Modus
    • Passwortschutz
    • Löschrechte („Removable“)
    • Kommentar (Markdown-fähig)
    • Ablaufdatum ändern
  • 🔗 Freigabelinks generieren
  • 📱 QR-Code für schnellen Zugriff von mobilen Geräten
  • 📦 Nach dem Upload:
    • Direkt einzelne Dateien herunterladen
    • ZIP-Download für alles
    • Admin-Link für die nachträgliche Administration

Optional kannst du auch leere Uploads erstellen, um anderen Personen zu erlauben, selbst Dateien hochzuladen.

🚀 Bonus: Datei-Upload per Curl

Wer keine Lust aufs Webinterface hat, kann einfach curl nutzen:

curl --form 'file=@/pfad/zur/deiner_datei.txt' https://share.domain.com

Plik gibt dir sofort den Download-Link zurück – ganz ohne Login oder Passwort.
Einfacher geht’s nicht!

📡 Streaming

Der Streaming-Modus ist ein echtes Highlight.
Du bereitest den Upload vor, bekommst deinen Freigabe-Link, und erst wenn der Empfänger ihn aufruft, startet der Upload automatisch.

Das heißt:

  • Der Sender hält die Datei bereit
  • Der Empfänger klickt → Upload und Download beginnen gleichzeitig
  • Kein Speicherplatzverbrauch

Ideal für einmalige Übertragungen – z. B. große ISO-Dateien oder sensible Inhalte.

✅ Fazit: Plik macht’s einfach

Plik ist schnell, elegant und verdammt effizient.
Mit ein paar Zeilen YAML und einer durchdachten Konfiguration hast du in kürzester Zeit einen eigenen File-Sharing-Dienst, der sich nicht hinter kommerziellen Plattformen verstecken muss.

Ob für dich selbst, dein Team oder dein gesamtes Netzwerk – Plik ist die unkomplizierte Lösung, wenn du die Kontrolle behalten möchtest.

Plik wird auf GitHub zu Verfügung gestellt – ein Open-Source-Projekt von root-gg, das mit durchdachten Features und klarer Ausrichtung auf Selbsthosting überzeugt. Ein echtes Tool von Admins – für Admins.

👥 Techniverse Community

Matrix, Selfhosting, smarte IT-Lösungen und jede Menge Nerd-Talk – das findest du in der Techniverse Community.
Komm vorbei, tausch dich aus und werde ein Teil von uns.
👉 Unsere Gruppe auf Matrix: #community:techniverse.net
Wir freuen uns auf dich!

📑 Ähnliche Beiträge
Migration von MySQL 5.7 zu MySQL 8.0 in Docker

Der Wechsel von MySQL 5.7 auf die neuere Version 8.0 kann auf den ersten Blick einschüchternd wirken. Besonders wenn du Read more

Rustdesk-Server als Dockerlösung

Warum RustDesk? Sicherheitsvorfälle bei zentralisierten Fernwartungslösungen wie AnyDesk und TeamViewer zeigen, wie wichtig unabhängige Alternativen sind. Im Februar 2024 bestätigte Read more

Selbstgehosteter Familien-Stammbaum mit Webtrees

Warum ein selbstgehosteter Stammbaum? Familiengeschichte ist spannend, oder? Wer gehörte zur Familie, wie weit reichen deine Wurzeln zurück, und welche Read more

Element Call einrichten: Verschlüsselte Videoanrufe mit Element X und Matrix Synapse

Seit April 2025 funktionieren Videoanrufe in Element X, Element Web und Element Desktop nicht mehr automatisch – zumindest dann nicht, Read more

Matrix Synapse absichern mit Draupnir Bot & Antispam-Modul

Moderation in Matrix kann schnell anspruchsvoll werden, besonders in offenen Räumen mit vielen unterschiedlichen Teilnehmern.Um diese Aufgaben zuverlässiger und effizienter Read more

Vielen Dank fürs Teilen!