Nachtrag zu Paperless-NGX

Das Rennen um das passende DMS für mich ist sehr knapp oder genauer gesagt zu knapp ausgegangen. Daher habe ich noch etwas weiter recherchiert und heraus gefunden, dass die Anzahl der von Paperless-NGX unterstützten Fileformate sich durch den Einsatz von zwei weiteren Server-Softwarepaketen steigern läßt. Dabei handelt es sich um den Apache Tika-Server, welche wie ich es verstanden habe aus den übergebenen Dateien Metadaten und Text extrahiert, und die Serversoftware Gotenberg, welche wiederum sehr viele Formate zu PDF wandeln kann.

Diese beiden werde ich jetzt bei meinem Test Paperless-NGX Setup der Einfachheit halber als Docker Container nachinstallieren und in Paperless-NGX einbinden. So zumindest die Idee. Wer nur das Resultat von Testnummer 6 – Paperless-NGX Unterstütze File-Formate und das Gesamtergebnis sehen möchte spult entsprechend vor.

1. Softwareupdate

Wie immer starte ich beim Linux selbst und mache einen Softwareupdate auf den aktuellen Stand.

sudo apt update
sudo apt upgrade

Anschließend noch der Test, ob mein Paperless-NGX auch weiterhin sauber läuft.

Was es glücklicherweise macht. Ein No-Brainer…

2. Docker Installation

Na dann wollen wir mal die Umgebung für Docker Container schaffen, um auf dem schnellen Weg die Software vom DockerHub zu nutzen.

user@2204lts:~$ sudo apt-get remove docker docker-engine docker.io containerd runc
[sudo] password for user: 
Paketlisten werden gelesen… Fertig
Abhängigkeitsbaum wird aufgebaut… Fertig
Statusinformationen werden eingelesen… Fertig
E: Paket docker-engine kann nicht gefunden werden.
user@2204lts:~$ 

Okay, da ich noch kein Docker auf dem Paperless-NGX Testsystem hatte, gibt es da auch nichts zum Deinstallieren. 😉

Dann wollen wir mal das passende Repo anlegen.

sudo apt-get install ca-certificates curl gnupg lsb-release
0 aktualisiert, 0 neu installiert, 0 zu entfernen und 0 nicht aktualisiert.

War alles schon vorhanden, dann weiter mit dem holen und ablegen des Docker-Schlüsselbundes.

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

user@2204lts:~$ ls -la /etc/apt/keyrings/
total 12
drwxr-xr-x 2 root root 4096 Sep 19 17:06 .
drwxr-xr-x 8 root root 4096 Apr 24 10:28 ..
-rw-r--r-- 1 root root 2760 Sep 19 17:06 docker.gpg
user@2204lts:~$ 

Der Schlüsselbund ist abgeholt, damit kann dann die vom DockerHub stammende Software auf Echtheit geprüft werden. Dann wollen wir mal das zum Ubuntu22.04lts Server passende Repo festlegen.

user@2204lts:~$     echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null


user@2204lts:~$ more /etc/apt/sources.list.d/docker.list
deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu       jammy stable
user@2204lts:~$ 

Mit dem zum Ubuntu passenden Repo Eintrag kann es losgehen.. Dann Updaten wir mal das Repo Inhaltsverzeichnis und holen wir uns anschließend die Docker-Engineen.

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Das ist dem Bash-Output nach auch gut durchgelaufen. Ein kurzer Check ob die Docker-Engineen auch läuft.

user@2204lts:~$ sudo service docker status
● docker.service - Docker Application Container Engine
     Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2022-09-19 17:12:44 UTC; 1min 39s ago
TriggeredBy: ● docker.socket
       Docs: https://docs.docker.com
   Main PID: 1959 (dockerd)
      Tasks: 9
     Memory: 24.6M
        CPU: 365ms
     CGroup: /system.slice/docker.service
             └─1959 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

