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.
Extension | Fileformat | Punkte | Docspell | Paperless-NGX (mit Tika und Gotenberg) | Mayan-EDMS |
---|---|---|---|---|---|
.txt / .log | ASCII Text File | 50 | 50 | 50 | 50 |
PDF File | 50 | 50 | 50 | 50 | |
.ppt | PowerPoint 97–2003 | 50 | 0 | 50 | 50 |
.pptx | PowerPoint 2007–365 | 50 | 0 | 0 | 0 |
.potx | PowerPoint 2007–365 Dokumentvorlage | 1 | 0 | 0 | 1 |
.pps | PowerPoint 97–2003 AutoStart | 1 | 0 | 1 | 1 |
.odp | ODF-Präsentation | 25 | 0 | 25 | 25 |
.doc | Word 97–2003 | 50 | 0 | 50 | 50 |
.docx | Word 2007–365 | 50 | 0 | 50 | 50 |
.dot | Word 97–2003 Dokumentvorlage | 1 | 0 | 0 | 1 |
.dotx | Word 2007–365 Dokumentvorlage | 1 | 0 | 0 | 1 |
.odt | ODF-Textdokument | 25 | 0 | 25 | 25 |
.xls | Excel 97–2003 | 50 | 0 | 50 | 50 |
.xlsx | Excel 2007–365 | 50 | 0 | 50 | 50 |
.csv | Comma Separated Values | 50 | 50 | 50 | 50 |
.ods | ODF-Tabellendokument | 25 | 0 | 25 | 25 |
.vsd | Visio 2003-2010 Zeichnung | 25 | 0 | 0 | 0 |
.vsdx | Visio Zeichnung | 25 | 0 | 0 | 0 |
.vss | Visio 2003-2030 Schablone | 1 | 0 | 0 | 0 |
.bmp | Windows BMP Bild | 1 | 0 | 1 | 1 |
.jpg | JPEG Bild | 50 | 50 | 50 | 50 |
.tiff | TIFF Bild | 1 | 1 | 1 | 1 |
.png | PNG Bild | 50 | 50 | 50 | 50 |
.gif | GIF Bild | 1 | 0 | 1 | 1 |
.epub | Electronic Publication | 25 | 0 | 0 | 0 |
.rtf | Rich Text Format | 25 | 0 | 25 | 25 |
.mobi | Mobipocket eBook file | 25 | 0 | 0 | 0 |
.html | Hypertext Markup Language File | 1 | 1 | 0 | 0 |
Punktesumme | max. 759 | 252 | 604 | 607 |
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.
Kategorie | Punkte | Docspell | Paperless-NGX (mit Tika und Gotenberg) | Mayan-EDMS |
---|---|---|---|---|
Fileformat | max. 759 | 252 | 604 | 607 |
Such-Operator | max. 300 | 50 | 300 | 300 |
Dokumentenart/type | max. 200 | 100 | 150 | 100 |
Ordnertiefe | max. 125 | 50 | 0 | 125 |
Kunde/Ansprechpartner | max. 100 | 100 | 50 | 0 |
Tagging | max. 100 | 150 | 150 | 100 |
Batch Import | max. 100 | 100 | 100 | 100 |
DMS Access | max. 200 | 200 | 200 | 150 |
Gesamtpunktzahl | max. 1884 | 1002 | 1554 | 1482 |
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.
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
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
podman funktioniert ohne Rootrechte, na bist Du angetackert?
Befehle sind wie von docker, docker-compose
🙂
Muss ich mir bei Gelegenheit mal ansehen, wird aber Monate dauern..
Danke für deinen Input.
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
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