PrivateBin per Docker sicher im Heimnetz betreiben¶
Veröffentlicht am 22. August 2026 · Geschätzte Lesezeit: 5 Minuten
PrivateBin teilt Text und kleine Dateien über zeitlich begrenzte Links. Die Verschlüsselung und Entschlüsselung findet im Browser statt; der Server speichert beim üblichen Dateisystem-Backend nur verschlüsselte Inhalte. Die Installation dauert ungefähr 15 Minuten. Für eine öffentliche Nutzung ist zusätzlich HTTPS zwingend erforderlich.
Voraussetzungen
- Ein Linux-Server mit Docker und Docker Compose
- Der Port 8080 ist im Heimnetz frei
sudofür das Setzen der Ordnerrechte- Eine feste IP-Adresse für den Docker-Server
- Für externen Zugriff eine Domain und ein HTTPS-Reverse-Proxy
1. Arbeitsordner vorbereiten¶
Führe diesen Befehl auf dem Docker-Server aus. Er erstellt Projekt- und Datenordner und wechselt in den Projektordner:
Das offizielle Image erwartet für den eingebundenen Datenordner die Benutzer-ID 65534 und
die Gruppen-ID 82. Setze deshalb die passenden Besitzrechte:
Docker mit User-Namespace-Zuordnung
Verwendet dein Docker-Dienst userns-remap, müssen die zugeordneten Unter-UIDs und
Unter-GIDs berücksichtigt werden. Prüfe in diesem Sonderfall die offizielle Image-
Dokumentation, statt die Zahlen unverändert zu übernehmen.
2. Compose-Datei anlegen¶
Lege im Ordner ~/docker/privatebin eine Datei compose.yaml mit folgendem Inhalt an:
services:
privatebin:
image: privatebin/nginx-fpm-alpine:stable
container_name: privatebin
restart: unless-stopped
read_only: true
environment:
TZ: Europe/Berlin
PHP_TZ: Europe/Berlin
ports:
- "8080:8080"
volumes:
- ./data:/srv/data
tmpfs:
- /tmp:nodev,noexec,mode=1777
- /run:nodev,exec,mode=1777
- /var/lib/nginx/tmp:nodev,noexec
./data bewahrt Pastes und notwendige Dienstdaten dauerhaft auf. Das Root-Dateisystem des
Containers ist schreibgeschützt; nur Daten- und temporäre Verzeichnisse bleiben beschreibbar.
Die temporären Inhalte verschwinden bei einem Container-Neustart.
3. Konfiguration prüfen und starten¶
Prüfe im Projektordner zuerst die Compose-Syntax:
Starte PrivateBin im Hintergrund:
Kontrolliere den Zustand:
Bei einem Fehler zeigen die letzten Protokollzeilen weitere Hinweise:
4. Erste verschlüsselte Nachricht testen¶
Öffne im Heimnetz http://<server-ip>:8080. Ersetze <server-ip> durch die feste IP-Adresse
des Docker-Servers. Schreibe einen harmlosen Testsatz, wähle eine kurze Ablaufzeit und erstelle
den Paste. Öffne den erzeugten Link in einem privaten Browserfenster.
Aktiviere für einen zweiten Test Nach dem Lesen löschen. Nach dem ersten Abruf darf der Inhalt über denselben Link nicht erneut erscheinen.
Schlüssel steckt im geteilten Link
Der Entschlüsselungsschlüssel befindet sich im Fragment des erzeugten Links. Wer den vollständigen Link erhält, kann den Inhalt lesen. Teile Link und zusätzliches Passwort bei besonders sensiblen Daten über getrennte Kommunikationswege.
5. HTTPS für externen Zugriff verwenden¶
Veröffentliche Port 8080 nicht direkt über eine Routerfreigabe. Das offizielle Image stellt nur HTTP bereit. Für externen Zugriff muss ein Reverse-Proxy mit gültigem HTTPS-Zertifikat davor liegen; alternativ verwendest du ein privates VPN.
HTTP schützt den Browser-Code nicht
Die Verschlüsselung im Browser ersetzt HTTPS nicht. Ohne HTTPS könnte ein Angreifer auf dem Übertragungsweg den ausgelieferten JavaScript-Code verändern und dadurch Klartext oder Schlüssel abgreifen.
Beschränke den Reverse-Proxy auf die benötigte Domain, aktiviere automatische Zertifikats- erneuerung und halte Proxy sowie PrivateBin aktuell. Trage niemals geheime Werte in die Compose-Datei oder in öffentlich sichtbare Proxy-Beispiele ein.
6. Gespeicherte Daten kontrollieren¶
Das Image enthält ein Verwaltungswerkzeug. Dieser Befehl zeigt Statistiken des Dateisystem- Backends, ohne Paste-Inhalte zu entschlüsseln:
Abgelaufene Einträge kannst du bei Bedarf manuell bereinigen:
PrivateBin entfernt abgelaufene Pastes normalerweise bei Zugriffen nach seiner Konfiguration. Der manuelle Aufruf ist hilfreich, wenn die Instanz nur selten verwendet wird.
7. Backup und Rückweg¶
Stoppe PrivateBin kurz, damit sich während der Sicherung keine Dateien ändern:
Erstelle ein datiertes Archiv aus Datenordner und Compose-Datei:
Starte den Dienst danach wieder:
Prüfe, ob das Archiv lesbar ist:
Bewahre das Archiv verschlüsselt auf einem zweiten System auf. Zum Zurückkehren stoppst du den
Container, entpackst das Archiv in ~/docker/privatebin, setzt bei Bedarf erneut die Rechte
65534:82 für data und startest den Stack.
8. Aktualisieren¶
Lege zuerst das Backup aus Schritt 7 an. Lade dann das aktuelle stabile Image:
Erstelle den Container mit unveränderten Daten neu:
Teste anschließend einen neuen Paste mit kurzer Ablaufzeit. Das Volume ./data darf beim
Update nicht gelöscht oder durch einen leeren Pfad ersetzt werden.
9. Typische Fehler¶
- Der Container meldet fehlende Schreibrechte: Setze für
dataerneut den Besitzer mitsudo chown -R 65534:82 data. - Port 8080 ist belegt: Prüfe mit
sudo ss -ltnp | grep ':8080'oder ändere nur die linke Zahl, zum Beispiel auf8081:8080. - Nach dem Neustart fehlen Pastes: Kontrolliere, ob
./data:/srv/dataweiterhin eingebunden ist und du den Stack im richtigen Ordner gestartet hast. - Der Reverse-Proxy zeigt eine unsichere Seite: Prüfe Zertifikat, Domain und Weiterleitungsziel; verwende öffentlich niemals die HTTP-Adresse des Containers.
- Ablaufzeiten wirken falsch: Ändere
PHP_TZnicht nachträglich ohne Grund, weil dies die berechneten Ablaufzeitpunkte beeinflussen kann.
10. Quellen und Videos¶
- Offizielles PrivateBin-Docker-Image und Sicherheitsoptionen
- Offizielles PrivateBin-Projekt
- Offizielle PrivateBin-Webseite
- Video: PrivateBin mit Docker selbst hosten
- Video: PrivateBin sicher auf einem Linux-Server installieren
Fertig¶
PrivateBin läuft jetzt mit schreibgeschütztem Container und dauerhaftem Datenordner im
Heimnetz. Erstelle über http://<server-ip>:8080 einen Paste mit kurzer Ablaufzeit, öffne ihn
in einem privaten Fenster und prüfe anschließend, ob er nach der gewählten Frist oder nach dem
ersten Lesen nicht mehr verfügbar ist.