Sep 19 17:12:43 2204lts dockerd[1959]: time="2022-09-19T17:12:43.848778162Z" level=info msg="scheme \"unix\" not registered, fallback to default scheme" modul>
Sep 19 17:12:43 2204lts dockerd[1959]: time="2022-09-19T17:12:43.848811612Z" level=info msg="ccResolverWrapper: sending update to cc: {[{unix:///run/container>
Sep 19 17:12:43 2204lts dockerd[1959]: time="2022-09-19T17:12:43.848829302Z" level=info msg="ClientConn switching balancer to \"pick_first\"" module=grpc
Sep 19 17:12:43 2204lts dockerd[1959]: time="2022-09-19T17:12:43.879898075Z" level=info msg="Loading containers: start."
Sep 19 17:12:44 2204lts dockerd[1959]: time="2022-09-19T17:12:44.088564237Z" level=info msg="Default bridge (docker0) is assigned with an IP address 172.17.0.>
Sep 19 17:12:44 2204lts dockerd[1959]: time="2022-09-19T17:12:44.179289025Z" level=info msg="Loading containers: done."
Sep 19 17:12:44 2204lts dockerd[1959]: time="2022-09-19T17:12:44.198141256Z" level=info msg="Docker daemon" commit=e42327a graphdriver(s)=overlay2 version=20.>
Sep 19 17:12:44 2204lts dockerd[1959]: time="2022-09-19T17:12:44.198309833Z" level=info msg="Daemon has completed initialization"
Sep 19 17:12:44 2204lts systemd[1]: Started Docker Application Container Engine.
Sep 19 17:12:44 2204lts dockerd[1959]: time="2022-09-19T17:12:44.229125694Z" level=info msg="API listen on /run/docker.sock"
lines 1-22/22 (END)

So soll das Aussehen, die Engineen läuft sauber. Wir können also weiter machen und die beiden Servercontainer vom DockerHub abholen und starten.

3. Apache Tika-Server Installieren

Wenn ich mich recht erinner war das nur ein pull vom DockerHub und ein run, dann sollte der Software laufen.

user@2204lts:~$ sudo docker pull apache/tika
Using default tag: latest
latest: Pulling from apache/tika
d5fd17ec1767: Pull complete 
3d74ce657280: Pull complete 
8b587b148104: Pull complete 
a7ee74c4130d: Pull complete 
cf5c1973ef27: Pull complete 
Digest: sha256:112881bf53f1b32bbb896f2569b6e129c494f3545dafacc62d3ad70fac78ce4b
Status: Downloaded newer image for apache/tika:latest
docker.io/apache/tika:latest
user@2204lts:~$

Damit haben wir jetzt das Image vom DockerHub geladen. Ein kurzer Blick auf unsere lokalen Images. Da sollte jetzt das Tika Image zu sehen sein.

user@2204lts:~$ sudo docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
apache/tika   latest    3a8c80c1ea4c   4 months ago   435MB
user@2204lts:~$ 

Da ist es auch, als latest getagged. Damit haben wir das Image startklar für den Tika-Server. Als nächstes starten wir den Apache Tika-Server als Cotainer im Docker.

user@2204lts:~$ sudo docker run -d -p 9998:9998 apache/tika
[sudo] password for user: 
b48fba76a67863705b0c5368823ed557f99255c20969772ad0b0946ffcfb3ccc
user@2204lts:~$ 

Die Container-Engineen hat nicht gemäckert, sehen wir mal nach, ob der Tike-Server läuft.

user@2204lts:~$ sudo docker container ls
CONTAINER ID   IMAGE         COMMAND                  CREATED              STATUS              PORTS                                       NAMES
b48fba76a678   apache/tika   "/bin/sh -c 'exec ja…"   About a minute ago   Up About a minute   0.0.0.0:9998->9998/tcp, :::9998->9998/tcp   laughing_brahmagupta
user@2204lts:~$ 

Das schaut gut aus. Noch einen flüchtigen Blick in die offenen Sockets.

user@2204lts:~$ sudo netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
<snip>
tcp        0      0 0.0.0.0:9998            0.0.0.0:*               LISTEN      1330/docker-proxy   
<snip>
user@2204lts:~$ 

Okay, der Docker Proxy hat den Port 9998 aufgemacht, was dann wohl unser Tika-Server sein sollte. 😉

Nun hatte ich bisher keine Überlappung mit dem Tika-Server, aber wir können ihn ja einfach mal fragen, wer auf der Socket 9998 lauscht.

user@2204lts:~$ curl -X GET http://localhost:9998/tika
This is Tika Server (Apache Tika 2.4.0). Please PUT
user@2204lts:~$ 

Er gibt sich selber als Tika-Server Version 2.4.0 zu erkennen. Also würde ich sagen, das war ein gültiger Versuch. Ach ja, was ich vergessen hatte war den Container Reboot fest zu machen. Das holen wir mal nach..

