Stirling-PDF selbst hosten: PDF-Werkzeuge ohne Upload
PDFs zusammenführen, verkleinern, schwärzen und per OCR durchsuchbar machen, ohne Upload zu Online-Diensten: Stirling-PDF mit Docker einrichten.
Von Nathan Base
Steuerbescheid, Arbeitsvertrag, Kontoauszüge: Genau die Dokumente, die Du am häufigsten zusammenfügen, verkleinern oder umwandeln musst, enthalten die sensibelsten Daten. Und trotzdem landen sie oft bei einem der vielen kostenlosen Online-Konverter, deren Betreiber Du nicht kennst und deren Server Du nicht kontrollierst.
Stirling-PDF bietet über 50 PDF-Werkzeuge in einer Weboberfläche, die auf Deinem eigenen Server läuft: zusammenführen, aufteilen, Seiten drehen und sortieren, komprimieren, in Word oder Bilder umwandeln, Texterkennung, Schwärzen, Wasserzeichen und Signaturen. Die Dateien verlassen Dein Netz nicht. Diese Anleitung installiert Stirling-PDF mit Docker, schaltet die Anmeldung ein und richtet die deutsche Texterkennung ein. Stand ist Stirling-PDF 3.3, Grundlage sind die Beispieldateien im offiziellen GitHub-Repository.
Was Du brauchst
Einen Linux-Server, Mini-PC oder Raspberry Pi 4 oder 5 mit Docker und dem Compose-Plugin. Stirling-PDF ist ein Java-Programm und braucht für sich rund 1 bis 2 GB RAM, je nach Werkzeug auch mehr. Auf einem Raspberry Pi mit 4 GB läuft es, auf einem Gerät mit 8 GB ist es angenehmer.
Für Zugriff von außen brauchst Du eine Subdomain mit HTTPS. Für die Nutzung im Heimnetz oder über ein VPN reicht die IP-Adresse.
Schritt 1: Stirling-PDF mit Docker Compose starten
Lege die Ordner an und erstelle die Compose-Datei:
mkdir -p ~/stirling-pdf/tessdata ~/stirling-pdf/configs ~/stirling-pdf/logs
cd ~/stirling-pdf
nano compose.ymlFüge diesen Inhalt ein:
services:
stirling-pdf:
image: docker.stirlingpdf.com/stirlingtools/stirling-pdf:latest
container_name: stirling-pdf
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- ./tessdata:/usr/share/tessdata
- ./configs:/configs
- ./logs:/logs
environment:
SECURITY_ENABLELOGIN: "true"
SECURITY_INITIALLOGIN_USERNAME: admin
SECURITY_INITIALLOGIN_PASSWORD: ein-langes-startpasswort
SYSTEM_DEFAULTLOCALE: de-DE
SYSTEM_MAXFILESIZE: "200"Was die Einstellungen bewirken:
SECURITY_ENABLELOGINschaltet die Anmeldung ein. Ohne sie kann jeder im Netz die Werkzeuge nutzen. Im Heimnetz mag das gehen, sobald der Dienst aus dem Internet erreichbar ist, ist der Login Pflicht.SECURITY_INITIALLOGIN_USERNAMEundSECURITY_INITIALLOGIN_PASSWORDlegen das erste Administratorkonto fest. Ersetze das Passwort durch ein eigenes. Es gilt nur für die erste Anmeldung, danach änderst Du es in der Oberfläche.SYSTEM_DEFAULTLOCALE: de-DEstellt die Oberfläche auf Deutsch.SYSTEM_MAXFILESIZEbegrenzt die Größe hochgeladener Dateien in Megabyte.- Der Ordner
tessdataenthält die Sprachdaten für die Texterkennung. Dazu gleich mehr.
Starte den Container:
docker compose up -dDer erste Start dauert etwa eine Minute, weil Java hochfahren muss. Mit docker compose logs -f siehst Du, wann Stirling-PDF bereit ist.
Schritt 2: Anmelden und Passwort ändern
Öffne http://IP-DES-SERVERS:8080 im Browser und melde Dich mit dem Benutzer admin und dem Startpasswort an. Ändere das Passwort danach in den Kontoeinstellungen. Als Administrator kannst Du dort auch weitere Benutzer für Familie oder Kollegen anlegen.
Entferne anschließend die Zeile mit SECURITY_INITIALLOGIN_PASSWORD aus der compose.yml, damit das Startpasswort nicht im Klartext auf dem Server liegen bleibt, und starte neu mit docker compose up -d.
Schritt 3: Deutsche Texterkennung einrichten
Gescannte Dokumente sind für den Computer nur Bilder. Mit der Texterkennung, kurz OCR, macht Stirling-PDF daraus durchsuchbare PDFs, in denen Du Text markieren und kopieren kannst. Die Erkennung übernimmt Tesseract, und Tesseract braucht für jede Sprache eine Datei mit Sprachdaten.
Lade die Dateien für Deutsch und Englisch aus dem offiziellen Tesseract-Repository in den Ordner tessdata:
cd ~/stirling-pdf/tessdata
curl -LO https://github.com/tesseract-ocr/tessdata_fast/raw/main/deu.traineddata
curl -LO https://github.com/tesseract-ocr/tessdata_fast/raw/main/eng.traineddata
cd ..
docker compose restartDie Variante tessdata_fast ist schnell und für normale Dokumente genau genug. Weil der Ordner als Volume eingebunden ist, ersetzt er den Inhalt im Container, deshalb lädst Du Englisch mit herunter. Nach dem Neustart steht Deutsch im OCR-Werkzeug zur Auswahl.
Die nützlichsten Werkzeuge im Alltag
Die Oberfläche hat eine Suchleiste, über die Du jedes Werkzeug schnell findest. Diese wirst Du am häufigsten brauchen:
- Zusammenführen: mehrere PDFs zu einem, etwa alle Belege für die Steuererklärung.
- Komprimieren: große Scans auf eine Größe bringen, die ein Upload-Formular von Behörde oder Versicherung annimmt.
- OCR: Scans durchsuchbar machen.
- Schwärzen: Textstellen dauerhaft entfernen, etwa Kontonummern, bevor Du ein Dokument weitergibst. Anders als ein schwarzer Balken in einem normalen PDF-Programm entfernt das Werkzeug den Text darunter, wenn Du die Option zum Umwandeln in ein Bild-PDF wählst.
- Seiten organisieren: Reihenfolge ändern, Seiten löschen oder drehen, etwa nach einem schief eingezogenen Scan.
- Konvertieren: PDF in Word, Bilder oder umgekehrt.
Mehrere Schritte nacheinander lassen sich als Pipeline speichern. So wird aus „zusammenführen, OCR, komprimieren“ ein einziger Klick.
Von außen erreichbar machen
Willst Du Stirling-PDF auch unterwegs nutzen, gehört HTTPS davor, zum Beispiel mit Caddy und einem Eintrag wie diesem in /etc/caddy/Caddyfile:
pdf.example.com {
reverse_proxy localhost:8080
}Läuft Coolify, trägst Du die Domain dort ein. Noch sicherer ist es, den Dienst gar nicht ins Internet zu stellen und unterwegs über ein VPN wie Tailscale darauf zuzugreifen. Wenn Du mehrere Dienste mit einer gemeinsamen Anmeldung absichern willst, kann Stirling-PDF auch per OpenID Connect an einen Identity Provider angebunden werden, wie in Authentik einrichten: ein Login für alle eigenen Dienste beschrieben. Einige dieser Anmeldeverfahren gehören allerdings zu den kostenpflichtigen Funktionen.
Typische Fehler
Die Seite lädt nicht, der Container startet immer wieder neu. Meist fehlt Arbeitsspeicher. Prüfe mit docker compose logs, ob dort OutOfMemoryError steht, und gib dem Server mehr RAM oder schließe andere Dienste.
OCR bietet Deutsch nicht an. Die Datei deu.traineddata liegt nicht im richtigen Ordner, oder der Container wurde nicht neu gestartet. Prüfe mit docker exec stirling-pdf ls /usr/share/tessdata.
Große Dateien brechen beim Hochladen ab. Erhöhe SYSTEM_MAXFILESIZE. Läuft ein Reverse Proxy davor, hat auch er oft eine eigene Grenze für die Größe von Uploads.
Fazit
Stirling-PDF ersetzt die vielen Online-Konverter durch einen Dienst, der Deine Dokumente nicht aus der Hand gibt. Die Einrichtung dauert eine Viertelstunde, die wichtigsten Punkte sind der Login und die deutschen Sprachdaten für die Texterkennung. Wenn Du Deine Papierdokumente nicht nur bearbeiten, sondern automatisch archivieren willst, ist Paperless-ngx: Papierpost scannen und automatisch ablegen die passende Ergänzung.
Weiterlesen.
-
Raspberry Pi & LinuxPaperless-ngx: Papierpost scannen und automatisch ablegen
Paperless-ngx mit Docker installieren, Briefe per iPhone scannen, deutsche Texterkennung einstellen und Rechnungen automatisch sortieren lassen.
Nathan Base -
iPhone & iPadiOS 26: Dokumente scannen und PDFs kleiner machen
Die Dateien-App scannt Dokumente direkt als PDF, und der richtige Farbfilter macht sie klein. So scannst Du und verkleinerst fertige PDFs.
Nathan Base -
Web & CodeAuthentik einrichten: ein Login für alle eigenen Dienste
Single Sign-on für Selfhosting: Authentik mit Docker installieren, absichern und Immich per OpenID Connect anbinden, damit ein Konto für alles reicht.
Nathan Base -
Web & Codesops und age: .env-Dateien verschlüsselt in Git
Passwörter und API-Schlüssel aus .env-Dateien mit sops und age verschlüsselt ins Git-Repository legen und auf dem Server direkt mit Docker Compose nutzen.
Nathan Base -
Web & CodeForgejo: eigener Git-Server mit Docker statt GitHub
Forgejo mit Docker Compose installieren, per SSH nutzen und Repositories von GitHub übernehmen, für Code und Konfigurationen, die privat bleiben.
Nathan Base -
Web & CodeDocker-Container aktualisieren: Diun statt Watchtower
Watchtower ist eingestellt. Mit Diun und ntfy erfährst Du von neuen Docker-Images und aktualisierst Container kontrolliert statt blind.
Nathan Base