// Tutorial · Self-Hosting · Dateitransfer

PsiTransfer selbst hosten: Dateien sicher teilen ohne Konto

📅 06.09.2026 ⏱8 Min. Lesezeit ✍️ Redaktion

Dateien teilen, ohne ein Konto anzulegen: PsiTransfer bündelt mehrere Dateien in einem Bucket mit Ablaufdatum, optionalem Passwortschutz und begrenztem Speicherverbrauch. Mit Docker Compose ist der eigene File-Sharing-Dienst in wenigen Minuten einsatzbereit.

Warum PsiTransfer?

Große Dateien an Freunde oder Kollegen zu schicken, endet sonst schnell bei Portalen mit Werbung, Größenlimits und Konto-Zwang. PsiTransfer ist eine schlanke Open-Source-Alternative: Du lädst eine oder mehrere Dateien hoch, bekommst einen Link mit Ablaufzeit und bist fertig – ganz ohne Registrierung, für den Empfänger ohne App.

Anders als E2E-Dienste wie SkySend liegt der Fokus hier auf einfacher, gruppierter Weitergabe („Buckets“) statt auf maximaler Geheimhaltung – wer den Link hat, kann laden. Für sensible Daten zusätzlich ein Passwort setzen.

Live ausprobieren: Die Instanz der Community findest du unter psi.huuu.biz – ideal, um das Konzept vor dem Selbst-Hosten zu testen.

Konzept: Buckets statt Konten

Das Kernkonzept von PsiTransfer ist der Bucket: eine Gruppe von Dateien, die gemeinsam über einen Link geteilt werden. Wird eine Datei hochgeladen, läuft für den Bucket eine Ablaufzeit; danach räumt PsiTransfer die Daten automatisch ab.

  • Keine Konten: Weder Absender noch Empfänger brauchen ein Benutzerkonto.
  • Mehrere Dateien pro Link: Ganze Ordner-Sets in einem Rutsch – der Empfänger lädt alles oder einzeln herunter.
  • Ablaufzeiten & Limits: Der Server erzwingt Retentionszeit, Dateigröße und Bucket-Größe.
  • Optional geschützt: Ein Upload-Passwort verhindert ungewollte Uploads durch Dritte; das Admin-Passwort schützt den administrativen Zugriff.
  • Kein Backend-Zwang: Dateien liegen auf deiner Platte – kein Cloud-Anbieter im Spiel.

Vorbereitung: Volume & Nutzer

PsiTransfer speichert seine Daten im Volume /data. Das offizielle Image erwartet, dass dieses Verzeichnis dem Benutzer mit UID 1000 gehört – deine Zeile user: 1000:1000 ist hier also korrekt und wichtig (im Gegensatz zu vielen anderen Images!):

mkdir -p /opt/stacks/psi
sudo chown -R 1000:1000 /opt/stacks/psi

Außerdem solltest du dir für Passwörter eine .env anlegen und in der Compose-Datei referenzieren (mehr unter „Konfiguration“).

Docker Compose – die Datei

services:
  psitransfer:
    container_name: psitransfer
    image: psitrax/psitransfer:2   # statt :latest besser 2.x-Tag pinnen
    user: 1000:1000                # muss Owner von /data sein (offiziell!)
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: "4.0"
          memory: 4G
    ports:
      - "127.0.0.1:50516:3000"     # Web-UI nur lokal
    volumes:
      - /opt/stacks/psi:/data
    environment:
      - PSITRANSFER_ADMIN_PASS=${PSITRANSFER_ADMIN_PASS}
      - PSITRANSFER_UPLOAD_PASS=${PSITRANSFER_UPLOAD_PASS}
      - PSITRANSFER_DEFAULT_RETENTION=3600
      - PSITRANSFER_MAX_FILE_SIZE=118111600640
      - PSITRANSFER_MAX_BUCKET_SIZE=118111600640

Gegenüber deiner Vorlage bereinigt: der leere networks: {}-Block und network_mode: bridge (beides Standard/tot), Werte in Anführungszeichen, Passwörter in die .env ausgelagert und das Image auf das stabile :2-Tag gepinnt.

Wichtig zu den Größenwerten: 118111600640 Byte entsprechen exakt 110 GiB – das ist kein Tippfehler, sondern dein gesetztes Datei- bzw. Bucket-Limit.

Konfiguration: Env-Variablen

VariableBedeutungDein Wert
PSITRANSFER_ADMIN_PASSSchützt den administrativen Zugriffaus .env
PSITRANSFER_UPLOAD_PASSErzwingt Passwort für neue Uploads (verhindert Missbrauch bei öffentlicher Instanz)aus .env
PSITRANSFER_DEFAULT_RETENTIONStandard-Ablaufzeit eines Buckets in Sekunden3600 (1 h)
PSITRANSFER_MAX_FILE_SIZEMaximale Dateigröße pro Datei in Byte118111600640 (110 GiB)
PSITRANSFER_MAX_BUCKET_SIZEMaximale Gesamtgröße eines Buckets in Byte118111600640 (110 GiB)