user@2204lts:~$ sudo docker run -d -p 9998:9998 --restart unless-stopped apache/tika
[sudo] password for user: 
c26935650b979caa238966ea5bdac98fcc5f3db3aeefaa4daf75a27d84a0adc4


user@2204lts:~$ sudo docker container ls
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                                       NAMES
c26935650b97   apache/tika   "/bin/sh -c 'exec ja…"   18 seconds ago   Up 18 seconds   0.0.0.0:9998->9998/tcp, :::9998->9998/tcp   interesting_raman
user@2204lts:~$ 

4. Gotenberg-Server installieren

Nun wenden wir uns dem Gotenberg-Server zu. Auch hier werde ich mich aus dem DockerHub bedienen, wobei es scheinbar zwei Gotenberg-Server Container gibt. Laut Anleitung ist der aktuelle wohl der Gotenberg/Gotenberg. Kein Ahnung ob der gegen den thecodingmachine/gotenberg verlinkt ist.. Ich nehme mal den gotenberg/gotenberg aus dem DockerHub.

user@2204lts:~$ sudo docker pull gotenberg/gotenberg
Using default tag: latest
latest: Pulling from gotenberg/gotenberg
7a6db449b51b: Pull complete 
9b3d1a56e5be: Pull complete 
8fbdaff3aac4: Pull complete 
1f65ba53270c: Pull complete 
e9035e1d0bab: Pull complete 
e9a3914669f1: Pull complete 
4f4fb700ef54: Pull complete 
Digest: sha256:37268141a612f603a68b9c41e1b63f85c54254c0577b79340c5118addb8c6dec
Status: Downloaded newer image for gotenberg/gotenberg:latest
docker.io/gotenberg/gotenberg:latest
user@2204lts:~$ 

Damit haben wir das Image abgeholt. Wie immer eine kurze Kontrolle, was wir in unserem Image-Stock haben.

user@2204lts:~$ sudo docker images
REPOSITORY            TAG       IMAGE ID       CREATED        SIZE
gotenberg/gotenberg   latest    f153df718e41   2 weeks ago    1.51GB
apache/tika           latest    3a8c80c1ea4c   4 months ago   435MB
user@2204lts:~$ 

Da sind sie ja beide. Dann wollen wir mal den Gotenberg-Server an die Startrampe rollen und fliegen lassen, jedoch dieses mal gleich mit Reboot-Festigkeit. 🙂

user@2204lts:~$ sudo docker run -d -p 3000:3000 --restart unless-stopped gotenberg/gotenberg
98eb65ca9a1e768803fa267f257148df4d30814520c568f4887da409f108d5ff
user@2204lts:~$ 

Eine kurze Kontrolle, ob unsere beiden Server laufen.

user@2204lts:~$ sudo docker container ls
[sudo] password for user: 
CONTAINER ID   IMAGE                 COMMAND                  CREATED          STATUS         PORTS                                       NAMES
98eb65ca9a1e   gotenberg/gotenberg   "/usr/bin/tini -- go…"   4 minutes ago    Up 3 minutes   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp   beautiful_jackson
c26935650b97   apache/tika           "/bin/sh -c 'exec ja…"   27 minutes ago   Up 3 minutes   0.0.0.0:9998->9998/tcp, :::9998->9998/tcp   interesting_raman
user@2204lts:~$ 

Da sind sie alle beide. Na dann werden wir sie mal im Paperless-NGX mit in der Konfiguration an geben un zur Nutzung einbinden.

5. Einbinden von Tika- und Gotenberg-Server in paperless-NGX

Nachdem nun beide Server laufen binde ich diese in meiner /opt/paperless-ngx/paperless.conf ein. Dafür sind lediglich die Kommentar # zu entfernen, der Rest der Konfiguration sieht bereits sehr stimmig aus.

# Tika settings
PAPERLESS_TIKA_ENABLED=true
PAPERLESS_TIKA_ENDPOINT=http://localhost:9998
PAPERLESS_TIKA_GOTENBERG_ENDPOINT=http://localhost:3000

Anschließend habe ich den Ubuntu Server durchgestartet, damit die Konfigurationsanpassung auch wirkt.

6. Paperless-NGX Unterstütze File-Formate

Okay, ich habe jetzt die Tabelle vom letzten Test eingefügt und die Werte mit den gleichen Testdateien erneut berechnet. Logischerweise ändert sich ebi docspell und Mayan-EDMS nichts.

