PsiTransfer selbst hosten: Dateien sicher teilen ohne Konto
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.
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
| Variable | Bedeutung | Dein Wert |
|---|---|---|
PSITRANSFER_ADMIN_PASS | Schützt den administrativen Zugriff | aus .env |
PSITRANSFER_UPLOAD_PASS | Erzwingt Passwort für neue Uploads (verhindert Missbrauch bei öffentlicher Instanz) | aus .env |
PSITRANSFER_DEFAULT_RETENTION | Standard-Ablaufzeit eines Buckets in Sekunden | 3600 (1 h) |
PSITRANSFER_MAX_FILE_SIZE | Maximale Dateigröße pro Datei in Byte | 118111600640 (110 GiB) |
PSITRANSFER_MAX_BUCKET_SIZE | Maximale Gesamtgröße eines Buckets in Byte | 118111600640 (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.
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
/dataordentlich füllen;du -sh /opt/stacks/psiregelmäßig prüfen. - Updates: Image-Tag pinnen (
:2) und nachdocker compose pull+up -ddie Konfig-Schlüssel gegen die Doku prüfen. - Watchtower: unkritisch, PsiTransfer startet nach Update schnell neu – bestehende Bucket-Links bleiben gültig, da nur
/datazählt.
Häufige Probleme (FAQ)
| Problem | Lösung |
|---|---|
| Große Uploads brechen ab | client_max_body_size 0 im Proxy setzen und Timeouts erhöhen. |
| „Upload nicht erlaubt“ / Passwort-Dialog | PSITRANSFER_UPLOAD_PASS ist gesetzt – Passwort eingeben oder Variable entfernen. |
Permission-Denied auf /data | Volume muss UID 1000 gehören: sudo chown -R 1000:1000 /opt/stacks/psi. |
| Buckets verschwinden zu früh | PSITRANSFER_DEFAULT_RETENTION erhöhen (Wert in Sekunden). |
| Env-Änderungen wirken nicht | Container 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.
/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).