PDF Bearbeitung im Browser
PDF-Dokumente im Browser bearbeiten, ohne sie auf fremde Server hochzuladen!

Haben Sie auch schon einmal versucht ein einzelnes Blatt eines PDF-Dokumentes zu drehen? Oder die Seitenreihenfolge zu ändern? Oder mehrere PDFs in ein einziges zusammenzuführen? Und haben sie sich dann gewünscht, ihren eigenen Laptop dabei zu haben, weil da ein Tool vorhanden wäre, mit dem man dies könnte?
Für all diese Probleme bezogen auf PDF-Dokumente habe ich für mich eine Lösung gefunden: Stirling-PDF.
Docker Compose Konfiguration für Stirling PDF
Da sich an meiner Bequemlichkeit nichts geändert hat, werde ich auch dieses Tool wieder einfach per Docker meinem Server hinzufügen. Wie man einen Service im Internet anbietet, habe ich hier bereits beschrieben:

Um Stirling PDF in die bestehende Umgebung zu integrieren, wird der folgende Abschnitt zur docker-compose.yml
Datei hinzugefügt. Dieser Abschnitt definiert den Stirling PDF Container und seine Konfiguration:
stirling-pdf:
container_name: stirling-pdf
image: stirlingtools/stirling-pdf:latest
restart: unless-stopped
depends_on:
- nginx-proxy-manager
networks:
- web
expose:
- 8080
volumes:
- ./stirlingpdf/trainingData:/usr/share/tessdata:rw
- ./stirlingpdf/extraConfigs:/configs:rw
- ./stirlingpdf/customFiles:/customFiles/:rw
- ./stirlingpdf/logs:/logs/:rw
- ./stirlingpdf/pipeline:/pipeline/:rw
environment:
- UI_APP_NAME=Meister PDF Tools
- UI_HOME_DESCRIPTION=My private PDF Toolset.
- UI_APP_NAVBAR_NAME=Meister PDF-Tools
- LANGS=de_DE
cap_drop:
- ALL
cap_add:
- CHOWN
- SETGID
- SETUID
logging:
driver: "json-file"
options:
max-size: "1m"
max-file: "1"
labels:
- com.centurylinklabs.watchtower.enable=true
Im Detail werden folgende Parameter konfiguriert:
stirling-pdf:
: Definiert den Service-Namen innerhalb der Docker Compose Datei. Dieser Name dient als Referenz für andere Services und zur Container-Identifikation.container_name: stirling-pdf
: Legt den Namen des Containers fest. Dies erleichtert die Identifizierung und Verwaltung des Containers über die Docker CLI.image: stirlingtools/stirling-pdf:latest
: Gibt das Docker Image an, das für den Container verwendet werden soll.stirlingtools/stirling-pdf:latest
zieht immer die aktuellste Version von Stirling PDF vom Docker Hub.restart: unless-stopped
: Konfiguriert den Neustart des Containers.unless-stopped
bedeutet, dass Docker versuchen wird, den Container automatisch neu zu starten, falls er unerwartet beendet wird, außer wenn er manuell gestoppt wurde.depends_on: - nginx-proxy-manager
: Stellt sicher, dass dernginx-proxy-manager
Service vor demstirling-pdf
Service gestartet wird. Dies ist wichtig, da Stirling PDF über den Reverse Proxy erreichbar gemacht wird.networks: - web
: Ordnet den Container demweb
Netzwerk zu. Es wird davon ausgegangen, dass ein solches Netzwerk in derdocker-compose.yml
oder extern definiert ist und auch vom Nginx Proxy Manager verwendet wird, um die Kommunikation zwischen den Containern zu ermöglichen.expose: - 8080
: Legt den Port 8080 innerhalb des Docker Netzwerks für den Zugriff durch andere Container offen. Dieser Port wird nicht direkt nach außen (zum Host-System) veröffentlicht, da der Zugriff über den Reverse Proxy erfolgen soll.volumes:
: Definiert persistente Volumes, um Daten des Containers auf dem Host-System zu speichern../stirlingpdf/trainingData:/usr/share/tessdata:rw
: Bindet das lokale Verzeichnis./stirlingpdf/trainingData
an/usr/share/tessdata
im Container. Dies dient der Bereitstellung von Trainingsdaten für OCR (Optical Character Recognition)../stirlingpdf/extraConfigs:/configs:rw
: Bindet das lokale Verzeichnis./stirlingpdf/extraConfigs
an/configs
im Container. Hier können zusätzliche Konfigurationsdateien für Stirling PDF hinterlegt werden../stirlingpdf/customFiles:/customFiles/:rw
: Bindet das lokale Verzeichnis./stirlingpdf/customFiles
an/customFiles/
im Container. Dieses Volume dient der Bereitstellung von benutzerdefinierten Dateien, wie z.B. Vorlagen oder Ressourcen../stirlingpdf/logs:/logs/:rw
: Bindet das lokale Verzeichnis./stirlingpdf/logs
an/logs/
im Container. Hier werden die Logdateien von Stirling PDF gespeichert, um eine spätere Analyse zu ermöglichen../stirlingpdf/pipeline:/pipeline/:rw
: Bindet das lokale Verzeichnis./stirlingpdf/pipeline
an/pipeline/:rw
im Container. Dieses Volume könnte für persistente Pipelines oder Workflow-Definitionen innerhalb von Stirling PDF verwendet werden.
environment:
: Definiert Umgebungsvariablen für den Stirling PDF Container.- UI_APP_NAME=Meister PDF Tools
: Setzt den Anwendungsnamen in der Web-Oberfläche auf "Meister PDF Tools".- UI_HOME_DESCRIPTION=My private PDF Toolset.
: Definiert die Beschreibung auf der Startseite der Web-Oberfläche.- UI_APP_NAVBAR_NAME=Meister PDF-Tools
: Legt den Namen in der Navigationsleiste der Web-Oberfläche fest.- LANGS=de_DE
: Konfiguriert die Sprache der Web-Oberfläche auf Deutsch.
cap_drop: - ALL
: Verwirft alle standardmäßigen Linux Capabilities für den Container. Dies erhöht die Sicherheit, indem dem Container nur die minimal notwendigen Berechtigungen gegeben werden.cap_add:
: Fügt dem Container explizit ausgewählte Linux Capabilities hinzu.- CHOWN
: Ermöglicht dem Container, den Besitzer von Dateien und Verzeichnissen zu ändern.- SETGID
: Ermöglicht dem Container, die Gruppen-ID zu ändern.- SETUID
: Ermöglicht dem Container, die Benutzer-ID zu ändern.
Diese Capabilities sind möglicherweise notwendig, damit Stirling PDF korrekt mit den Volumes und Dateisystemberechtigungen interagieren kann.
logging:
: Konfiguriert das Logging des Docker Containers.driver: "json-file"
: Verwendet denjson-file
Logging-Treiber, der Logmeldungen im JSON-Format in Dateien speichert.options:
: Definiert Optionen für den Logging-Treiber.max-size: "1m"
: Begrenzt die maximale Größe einer Logdatei auf 1 Megabyte.max-file: "1"
: Rotiert Logdateien und behält maximal eine rotierte Datei zusätzlich zur aktuellen Datei.
labels: - com.centurylinklabs.watchtower.enable=true
: Fügt ein Label hinzu, das Watchtower signalisiert, diesen Container automatisch zu aktualisieren, wenn eine neuere Version des Images verfügbar ist.
Nachdem dieser Abschnitt zur docker-compose.yml
Datei hinzugefügt wurde, muss die Konfiguration mit dem Befehl docker compose up -d
neu erstellt werden. Docker Compose wird den stirling-pdf
Container herunterladen (falls nicht bereits vorhanden) und starten.
Integration in Nginx Proxy Manager
Um Stirling PDF über das Internet zugänglich zu machen, muss eine neue Proxy-Konfiguration im Nginx Proxy Manager erstellt werden. Dazu wird im Nginx Proxy Manager eine neue "Proxy Host" Konfiguration angelegt. Die Konfiguration erfolgt wie folgt:

- Domain Name: Hier wird die gewünschte Domain oder Subdomain eingetragen, über die Stirling PDF erreichbar sein soll, z.B.
pdf.example.de
. - Scheme:
http
auswählen, da die Kommunikation innerhalb des Docker Netzwerks unverschlüsselt erfolgen kann und die Verschlüsselung bereits durch den Nginx Proxy Manager für die externe Verbindung sichergestellt wird. - Forward Hostname / IP: Als Hostnamen wird der Name des Stirling PDF Services innerhalb von Docker Compose verwendet, also
stirling-pdf
. - Forward Port: Hier wird der Port
8080
eingetragen, da Stirling PDF intern auf Port 8080 läuft und dieser Port im Docker Compose File viaexpose
freigegeben wurde. - Cache Assets: Diese Option kann deaktiviert bleiben, da Stirling PDF keine statischen Assets im klassischen Sinne ausliefert, die gecached werden müssten.
- Block Common Exploits: Es wird empfohlen, diese Option zu aktivieren, um grundlegende Schutzmaßnahmen gegen bekannte Web-Exploits zu aktivieren.
- Websockets Support: Diese Option kann aktiviert werden, da nicht ausgeschlossen ist, dass Stirling PDF für bestimmte Funktionen Websockets verwendet. Dies schadet in der Regel nicht, selbst wenn keine Websockets benötigt werden.
- SSL: Es wird empfohlen, ein SSL-Zertifikat für die konfigurierte Domain zu verwenden:

Nachdem diese Konfiguration im Nginx Proxy Manager gespeichert wurde, sollte Stirling PDF über die konfigurierte Domain im Browser erreichbar sein.
Anpassung und Konfiguration
Die hier beschriebene Konfiguration stellt eine grundlegende Integration von Stirling PDF dar. Es gibt zahlreiche weitere Anpassungsmöglichkeiten, die über die Umgebungsvariablen und Volumes in der Docker Compose Konfiguration vorgenommen werden können. Die einzelnen Aufgaben, die man nun umsetzen kann, sind selbsterklärend.
In der offizielle Dokumentation von Stirling PDF ( https://github.com/Stirling-Tools/Stirling-PDF ) finden sich detaillierte Informationen zu allen Konfigurationsoptionen.
Besonders nützlich fand ich bisher auch die Konverter:

Fazit
Die Integration von Stirling PDF in eine bestehende Webserver-Umgebung mit Docker Compose und Nginx Proxy Manager ist unkompliziert und ermöglicht es mir, eine Vielzahl von PDF-Bearbeitungsfunktionen einfach über den Browser bereitzustellen. Das erleichtert mir das Zusammenstellen von Dokumenten, die ich z.B. bei Behörden einreichen muss, wenn mal wieder nur ein Dokument hochgeladen werden darf.
Excerpt
Integration von Stirling PDF in bestehende Webserver-Umgebung mit Docker Compose und Nginx Proxy Manager.