Weitere Optionen (z. B. Speicherpfad, Sitzungsdauer) richtest du über Umgebungsvariablen mit PSITRANSFER_-Präfix oder eine config.production.js ein – Details in der Projekt-Doku. Die genauen Schlüsselnamen unterscheiden sich je nach Version, daher bei Updates kurz die Doku prüfen.

Passwörter im Klartext: In deiner Compose-Datei stehen adm1npassw0rd und psiuploadpass# im Klartext. Bitte in eine .env (chmod 600) auslagern und echte, längere Passwörter verwenden.

Reverse Proxy & große Uploads

Die Web-UI lauscht nur auf 127.0.0.1:50516 – der Zugriff läuft also über deinen Reverse Proxy mit HTTPS. Für große Uploads müssen Proxy und Webserver mitspielen (Standard-Limit ist oft 1 MB):

server {
  listen 443 ssl;
  http2 on;
  server_name files.meine.domain;

  client_max_body_size 0;          # Uploads nicht durch Proxy begrenzen

  location / {
    proxy_pass http://127.0.0.1:50516;
    proxy_http_version 1.1;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_read_timeout 3600s;      # lange Uploads nicht abbrechen
    proxy_send_timeout 3600s;
  }
}

Kein WebSocket-Upgrade nötig – PsiTransfer ist ein klassischer Upload/Download-Dienst.

Erster Start & erster Upload

cd /opt/stacks && docker compose up -d
docker compose logs -f psitransfer   # Start abwarten
curl -I http://127.0.0.1:50516        # sollte 200 liefern

Danach im Browser öffnen, Dateien auswählen und auf Upload klicken – du erhältst sofort den Freigabe-Link samt Ablaufzeit. Der Empfänger öffnet den Link und lädt herunter oder per Kommandozeile:

curl -OJ "https://files.meine.domain/DEIN-BUCKET-NAME"

Wenn du PSITRANSFER_UPLOAD_PASS gesetzt hast, verlangt die Upload-Seite dieses Passwort – der Download-Link bleibt davon unberührt.

Backups, Updates & Aufräumen

  • Kein klassisches Backup nötig: Buckets löschen sich nach Ablauf selbst – es sind keine dauerhaften Nutzerdaten.
  • Platte im Blick behalten: Bei langer Retentionszeit und 110 GiB-Limits kann /data ordentlich füllen; du -sh /opt/stacks/psi regelmäßig prüfen.
  • Updates: Image-Tag pinnen (:2) und nach docker compose pull + up -d die Konfig-Schlüssel gegen die Doku prüfen.
  • Watchtower: unkritisch, PsiTransfer startet nach Update schnell neu – bestehende Bucket-Links bleiben gültig, da nur /data zählt.

Häufige Probleme (FAQ)

ProblemLösung
Große Uploads brechen abclient_max_body_size 0 im Proxy setzen und Timeouts erhöhen.
„Upload nicht erlaubt“ / Passwort-DialogPSITRANSFER_UPLOAD_PASS ist gesetzt – Passwort eingeben oder Variable entfernen.
Permission-Denied auf /dataVolume muss UID 1000 gehören: sudo chown -R 1000:1000 /opt/stacks/psi.
Buckets verschwinden zu frühPSITRANSFER_DEFAULT_RETENTION erhöhen (Wert in Sekunden).
Env-Änderungen wirken nichtContainer neu erstellen: docker compose up -d --force-recreate.
Welche Tags gibt es?latest = Master, 2 = aktuelle 2.x-Stable – :2 verwenden.

Fazit

PsiTransfer ist der unkomplizierteste Weg, um ohne Konto- und Cloud-Zwang Dateien weiterzugeben – wer ein ähnliches Tool mit Ende-zu-Ende-Verschlüsselung sucht, findet bei SkySend im Blog eine passende Ergänzung.

Merksätze:/data muss UID 1000 gehören – die user: 1000:1000-Zeile ist hier Pflicht. ② Ablaufzeit = automatisches Aufräumen, Speicherplatz trotzdem überwachen. ③ Upload-Passwort setzen, wenn die Instanz öffentlich erreichbar ist. ④ Proxy-Limits für große Uploads anheben (client_max_body_size 0).
📝
....

Wir betreiben unsere komplette Infrastruktur selbst auf Open-Source-Software und schreiben nur über Tools, die wir im Alltag wirklich einsetzen. Fragen zum Artikel? Schreib uns.