ExtensionFileformatPunkteDocspellPaperless-NGX (mit Tika und Gotenberg)Mayan-EDMS
.txt / .logASCII Text File50505050
.pdfPDF File50505050
.pptPowerPoint 97–20035005050
.pptxPowerPoint 2007–36550000
.potxPowerPoint 2007–365 Dokumentvorlage 1001
.ppsPowerPoint 97–2003 AutoStart1011
.odpODF-Präsentation2502525
.docWord 97–20035005050
.docxWord 2007–3655005050
.dotWord 97–2003 Dokumentvorlage 1001
.dotxWord 2007–365 Dokumentvorlage1001
.odtODF-Textdokument2502525
.xlsExcel 97–20035005050
.xlsxExcel 2007–3655005050
.csvComma Separated Values50505050
.odsODF-Tabellendokument2502525
.vsdVisio 2003-2010 Zeichnung25000
.vsdxVisio Zeichnung25000
.vssVisio 2003-2030 Schablone1000
.bmpWindows BMP Bild1011
.jpgJPEG Bild50505050
.tiffTIFF Bild1111
.pngPNG Bild50505050
.gifGIF Bild1011
.epubElectronic Publication25000
.rtfRich Text Format2502525
.mobiMobipocket eBook file25000
.htmlHypertext Markup Language File1100
Punktesummemax. 759252604607
Fileformat- Vergleichstabelle

Hui, da hat Paperless-NGX aber deutlich Boden gut gemacht! Tragen wir mal dieses Resultat in die bereits im letzten Vergleichstest erarbeitete Gegenüberstellung und schauen uns das genauer an.

7. Erneute Auswertung und Gesamtergebnis

Hier die überarbeitete Übersicht der Protagonisten und ihre jeweiligen Punktstände in der Übersichtstabelle.

KategoriePunkteDocspellPaperless-NGX (mit Tika und Gotenberg)Mayan-EDMS
Fileformatmax. 759252604607
Such-Operatormax. 30050300300
Dokumentenart/typemax. 200100150100
Ordnertiefemax. 125500125
Kunde/Ansprechpartnermax. 100100500
Taggingmax. 100150150100
Batch Importmax. 100100100100
DMS Accessmax. 200200200150
Gesamtpunktzahlmax. 1884100215541482
Übersichtstabelle

Wie sagt man so schön: “Damit ist für mich die Messe gesungen.”

Der Punktestand geht ganz klar zum Paperless-NGX und ich bin eigentlich ganz froh, dass ich diese kleine Runde im Vergleichstest wiederhalt habe. Nicht das ich etwas gegen Mayan-EDMS einzuwenden hätte, allerdings spricht mich der Intuitive-Umgang mit den Dateien im Paperless-NGX doch deutlich mehr an und kommt meiner Arbeitsweise näher. Dazu kommt, dass die entkoppelte Weiterentwicklung vom Tika- und Gotenberg-Server ein späteres weiteres auftauchen von neuen Fileformaten wahrscheinlicher macht.

Das könnte dich auch interessieren …

6 Antworten

  1. Michael sagt:

    Hallo Eric,

    danke für deinen Input und dein Sharen.
    Ist ja voll geil, das was ich gefühlt habe, hast Du in Worte gekleidet.

    Jetzt fehlt noch eine compose.yml für podman-compose mit paperless-nxg+tika-gotenberg

    🙂

    Docker gefällt mir nicht mehr. ich möchte podman.

    Die Art deiner Dokumentation und Auswertung ist klasse.

    VG
    Michael

    • eric sagt:

      Hallo Michael,

      danke für dein Feedback.
      Leider kann ich dir bei Podman nicht weiter helfen,
      da ich mich da selbst noch nicht mit beschäftigt habe.

      VG, Eric

  2. Michael sagt:

    podman funktioniert ohne Rootrechte, na bist Du angetackert?

    Befehle sind wie von docker, docker-compose

    🙂

  3. Michael sagt:

    Hallo Eric, deine Installation erscheint mir zu kompliziert, warum nutzt Du kein docker-compose?
    https://deployn.de/blog/20220308_paperless-ngx/ Bist Du mit docker geübt? Bei den viele Einzelstarts keine leicht was daneben geht, bzw. sich leicht Fehler einschleichen. VG Michael

    • eric sagt:

      Hallo Michael,

      ich bin so lala mit Docker geübt, mehr leidvoll aber nun ja.. (durch Openstack Projekte).
      Wie gesagt, ich werde es mir in den nächsten Monaten ansehen.

      VG, Eric

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert