PDF Bearbeitung im Browser

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

PDF Bearbeitung im Browser

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:

Eigener Webserver mit offiziellen Zertifikaten
Der Basis-Artikel für alle folgenden Services, die ich hier demonstrieren werde…

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 der nginx-proxy-manager Service vor dem stirling-pdf Service gestartet wird. Dies ist wichtig, da Stirling PDF über den Reverse Proxy erreichbar gemacht wird.
  • networks: - web: Ordnet den Container dem web Netzwerk zu. Es wird davon ausgegangen, dass ein solches Netzwerk in der docker-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 den json-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 via expose 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.