{"id":1457,"date":"2022-05-07T16:31:01","date_gmt":"2022-05-07T15:31:01","guid":{"rendered":"https:\/\/www.fotoandnet.de\/wp\/?p=1457"},"modified":"2022-09-25T17:54:04","modified_gmt":"2022-09-25T15:54:04","slug":"paperless-ngx-auf-ubuntu-ins","status":"publish","type":"post","link":"http:\/\/www.fotoandnet.de\/wp\/?p=1457","title":{"rendered":"Paperless-ngx (v.1.7.0) auf Ubuntu 22.04lts Server installieren"},"content":{"rendered":"\n<p>Ich bin stark daran interessiert den ganzen sich ansammelnden Papierwust etwas professioneller zu handhaben. Nachdem ich mir dazu auf YT einige echt gute Beitr\u00e4ge von <a rel=\"noreferrer noopener\" href=\"https:\/\/www.youtube.com\/c\/sysopstv\" target=\"_blank\">Christian Zengel<\/a> angesehen habe, will ich mir mal eine VitualBox bauen um mir selbst eine Meinung zu dem Thema bilden zu k\u00f6nnen.<\/p>\n\n\n\n<p>Ich habe mir f\u00fcr solche Zwecke eine standard Ubuntu22.04lts Server aus Ausgangspunkt aufgesetzt und den Klone ich dann je nachdem, was ich testen\/probieren m\u00f6chte.<\/p>\n\n\n\n<p>Die <a href=\"https:\/\/github.com\/paperless-ngx\/paperless-ngx\/blob\/main\/requirements.txt\" target=\"_blank\" rel=\"noreferrer noopener\">Requirements auf GIT zu Paperless-NGX<\/a> sind schon sehr umfangreich, also zerlegen wir das mal in handliche Portionen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"436\" height=\"472\" src=\"https:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/paperless-ngx-framework.jpg\" alt=\"\" class=\"wp-image-1465\" srcset=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/paperless-ngx-framework.jpg 436w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/paperless-ngx-framework-277x300.jpg 277w\" sizes=\"auto, (max-width: 436px) 100vw, 436px\" \/><figcaption>Paperless-ngx framework<\/figcaption><\/figure>\n\n\n\n<p>Zum Zeitpunkt der Erstellung dieses Beitrags hat sich das Paperless-ngx Framework wie im Bild f\u00fcr mich dargestellt. Mag sein, dass ich das noch nicht ganz durchblickt habe &#8211; aber genau daf\u00fcr ist ja das Meinung bilden da. Na dann starten wir mal mit der  Postgre-SQL Datenbank.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Postgre-SQL Datenbank installieren<\/h2>\n\n\n\n<p>In diesem Abschnitt geht es um die Installation und Konfiguration einer lokalen PostgreSQL-Datenbank.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt install -y postgresql<\/code><\/pre>\n\n\n\n<p> <\/p>\n\n\n\n<p>Sobald PostgreSQL installiert ist, starten wir den Dienst und aktivieren Sie ihn f\u00fcr die Ausf\u00fchrung beim Booten:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl start postgresql\nsudo systemctl enable postgresql<\/code><\/pre>\n\n\n\n<p>Ich konnte zwar Paperless-ngx kein Requirement zur Version der Postgre-SQL Datenbank finden, aber ich vermute &#8222;latest and greatest&#8220; kann nicht schaden. Sehen wir uns mal an, welche Version wir von Postgre-SQL erwischt haben.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>psql -V\n\nuser@2204lts:~$ psql -V\npsql (PostgreSQL) 14.2 (Ubuntu 14.2-1ubuntu1)\n<\/code><\/pre>\n\n\n\n<p>Zum Zeitpunkt der Beitragserstellung war 14.2 die letzte Version der Postgre-SQL Datenbank.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Erstellung der Portgre-SQL Datenbank f\u00fcr Paperless-ngx<\/h2>\n\n\n\n<p>Wir m\u00fcssen zumindest eine Datenbank f\u00fcr Paperless-ngx erstellen und ihr einen Benutzernamen und ein Passwort f\u00fcr die Authentifizierung zuweisen. Rufen wir zun\u00e4chst die PostgreSQL-Shell als Postgres-Systembenutzer auf.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo -u postgres psql\n\ncould not change directory to \"\/home\/user\": Permission denied\npsql (14.2 (Ubuntu 14.2-1ubuntu1))\nType \"help\" for help.\n\npostgres=# <\/code><\/pre>\n\n\n\n<p>Geben wir in der Shell die folgenden Befehle ein, um die Datenbank und den Benutzer (die Rolle) anzulegen, und ersetzen Sie das Passwort durch Ihren eigenen Wert:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>CREATE DATABASE paperlessngx;\nCREATE USER paperlessngx WITH PASSWORD 'd862ca8ad319429e42476b3494183b6570e56';\nGRANT ALL PRIVILEGES ON DATABASE paperlessngx TO paperlessngx;<\/code><\/pre>\n\n\n\n<p>Verwende ein sicheres Passwort!<\/p>\n\n\n\n<p>Verwende nicht das Passwort aus dem Beispiel. W\u00e4hlen ein sicheres, zuf\u00e4lliges Passwort, um eine sichere Datenbankauthentifizierung f\u00fcr deine Paperless-ngx Installation zu gew\u00e4hrleisten.<\/p>\n\n\n\n<p>Wenn du fertig bist, gib <mark style=\"background-color:#abb8c3\" class=\"has-inline-color has-black-color\">\\q<\/mark> ein, um die PostgreSQL-Shell zu beenden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00dcberpr\u00fcfen des Postgre-SQL Datenbankstatus<\/h2>\n\n\n\n<p>Wir k\u00f6nnen \u00fcberpr\u00fcfen, ob die Authentifizierung funktioniert, indem Sie den Befehl psql ausf\u00fchren und den konfigurierten Benutzernamen und das Passwort \u00fcbergeben. (Ersetzen Sie localhost durch Ihren Datenbankserver, wenn Sie eine Remote-Datenbank verwenden).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>psql --username paperlessngx --password --host localhost paperlessngx\n\nuser@2204lts:~$ psql --username paperlessngx --password --host localhost paperlessngx\nPassword:\npsql (14.2 (Ubuntu 14.2-1ubuntu1))\nSSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)\nType \"help\" for help.\n\npaperlessngx=&gt; \\conninfo\nYou are connected to database \"paperlessngx\" as user \"paperlessngx\" on host \"localhost\" (address \"127.0.0.1\") at port \"5432\".\nSSL connection (protocol: TLSv1.3, cipher: TLS_AES_256_GCM_SHA384, bits: 256, compression: off)\n\npaperlessngx=&gt; \\q\n<\/code><\/pre>\n\n\n\n<p>Wenn die Verbindung erfolgreich war, wird eine Paperlessngx-Eingabeaufforderung angezeigt. Geben Sie <mark style=\"background-color:#abb8c3\" class=\"has-inline-color\">\\conninfo<\/mark> ein, um Ihre Verbindung zu best\u00e4tigen, oder geben Sie <mark style=\"background-color:#abb8c3\" class=\"has-inline-color has-black-color\">\\q<\/mark> ein, um die Verbindung zu beenden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Redis Installation<\/h2>\n\n\n\n<p>Redis ist ein In-Memory Key-Value Speicher, der von paperless-ngx vermutlich f\u00fcr das Caching und die Warteschlangenbildung verwendet wird. In diesem Abschnitt geht es um die Installation und Konfiguration einer lokalen Redis-Instanz. Wenn du bereits einen Redis-Dienst eingerichtet haben, kannst du dem n\u00e4chsten Abschnitt fortfahren. Im Gegensatz zur Postgre-SQL gibt es hier ein Requirement. Die Redis Instanz soll &gt;= Version 5.0 sein.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y redis-server<\/code><\/pre>\n\n\n\n<p>Bevor wir fortfahren, vergewissern wir uns, dass die installierte Version von Redis mindestens v5.0 ist:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>redis-server -v\nuser@2204lts:~$ redis-server -v\nRedis server v=6.0.16 sha=00000000:0 malloc=jemalloc-5.2.1 bits=64 build=a3fdef44459b3ad6\n<\/code><\/pre>\n\n\n\n<p>Das sieht gut aus, im verwendeten Ubuntu 22.04lts ist zur Zeit Redis Version 6.0.16 am Start.<\/p>\n\n\n\n<p>Sobald Redis installiert ist, starten wir den Dienst und aktivieren Sie ihn f\u00fcr die Ausf\u00fchrung beim Boot.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl start redis-server\nsudo systemctl enable redis-server<\/code><\/pre>\n\n\n\n<p>Du kannst die Redis-Konfiguration in \/etc\/redis.conf oder \/etc\/redis\/redis.conf \u00e4ndern, in den meisten F\u00e4llen ist die Standardkonfiguration jedoch ausreichend.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u00dcberpr\u00fcfen des Redis-Service Status<\/h2>\n\n\n\n<p>Sehen wir mal nach, ob der Servicel\u00e4uft:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>user@2204lts:~$ sudo systemctl status redis-server\n\u25cf redis-server.service - Advanced key-value store\n     Loaded: loaded (\/lib\/systemd\/system\/redis-server.service; enabled; vendor preset: enabled)\n     Active: active (running) since Sat 2022-05-07 16:50:01 UTC; 4min 20s ago\n       Docs: http:\/\/redis.io\/documentation,\n             man:redis-server(1)\n   Main PID: 4259 (redis-server)\n     Status: \"Ready to accept connections\"\n      Tasks: 5 (limit: 9410)\n     Memory: 2.6M\n        CPU: 535ms\n     CGroup: \/system.slice\/redis-server.service\n             \u2514\u25004259 \"\/usr\/bin\/redis-server 127.0.0.1:6379\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"\" \"&gt;\n\nMai 07 16:50:01 2204lts systemd&#91;1]: Starting Advanced key-value store...\nMai 07 16:50:01 2204lts systemd&#91;1]: Started Advanced key-value store.\nuser@2204lts:~$\n<\/code><\/pre>\n\n\n\n<p>Das sieht soweit gut aus und nun pr\u00fcfen wir, ob der Service auch Requests anwortet durch Verwenden des Dienstprogrammes redis-cli, um sicherzustellen, dass der Redis-Dienst funktionsf\u00e4hig ist:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>user@2204lts:~$ redis-cli ping\nPONG\n<\/code><\/pre>\n\n\n\n<p>Wenn wir ein PONG von Redis erhalten, ist alles in Butter.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Tesseract Installation<\/h2>\n\n\n\n<p>Die hereinkommenden Dokumente, Zeichnungen, Grafiken werde bei paperless-nhx durch die OCR Software Tesseract analysiert. Hierf\u00fcr ben\u00f6tigt Paperless-ngx die Version &gt;= 4.0.0 von Tesseract. Meine Dokumente sind aus den Deutsch- und Englisch-Raum, weshalb ich gleich die passenden OCR Module mit installiere.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install tesseract-ocr tesseract-ocr-deu tesseract-ocr-frk tesseract-ocr-eng\n\n<\/code><\/pre>\n\n\n\n<p>Bevor wir fortfahren, vergewissern wir uns, dass die installierte Version von Tesseract mindestens v4.0.0 ist:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>tesseract --version\nuser@2204lts:~$ tesseract --version\ntesseract 4.1.1\n leptonica-1.82.0\n  libgif 5.1.9 : libjpeg 8d (libjpeg-turbo 2.1.1) : libpng 1.6.37 : libtiff 4.3.0 : zlib 1.2.11 : libwebp 1.2.2 : libopenjp2 2.4.0\n Found AVX2\n Found AVX\n Found SSE\n Found libarchive 3.6.0 zlib\/1.2.11 liblzma\/5.2.5 bz2lib\/1.0.8 liblz4\/1.9.3 libzstd\/1.4.8\n\n<\/code><\/pre>\n\n\n\n<p>Das sieht gut aus, im verwendeten Ubuntu 22.04lts ist zur Zeit Tesseract Version 4.1.1 am Start.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Paperless-ngx Installation<\/h2>\n\n\n\n<p>Kommen wir zum Kern des Beitrags, wir wollen uns ja Paperless-ngx genauer ansehen, fangen wir mit der Installation an. Laut Anleitung sind hier folgende Pakete zu installieren:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt install -y python3 python3-pip python3-dev imagemagick fonts-liberation optipng gnupg libpq-dev libmagic-dev mime-support libzbar0 poppler-utils unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g unzip<\/code><\/pre>\n\n\n\n<p>Nach der Installation fragt Ubuntu welche Services durchgestartet werden sollen. Ich bin eher ein Freund davon, dem gesamten System einen Schubs zu geben. Ist ja noch nicht produktiv..<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo reboot<\/code><\/pre>\n\n\n\n<p>Na dann werden wir uns mal die aktuelle Version von Paperless-ngx vom Git holen, zum Zeitpunkt der Beitragserstellung war das die Version 1.7.0. Ich entpacke das immer gerne nach \/opt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo wget https:\/\/github.com\/paperless-ngx\/paperless-ngx\/releases\/download\/ngx-1.7.0\/paperless-ngx-1.7.0.tar.xz\nsudo tar -xvf paperless-ngx-1.7.0.tar.xz -C \/opt\n<\/code><\/pre>\n\n\n\n<p>Leider h\u00e4ngt keine Versionsnummer am Verzeichnis und das macht ggf. das sp\u00e4tere handling beim Update schwierig. Ich verschiebe das mal in ein passendes Verzeichnis \/opt\/paperless-ngx_v1.7.0 und mache mir einen Softlink. Hintergrund ist dabei ein Paperless-ngx in einem Verzeichnis so zu installieren, das nach seiner Versionsnummer benannt ist. Also die gerade aktuelle Version 1.7.0 w\u00fcrde beispielsweise in \/opt\/paperless-ngx_v1.7.0 installiert werden, und ein Symlink von \/opt\/paperless-ngx\/ w\u00fcrde auf dieses Verzeichnis verweisen. (Du kannst diese Konfiguration mit dem Befehl ls -l \/opt | grep paperless-ngx \u00fcberpr\u00fcfen.) Auf diese Weise k\u00f6nnen zuk\u00fcnftige Versionen parallel installiert werden, ohne die aktuelle Installation zu unterbrechen. Beim Wechsel zu einer neuen Version muss nur der Symlink aktualisiert werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mv \/opt\/paperless-ngx \/opt\/paperless-ngx_v1.7.0\nsudo ln -s \/opt\/paperless-ngx_v1.7.0\/ \/opt\/paperless-ngx\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">5. Paperless-ngx Konfiguration<\/h2>\n\n\n\n<p>Im Verzeichnis \/opt\/paperless-ngx befindet sich eine paperless.conf. Von der mache ich vor dem ersten editieren ein Backup.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp paperless.conf paperless.conf.org<\/code><\/pre>\n\n\n\n<p>Nun tragen wir mal unsere Konfigdaten in die paperless.conf. <\/p>\n\n\n\n<p>Fangen wir mit Redis und Postgre-SQL an.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Required services\nPAPERLESS_REDIS=redis:\/\/localhost:6379\nPAPERLESS_DBHOST=localhost\nPAPERLESS_DBPORT=5432\nPAPERLESS_DBNAME=paperlessngx\nPAPERLESS_DBUSER=paperlessngx\nPAPERLESS_DBPASS=d862ca8ad319429e42476b3494183b6570e56\nPAPERLESS_DBSSLMODE=prefer\n<\/code><\/pre>\n\n\n\n<p>Als n\u00e4chstes m\u00f6chte paperless-ngx in der Konfig die Pfade zu seinen Folders haben. Legen wir in \/opt die passenden Verzeichnisse an und tragen sie in der paperless.conf ein.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo mkdir \/opt\/paperless\nsudo mkdir \/opt\/paperless\/consumption\nsudo mkdir \/opt\/paperless\/data\nsudo mkdir \/opt\/paperless\/media-root\nsudo mkdir \/opt\/paperless\/trash\n\n# Paths and folders\nPAPERLESS_CONSUMPTION_DIR=\/opt\/paperless\/consumption\nPAPERLESS_DATA_DIR=\/opt\/paperless\/data\nPAPERLESS_TRASH_DIR=\/opt\/paperless\/trash\nPAPERLESS_MEDIA_ROOT=\/opt\/paperless\/media-root\nPAPERLESS_STATICDIR=\/opt\/paperless-ngx\/static\n#PAPERLESS_FILENAME_FORMAT=\n\n<\/code><\/pre>\n\n\n\n<p>Als n\u00e4chstes k\u00fcmmern wir uns um die Einstellungen f\u00fcr unsere OCR, den Konfigabschnitt f\u00fcr Tesseract. Soweit ich mich mit den Einstellungen vertraut gemacht habe sollte folgendes Setup f\u00fcr mich funktionieren. Wenn ich mit den Ergebnissen unzufrieden bin, werde ich sp\u00e4ter nochmal Hand anlegen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># OCR settings\nPAPERLESS_OCR_LANGUAGE=deu+eng\nPAPERLESS_OCR_MODE=skip\nPAPERLESS_OCR_OUTPUT_TYPE=pdfa\nPAPERLESS_OCR_PAGES=0\n#PAPERLESS_OCR_IMAGE_DPI=300\nPAPERLESS_OCR_CLEAN=clean\nPAPERLESS_OCR_DESKEW=true\nPAPERLESS_OCR_ROTATE_PAGES=true\nPAPERLESS_OCR_ROTATE_PAGES_THRESHOLD=12.0\n#PAPERLESS_OCR_USER_ARGS={}\nPAPERLESS_CONVERT_MEMORY_LIMIT=512000000\nPAPERLESS_CONVERT_TMPDIR=\/var\/tmp\n<\/code><\/pre>\n\n\n\n<p>Der n\u00e4chste Schritt sind die Software Tweaks, f\u00fcr mich sollte folgendes funktionieren. Ich hab die VBox mit vier CPUS aufgesetzt..<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Software tweaks\nPAPERLESS_TASK_WORKERS=2\nPAPERLESS_THREADS_PER_WORKER=2\nPAPERLESS_TIME_ZONE=Europe\/Berlin\n#PAPERLESS_CONSUMER_POLLING=10\nPAPERLESS_CONSUMER_DELETE_DUPLICATES=false\nPAPERLESS_CONSUMER_RECURSIVE=false\nPAPERLESS_CONSUMER_IGNORE_PATTERNS=&#91;\".DS_STORE\/*\", \"._*\", \".stfolder\/*\", \".stversions\/*\", \".localized\/*\", \"desktop.ini\"]\nPAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=false\nPAPERLESS_CONSUMER_ENABLE_BARCODES=false\nPAPERLESS_CONSUMER_ENABLE_BARCODES=PATCHT\nPAPERLESS_OPTIMIZE_THUMBNAILS=true\n#PAPERLESS_PRE_CONSUME_SCRIPT=\/path\/to\/an\/arbitrary\/script.sh\n#PAPERLESS_POST_CONSUME_SCRIPT=\/path\/to\/an\/arbitrary\/script.sh\nPAPERLESS_FILENAME_DATE_ORDER=YMD\n#PAPERLESS_FILENAME_PARSE_TRANSFORMS=&#91;]\n#PAPERLESS_THUMBNAIL_FONT_NAME=\n#PAPERLESS_IGNORE_DATES=\n#PAPERLESS_ENABLE_UPDATE_CHECK=\n<\/code><\/pre>\n\n\n\n<p>Die Pfade zu die notwendigen binaries m\u00f6chte er auch gesetzt bekommen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Binaries\nPAPERLESS_CONVERT_BINARY=\/usr\/bin\/convert\nPAPERLESS_GS_BINARY=\/usr\/bin\/gs\nPAPERLESS_OPTIPNG_BINARY=\/usr\/bin\/optipng\n<\/code><\/pre>\n\n\n\n<p>Es fehlt noch ein paperless-ngx secret key. Den ziehen wir uns am besten aus \/dev\/random und tragen ihn in der paperless.conf ein.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>user@2204lts:\/opt\/paperless-ngx$ tr -dc A-Za-z0-9 &lt;\/dev\/urandom | head -c 64 ; echo ''\n\nloOS9WEpHQfDUhTVPOstTkILfUk1S9KtDKuHBCitevmzdQFTIDIm986PwFTF6ChI\n\n# Security and hosting\nPAPERLESS_SECRET_KEY=loOS9WEpHQfDUhTVPOstTkILfUk1S9KtDKuHBCitevmzdQFTIDIm986PwFTF6ChI\n#PAPERLESS_URL=https:\/\/example.com\n#PAPERLESS_CSRF_TRUSTED_ORIGINS=https:\/\/example.com # can be set using PAPERLESS_URL\n#PAPERLESS_ALLOWED_HOSTS=example.com,www.example.com # can be set using PAPERLESS_URL\n#PAPERLESS_CORS_ALLOWED_HOSTS=https:\/\/localhost:8080,https:\/\/example.com # can be set using PAPERLESS_URL\n#PAPERLESS_FORCE_SCRIPT_NAME=\n#PAPERLESS_STATIC_URL=\/static\/\n#PAPERLESS_AUTO_LOGIN_USERNAME=\n#PAPERLESS_COOKIE_PREFIX=\n#PAPERLESS_ENABLE_HTTP_REMOTE_USER=false\n\n<\/code><\/pre>\n\n\n\n<p>Der Tika Server sagt mir erst einmal nichts und bleibt uninstalliert und unbenutzt. Vielleicht ergibt sich mir die Funktion im folgenden Test.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Tika settings\nPAPERLESS_TIKA_ENABLED=false\n#PAPERLESS_TIKA_ENDPOINT=http:\/\/localhost:9998\n#PAPERLESS_TIKA_GOTENBERG_ENDPOINT=http:\/\/localhost:3000\n<\/code><\/pre>\n\n\n\n<p>Wir brauche noch einen User f\u00fcr paperless-ngx und der braucht lesende\/schreibende Zugriffsrechte auf die vorher angegebenen Verzeichnisse aus: <\/p>\n\n\n\n<pre id=\"block-95513548-1d6e-4948-9c71-077a76521d67\" class=\"wp-block-code\"><code>PAPERLESS_CONSUMPTION_DIR=\/opt\/paperless\/consumption\nPAPERLESS_DATA_DIR=\/opt\/paperless\/data\nPAPERLESS_TRASH_DIR=\/opt\/paperless\/trash\nPAPERLESS_MEDIA_ROOT=\/opt\/paperless\/media-root<\/code><\/pre>\n\n\n\n<p>Na dann legen wir den User mal an und drehen an den Zugriffsrechten.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo adduser paperless --system --home \/opt\/paperless --group\n\nsudo chown -Rv paperless:paperless \/opt\/paperless\nchanged ownership of '\/opt\/paperless\/trash' from root:root to paperless:paperless\nchanged ownership of '\/opt\/paperless\/consumption' from root:root to paperless:paperless\nchanged ownership of '\/opt\/paperless\/media-root' from root:root to paperless:paperless\nchanged ownership of '\/opt\/paperless\/data' from root:root to paperless:paperless\nchanged ownership of '\/opt\/paperless' from root:root to paperless:paperless<\/code><\/pre>\n\n\n\n<p>Scheinbar war es das in der paperless.conf. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Installieren der Requirments<\/h2>\n\n\n\n<p>Wenden wir uns den weiteren Python Requirements von paperless zu. Diese stehen im File \/opt\/paperless-ngx\/requirments.txt. Zu erst einmal updaten wir pip und dann installieren wir die Python Module nach.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo -Hu paperless pip3 install --upgrade pip\n\nuser@2204lts:\/opt\/paperless-ngx$ sudo -Hu paperless pip3 install --upgrade pip\nDefaulting to user installation because normal site-packages is not writeable\nRequirement already satisfied: pip in \/usr\/lib\/python3\/dist-packages (22.0.2)\nCollecting pip\n  Downloading pip-22.0.4-py3-none-any.whl (2.1 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 2.1\/2.1 MB 15.2 MB\/s eta 0:00:00\nInstalling collected packages: pip\n  WARNING: The scripts pip, pip3 and pip3.10 are installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\nSuccessfully installed pip-22.0.4\nuser@2204lts:\/opt\/paperless-ngx$\n<\/code><\/pre>\n\n\n\n<p>Okay pip3 ist jetzt auf der aktuellen Version 22.0.4. Und jetzt die restlichen Requirements installieren.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo -Hu paperless pip3 install -r requirements.txt\n\nuser@2204lts:\/opt\/paperless-ngx$ sudo -Hu paperless pip3 install -r requirements.txt\nDefaulting to user installation because normal site-packages is not writeable\nLooking in indexes: https:\/\/pypi.python.org\/simple\/, https:\/\/www.piwheels.org\/simple\/\nIgnoring backports.zoneinfo: markers 'python_version &lt; \"3.9\"' don't match your environment\nIgnoring importlib-resources: markers 'python_version &lt; \"3.9\"' don't match your environment\nIgnoring zipp: markers 'python_version &lt; \"3.9\"' don't match your environment\nCollecting aioredis==1.3.1\n  Downloading https:\/\/www.piwheels.org\/simple\/aioredis\/aioredis-1.3.1-py3-none-any.whl (65 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 65.3\/65.3 KB 1.7 MB\/s eta 0:00:00\nCollecting anyio==3.5.0\n  Downloading https:\/\/www.piwheels.org\/simple\/anyio\/anyio-3.5.0-py3-none-any.whl (79 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 79.2\/79.2 KB 2.5 MB\/s eta 0:00:00\nCollecting arrow==1.2.2\n  Downloading https:\/\/www.piwheels.org\/simple\/arrow\/arrow-1.2.2-py3-none-any.whl (64 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 64.0\/64.0 KB 1.8 MB\/s eta 0:00:00\nCollecting asgiref==3.5.0\n  Downloading https:\/\/www.piwheels.org\/simple\/asgiref\/asgiref-3.5.0-py3-none-any.whl (22 kB)\nCollecting async-timeout==4.0.2\n  Downloading https:\/\/www.piwheels.org\/simple\/async-timeout\/async_timeout-4.0.2-py3-none-any.whl (5.8 kB)\nCollecting attrs==21.4.0\n  Downloading https:\/\/www.piwheels.org\/simple\/attrs\/attrs-21.4.0-py2.py3-none-any.whl (60 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 60.5\/60.5 KB 13.0 MB\/s eta 0:00:00\nCollecting autobahn==22.3.2\n  Downloading autobahn-22.3.2.tar.gz (376 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 376.0\/376.0 KB 4.8 MB\/s eta 0:00:00\n  Preparing metadata (setup.py) ... done\nRequirement already satisfied: automat==20.2.0 in \/usr\/lib\/python3\/dist-packages (from -r requirements.txt (line 17)) (20.2.0)\nCollecting blessed==1.19.1\n  Downloading https:\/\/www.piwheels.org\/simple\/blessed\/blessed-1.19.1-py2.py3-none-any.whl (62 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 62.1\/62.1 KB 1.3 MB\/s eta 0:00:00\nCollecting certifi==2021.10.8\n  Downloading https:\/\/www.piwheels.org\/simple\/certifi\/certifi-2021.10.8-py2.py3-none-any.whl (151 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 151.0\/151.0 KB 4.6 MB\/s eta 0:00:00\nCollecting cffi==1.15.0\n  Downloading cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (446 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 446.3\/446.3 KB 22.2 MB\/s eta 0:00:00\nCollecting channels-redis==3.4.0\n  Downloading https:\/\/www.piwheels.org\/simple\/channels-redis\/channels_redis-3.4.0-py3-none-any.whl (20 kB)\nCollecting channels==3.0.4\n  Downloading https:\/\/www.piwheels.org\/simple\/channels\/channels-3.0.4-py3-none-any.whl (38 kB)\nRequirement already satisfied: chardet==4.0.0 in \/usr\/lib\/python3\/dist-packages (from -r requirements.txt (line 24)) (4.0.0)\nCollecting charset-normalizer==2.0.12\n  Downloading https:\/\/www.piwheels.org\/simple\/charset-normalizer\/charset_normalizer-2.0.12-py3-none-any.whl (44 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 44.2\/44.2 KB 9.4 MB\/s eta 0:00:00\nCollecting click==8.1.2\n  Downloading https:\/\/www.piwheels.org\/simple\/click\/click-8.1.2-py3-none-any.whl (96 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 96.6\/96.6 KB 2.9 MB\/s eta 0:00:00\nCollecting coloredlogs==15.0.1\n  Downloading https:\/\/www.piwheels.org\/simple\/coloredlogs\/coloredlogs-15.0.1-py2.py3-none-any.whl (46 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 46.0\/46.0 KB 7.6 MB\/s eta 0:00:00\nCollecting concurrent-log-handler==0.9.20\n  Downloading https:\/\/www.piwheels.org\/simple\/concurrent-log-handler\/concurrent_log_handler-0.9.20-py2.py3-none-any.whl (25 kB)\nRequirement already satisfied: constantly==15.1.0 in \/usr\/lib\/python3\/dist-packages (from -r requirements.txt (line 29)) (15.1.0)\nCollecting cryptography==36.0.2\n  Downloading cryptography-36.0.2-cp36-abi3-manylinux_2_24_x86_64.whl (3.6 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 3.6\/3.6 MB 43.0 MB\/s eta 0:00:00\nCollecting daphne==3.0.2\n  Downloading https:\/\/www.piwheels.org\/simple\/daphne\/daphne-3.0.2-py3-none-any.whl (26 kB)\nCollecting dateparser==1.1.1\n  Downloading https:\/\/www.piwheels.org\/simple\/dateparser\/dateparser-1.1.1-py2.py3-none-any.whl (296 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 296.8\/296.8 KB 3.3 MB\/s eta 0:00:00\nCollecting django-cors-headers==3.11.0\n  Downloading https:\/\/www.piwheels.org\/simple\/django-cors-headers\/django_cors_headers-3.11.0-py3-none-any.whl (12 kB)\nCollecting django-extensions==3.1.5\n  Downloading https:\/\/www.piwheels.org\/simple\/django-extensions\/django_extensions-3.1.5-py3-none-any.whl (224 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 224.2\/224.2 KB 5.9 MB\/s eta 0:00:00\nCollecting django-filter==21.1\n  Downloading https:\/\/www.piwheels.org\/simple\/django-filter\/django_filter-21.1-py3-none-any.whl (81 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 81.4\/81.4 KB 15.3 MB\/s eta 0:00:00\nCollecting django-picklefield==3.0.1\n  Downloading https:\/\/www.piwheels.org\/simple\/django-picklefield\/django_picklefield-3.0.1-py3-none-any.whl (9.4 kB)\nCollecting django-q==1.3.9\n  Downloading https:\/\/www.piwheels.org\/simple\/django-q\/django_q-1.3.9-py3-none-any.whl (89 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 90.0\/90.0 KB 22.2 MB\/s eta 0:00:00\nCollecting django==4.0.4\n  Downloading https:\/\/www.piwheels.org\/simple\/django\/Django-4.0.4-py3-none-any.whl (8.0 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 8.0\/8.0 MB 8.5 MB\/s eta 0:00:00\nCollecting djangorestframework==3.13.1\n  Downloading https:\/\/www.piwheels.org\/simple\/djangorestframework\/djangorestframework-3.13.1-py3-none-any.whl (958 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 958.3\/958.3 KB 13.0 MB\/s eta 0:00:00\nCollecting filelock==3.6.0\n  Downloading https:\/\/www.piwheels.org\/simple\/filelock\/filelock-3.6.0-py3-none-any.whl (10.0 kB)\nCollecting fuzzywuzzy&#91;speedup]==0.18.0\n  Downloading https:\/\/www.piwheels.org\/simple\/fuzzywuzzy\/fuzzywuzzy-0.18.0-py2.py3-none-any.whl (18 kB)\nCollecting gunicorn==20.1.0\n  Downloading https:\/\/www.piwheels.org\/simple\/gunicorn\/gunicorn-20.1.0-py3-none-any.whl (81 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 81.0\/81.0 KB 18.0 MB\/s eta 0:00:00\nCollecting h11==0.13.0\n  Downloading https:\/\/www.piwheels.org\/simple\/h11\/h11-0.13.0-py3-none-any.whl (58 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 58.2\/58.2 KB 16.3 MB\/s eta 0:00:00\nCollecting hiredis==2.0.0\n  Downloading hiredis-2.0.0.tar.gz (75 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 75.8\/75.8 KB 17.1 MB\/s eta 0:00:00\n  Preparing metadata (setup.py) ... done\nCollecting httptools==0.4.0\n  Downloading httptools-0.4.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (434 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 434.5\/434.5 KB 70.7 MB\/s eta 0:00:00\nCollecting humanfriendly==10.0\n  Downloading https:\/\/www.piwheels.org\/simple\/humanfriendly\/humanfriendly-10.0-py2.py3-none-any.whl (89 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 89.9\/89.9 KB 2.9 MB\/s eta 0:00:00\nRequirement already satisfied: hyperlink==21.0.0 in \/usr\/lib\/python3\/dist-packages (from -r requirements.txt (line 47)) (21.0.0)\nRequirement already satisfied: idna==3.3 in \/usr\/lib\/python3\/dist-packages (from -r requirements.txt (line 48)) (3.3)\nCollecting imap-tools==0.53.0\n  Downloading https:\/\/www.piwheels.org\/simple\/imap-tools\/imap_tools-0.53.0-py3-none-any.whl (33 kB)\nCollecting img2pdf==0.4.4\n  Downloading https:\/\/www.piwheels.org\/simple\/img2pdf\/img2pdf-0.4.4-py3-none-any.whl (47 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 47.3\/47.3 KB 1.3 MB\/s eta 0:00:00\nRequirement already satisfied: incremental==21.3.0 in \/usr\/lib\/python3\/dist-packages (from -r requirements.txt (line 52)) (21.3.0)\nCollecting inotify-simple==1.3.5\n  Downloading https:\/\/www.piwheels.org\/simple\/inotify-simple\/inotify_simple-1.3.5-py3-none-any.whl (9.4 kB)\nCollecting inotifyrecursive==0.3.5\n  Downloading https:\/\/www.piwheels.org\/simple\/inotifyrecursive\/inotifyrecursive-0.3.5-py3-none-any.whl (8.0 kB)\nCollecting joblib==1.1.0\n  Downloading https:\/\/www.piwheels.org\/simple\/joblib\/joblib-1.1.0-py2.py3-none-any.whl (306 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 307.0\/307.0 KB 3.8 MB\/s eta 0:00:00\nCollecting langdetect==1.0.9\n  Downloading https:\/\/www.piwheels.org\/simple\/langdetect\/langdetect-1.0.9-py3-none-any.whl (994 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 994.5\/994.5 KB 14.4 MB\/s eta 0:00:00\nCollecting lxml==4.8.0\n  Downloading lxml-4.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl (7.0 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 7.0\/7.0 MB 60.2 MB\/s eta 0:00:00\nCollecting msgpack==1.0.3\n  Downloading msgpack-1.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (323 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 323.7\/323.7 KB 65.4 MB\/s eta 0:00:00\nCollecting numpy==1.22.3\n  Downloading numpy-1.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.8 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 16.8\/16.8 MB 53.4 MB\/s eta 0:00:00\nCollecting ocrmypdf==13.4.2\n  Downloading https:\/\/www.piwheels.org\/simple\/ocrmypdf\/ocrmypdf-13.4.2-py37-none-any.whl (123 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 123.2\/123.2 KB 1.9 MB\/s eta 0:00:00\nCollecting packaging==21.3\n  Downloading https:\/\/www.piwheels.org\/simple\/packaging\/packaging-21.3-py3-none-any.whl (40 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 40.8\/40.8 KB 12.4 MB\/s eta 0:00:00\nCollecting pathvalidate==2.5.0\n  Downloading https:\/\/www.piwheels.org\/simple\/pathvalidate\/pathvalidate-2.5.0-py3-none-any.whl (19 kB)\nCollecting pdf2image==1.16.0\n  Downloading https:\/\/www.piwheels.org\/simple\/pdf2image\/pdf2image-1.16.0-py3-none-any.whl (10 kB)\nCollecting pdfminer.six==20220319\n  Downloading https:\/\/www.piwheels.org\/simple\/pdfminer-six\/pdfminer.six-20220319-py3-none-any.whl (5.6 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 5.6\/5.6 MB 15.4 MB\/s eta 0:00:00\nCollecting pikepdf==5.1.1\n  Downloading pikepdf-5.1.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 2.3\/2.3 MB 61.0 MB\/s eta 0:00:00\nCollecting pillow==9.1.0\n  Downloading Pillow-9.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (4.3 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 4.3\/4.3 MB 56.5 MB\/s eta 0:00:00\nCollecting pluggy==1.0.0\n  Downloading https:\/\/www.piwheels.org\/simple\/pluggy\/pluggy-1.0.0-py2.py3-none-any.whl (13 kB)\nCollecting portalocker==2.4.0\n  Downloading https:\/\/www.piwheels.org\/simple\/portalocker\/portalocker-2.4.0-py2.py3-none-any.whl (16 kB)\nCollecting psycopg2==2.9.3\n  Downloading psycopg2-2.9.3.tar.gz (380 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 380.6\/380.6 KB 69.1 MB\/s eta 0:00:00\n  Preparing metadata (setup.py) ... done\nCollecting pyasn1-modules==0.2.8\n  Downloading https:\/\/www.piwheels.org\/simple\/pyasn1-modules\/pyasn1_modules-0.2.8-py2.py3-none-any.whl (155 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 155.3\/155.3 KB 2.5 MB\/s eta 0:00:00\nRequirement already satisfied: pyasn1==0.4.8 in \/usr\/lib\/python3\/dist-packages (from -r requirements.txt (line 71)) (0.4.8)\nCollecting pycparser==2.21\n  Downloading https:\/\/www.piwheels.org\/simple\/pycparser\/pycparser-2.21-py2.py3-none-any.whl (119 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 119.7\/119.7 KB 25.0 MB\/s eta 0:00:00\nCollecting pyopenssl==22.0.0\n  Downloading https:\/\/www.piwheels.org\/simple\/pyopenssl\/pyOpenSSL-22.0.0-py2.py3-none-any.whl (55 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 55.8\/55.8 KB 13.6 MB\/s eta 0:00:00\nCollecting pyparsing==3.0.8\n  Downloading https:\/\/www.piwheels.org\/simple\/pyparsing\/pyparsing-3.0.8-py3-none-any.whl (98 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 98.5\/98.5 KB 16.9 MB\/s eta 0:00:00\nCollecting python-dateutil==2.8.2\n  Downloading https:\/\/www.piwheels.org\/simple\/python-dateutil\/python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 247.7\/247.7 KB 2.7 MB\/s eta 0:00:00\nCollecting python-dotenv==0.20.0\n  Downloading https:\/\/www.piwheels.org\/simple\/python-dotenv\/python_dotenv-0.20.0-py3-none-any.whl (17 kB)\nCollecting python-gnupg==0.4.8\n  Downloading https:\/\/www.piwheels.org\/simple\/python-gnupg\/python_gnupg-0.4.8-py2.py3-none-any.whl (18 kB)\nCollecting python-levenshtein==0.12.2\n  Downloading python-Levenshtein-0.12.2.tar.gz (50 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 50.5\/50.5 KB 8.6 MB\/s eta 0:00:00\n  Preparing metadata (setup.py) ... done\nCollecting python-magic==0.4.25\n  Downloading https:\/\/www.piwheels.org\/simple\/python-magic\/python_magic-0.4.25-py2.py3-none-any.whl (15 kB)\nCollecting pytz-deprecation-shim==0.1.0.post0\n  Downloading https:\/\/www.piwheels.org\/simple\/pytz-deprecation-shim\/pytz_deprecation_shim-0.1.0.post0-py2.py3-none-any.whl (15 kB)\nRequirement already satisfied: pytz==2022.1 in \/usr\/lib\/python3\/dist-packages (from -r requirements.txt (line 81)) (2022.1)\nCollecting pyyaml==6.0\n  Downloading PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (682 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 682.2\/682.2 KB 68.0 MB\/s eta 0:00:00\nCollecting pyzbar==0.1.9\n  Downloading pyzbar-0.1.9-py2.py3-none-any.whl (32 kB)\nCollecting redis==3.5.3\n  Downloading https:\/\/www.piwheels.org\/simple\/redis\/redis-3.5.3-py2.py3-none-any.whl (84 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 84.2\/84.2 KB 2.1 MB\/s eta 0:00:00\nCollecting regex==2022.3.2\n  Downloading regex-2022.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (764 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 764.2\/764.2 KB 65.1 MB\/s eta 0:00:00\nCollecting reportlab==3.6.9\n  Downloading reportlab-3.6.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.8 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 2.8\/2.8 MB 53.5 MB\/s eta 0:00:00\nCollecting requests==2.27.1\n  Downloading https:\/\/www.piwheels.org\/simple\/requests\/requests-2.27.1-py2.py3-none-any.whl (63 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 63.1\/63.1 KB 1.4 MB\/s eta 0:00:00\nCollecting scikit-learn==1.0.2\n  Downloading scikit_learn-1.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (26.5 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 26.5\/26.5 MB 39.6 MB\/s eta 0:00:00\nCollecting scipy==1.8.0\n  Downloading scipy-1.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (42.3 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 42.3\/42.3 MB 27.9 MB\/s eta 0:00:00\nCollecting service-identity==21.1.0\n  Downloading https:\/\/www.piwheels.org\/simple\/service-identity\/service_identity-21.1.0-py2.py3-none-any.whl (12 kB)\nCollecting setuptools==62.1.0\n  Downloading https:\/\/www.piwheels.org\/simple\/setuptools\/setuptools-62.1.0-py3-none-any.whl (1.1 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 1.1\/1.1 MB 4.3 MB\/s eta 0:00:00\nRequirement already satisfied: six==1.16.0 in \/usr\/lib\/python3\/dist-packages (from -r requirements.txt (line 92)) (1.16.0)\nCollecting sniffio==1.2.0\n  Downloading https:\/\/www.piwheels.org\/simple\/sniffio\/sniffio-1.2.0-py3-none-any.whl (10 kB)\nCollecting sqlparse==0.4.2\n  Downloading https:\/\/www.piwheels.org\/simple\/sqlparse\/sqlparse-0.4.2-py3-none-any.whl (40 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 41.0\/41.0 KB 8.5 MB\/s eta 0:00:00\nCollecting threadpoolctl==3.1.0\n  Downloading https:\/\/www.piwheels.org\/simple\/threadpoolctl\/threadpoolctl-3.1.0-py3-none-any.whl (14 kB)\nCollecting tika==1.24\n  Downloading https:\/\/www.piwheels.org\/simple\/tika\/tika-1.24-py3-none-any.whl (34 kB)\nCollecting tqdm==4.64.0\n  Downloading https:\/\/www.piwheels.org\/simple\/tqdm\/tqdm-4.64.0-py2.py3-none-any.whl (78 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 78.4\/78.4 KB 11.8 MB\/s eta 0:00:00\nCollecting twisted&#91;tls]==22.4.0\n  Downloading https:\/\/www.piwheels.org\/simple\/twisted\/Twisted-22.4.0-py3-none-any.whl (3.1 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 3.1\/3.1 MB 6.8 MB\/s eta 0:00:00\nCollecting txaio==22.2.1\n  Downloading https:\/\/www.piwheels.org\/simple\/txaio\/txaio-22.2.1-py2.py3-none-any.whl (30 kB)\nCollecting typing-extensions==4.1.1\n  Downloading https:\/\/www.piwheels.org\/simple\/typing-extensions\/typing_extensions-4.1.1-py3-none-any.whl (26 kB)\nCollecting tzdata==2022.1\n  Downloading https:\/\/www.piwheels.org\/simple\/tzdata\/tzdata-2022.1-py2.py3-none-any.whl (339 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 339.4\/339.4 KB 7.4 MB\/s eta 0:00:00\nCollecting tzlocal==4.2\n  Downloading https:\/\/www.piwheels.org\/simple\/tzlocal\/tzlocal-4.2-py3-none-any.whl (19 kB)\nCollecting urllib3==1.26.9\n  Downloading https:\/\/www.piwheels.org\/simple\/urllib3\/urllib3-1.26.9-py2.py3-none-any.whl (155 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 155.9\/155.9 KB 5.1 MB\/s eta 0:00:00\nCollecting uvicorn&#91;standard]==0.17.6\n  Downloading https:\/\/www.piwheels.org\/simple\/uvicorn\/uvicorn-0.17.6-py3-none-any.whl (53 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 53.6\/53.6 KB 10.7 MB\/s eta 0:00:00\nCollecting uvloop==0.16.0\n  Downloading uvloop-0.16.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (4.3 MB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 4.3\/4.3 MB 55.7 MB\/s eta 0:00:00\nCollecting watchdog==2.1.7\n  Downloading watchdog-2.1.7-py3-none-manylinux2014_x86_64.whl (76 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 76.8\/76.8 KB 16.4 MB\/s eta 0:00:00\nCollecting watchgod==0.8.2\n  Downloading https:\/\/www.piwheels.org\/simple\/watchgod\/watchgod-0.8.2-py3-none-any.whl (12 kB)\nCollecting wcwidth==0.2.5\n  Downloading https:\/\/www.piwheels.org\/simple\/wcwidth\/wcwidth-0.2.5-py2.py3-none-any.whl (30 kB)\nCollecting websockets==10.2\n  Downloading websockets-10.2-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl (110 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 110.8\/110.8 KB 26.8 MB\/s eta 0:00:00\nCollecting whitenoise==6.0.0\n  Downloading https:\/\/www.piwheels.org\/simple\/whitenoise\/whitenoise-6.0.0-py3-none-any.whl (19 kB)\nCollecting whoosh==2.7.4\n  Downloading https:\/\/www.piwheels.org\/simple\/whoosh\/Whoosh-2.7.4-py2.py3-none-any.whl (468 kB)\n     \u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501\u2501 468.8\/468.8 KB 3.8 MB\/s eta 0:00:00\nRequirement already satisfied: zope.interface==5.4.0 in \/usr\/lib\/python3\/dist-packages (from -r requirements.txt (line 113)) (5.4.0)\nBuilding wheels for collected packages: autobahn, hiredis, psycopg2, python-levenshtein\n  Building wheel for autobahn (setup.py) ... done\n  Created wheel for autobahn: filename=autobahn-22.3.2-py2.py3-none-any.whl size=521524 sha256=f40324f42d2aeddc9fd4ed852181ec4ba9f98d18bc5eabab4ca8743590ef3ac9\n  Stored in directory: \/opt\/paperless\/.cache\/pip\/wheels\/76\/ae\/b7\/386cb96496b3f06625c23f137cd7a4af72f6a0fc3f9bcba624\n  Building wheel for hiredis (setup.py) ... done\n  Created wheel for hiredis: filename=hiredis-2.0.0-cp310-cp310-linux_x86_64.whl size=77885 sha256=a63614459c4aa390ae598c5e2b557f0117dca97aa548a33b62465ec03b29328b\n  Stored in directory: \/opt\/paperless\/.cache\/pip\/wheels\/a9\/b0\/b0\/a58f2bc314a1c78d077171184d746540f45437234bc67e4b4d\n  Building wheel for psycopg2 (setup.py) ... done\n  Created wheel for psycopg2: filename=psycopg2-2.9.3-cp310-cp310-linux_x86_64.whl size=498314 sha256=ce4f42edaeed61b7e7c8c5c5fa2fc351e68b7b908a581a06e75902c9f75a5d1d\n  Stored in directory: \/opt\/paperless\/.cache\/pip\/wheels\/81\/b6\/3d\/091aad3e8919ea76c84c2674b02ce3ab52de882e091c39249e\n  Building wheel for python-levenshtein (setup.py) ... done\n  Created wheel for python-levenshtein: filename=python_Levenshtein-0.12.2-cp310-cp310-linux_x86_64.whl size=160215 sha256=98731aad45b17b60df28c54ca120c81cb5f360b28d7134c517de245cde0b9028\n  Stored in directory: \/opt\/paperless\/.cache\/pip\/wheels\/7b\/c3\/05\/60b4747cf52e0f6b6ee52022088a4de07d755016493e86373d\nSuccessfully built autobahn hiredis psycopg2 python-levenshtein\nInstalling collected packages: whoosh, wcwidth, pyzbar, python-gnupg, msgpack, imap-tools, fuzzywuzzy, certifi, whitenoise, websockets, watchdog, uvloop, urllib3, tzdata, typing-extensions, txaio, tqdm, threadpoolctl, sqlparse, sniffio, setuptools, regex, redis, pyyaml, python-magic, python-dotenv, python-dateutil, pyparsing, pycparser, pyasn1-modules, psycopg2, portalocker, pluggy, pillow, pathvalidate, numpy, lxml, langdetect, joblib, inotify-simple, humanfriendly, httptools, hiredis, h11, filelock, click, charset-normalizer, blessed, attrs, async-timeout, asgiref, uvicorn, twisted, scipy, requests, reportlab, pytz-deprecation-shim, python-levenshtein, pdf2image, packaging, inotifyrecursive, gunicorn, django, concurrent-log-handler, coloredlogs, cffi, arrow, anyio, aioredis, watchgod, tzlocal, tika, scikit-learn, pikepdf, djangorestframework, django-picklefield, django-filter, django-extensions, django-cors-headers, cryptography, service-identity, pyopenssl, pdfminer.six, img2pdf, django-q, dateparser, autobahn, ocrmypdf, daphne, channels, channels-redis\n  WARNING: The script read_zbar is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script watchmedo is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script tqdm is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script sqlformat is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script dotenv is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The scripts f2py, f2py3 and f2py3.10 are installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script humanfriendly is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script normalizer is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script uvicorn is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The scripts cftp, ckeygen, conch, mailmail, pyhtmlizer, tkconch, trial, twist and twistd are installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script gunicorn is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script django-admin is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script coloredlogs is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script watchgod is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script tika-python is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script img2pdf is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script dateparser-download is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The scripts wamp, xbrnetwork and xbrnetwork-ui are installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script ocrmypdf is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\n  WARNING: The script daphne is installed in '\/opt\/paperless\/.local\/bin' which is not on PATH.\n  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.\nSuccessfully installed aioredis-1.3.1 anyio-3.5.0 arrow-1.2.2 asgiref-3.5.0 async-timeout-4.0.2 attrs-21.4.0 autobahn-22.3.2 blessed-1.19.1 certifi-2021.10.8 cffi-1.15.0 channels-3.0.4 channels-redis-3.4.0 charset-normalizer-2.0.12 click-8.1.2 coloredlogs-15.0.1 concurrent-log-handler-0.9.20 cryptography-36.0.2 daphne-3.0.2 dateparser-1.1.1 django-4.0.4 django-cors-headers-3.11.0 django-extensions-3.1.5 django-filter-21.1 django-picklefield-3.0.1 django-q-1.3.9 djangorestframework-3.13.1 filelock-3.6.0 fuzzywuzzy-0.18.0 gunicorn-20.1.0 h11-0.13.0 hiredis-2.0.0 httptools-0.4.0 humanfriendly-10.0 imap-tools-0.53.0 img2pdf-0.4.4 inotify-simple-1.3.5 inotifyrecursive-0.3.5 joblib-1.1.0 langdetect-1.0.9 lxml-4.8.0 msgpack-1.0.3 numpy-1.22.3 ocrmypdf-13.4.2 packaging-21.3 pathvalidate-2.5.0 pdf2image-1.16.0 pdfminer.six-20220319 pikepdf-5.1.1 pillow-9.1.0 pluggy-1.0.0 portalocker-2.4.0 psycopg2-2.9.3 pyasn1-modules-0.2.8 pycparser-2.21 pyopenssl-22.0.0 pyparsing-3.0.8 python-dateutil-2.8.2 python-dotenv-0.20.0 python-gnupg-0.4.8 python-levenshtein-0.12.2 python-magic-0.4.25 pytz-deprecation-shim-0.1.0.post0 pyyaml-6.0 pyzbar-0.1.9 redis-3.5.3 regex-2022.3.2 reportlab-3.6.9 requests-2.27.1 scikit-learn-1.0.2 scipy-1.8.0 service-identity-21.1.0 setuptools-62.1.0 sniffio-1.2.0 sqlparse-0.4.2 threadpoolctl-3.1.0 tika-1.24 tqdm-4.64.0 twisted-22.4.0 txaio-22.2.1 typing-extensions-4.1.1 tzdata-2022.1 tzlocal-4.2 urllib3-1.26.9 uvicorn-0.17.6 uvloop-0.16.0 watchdog-2.1.7 watchgod-0.8.2 wcwidth-0.2.5 websockets-10.2 whitenoise-6.0.0 whoosh-2.7.4\nuser@2204lts:\/opt\/paperless-ngx$ <\/code><\/pre>\n\n\n\n<p>Klein und kuschelig ist anders sag ich da nur.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Datenbank Initialisierung von Paperless-ngx<\/h2>\n\n\n\n<p>Die Datenbank muss durch paperless-ngx initialisiert werden und ein superuser f\u00fcr den ersten login ist zwingend notwendig. Also hinein in den Folder \/opt\/paperless-ngx\/src und die notwendigen Befehle ausgef\u00fchrt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/opt\/paperless-ngx\/src\nsudo -Hu paperless python3 manage.py migrate<\/code><\/pre>\n\n\n\n<p>An dieser Stelle geht die Initialisierung von Postgre-SQL auf die Bretter und mault mit &#8222;authentication failed&#8220; herum..<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>django.db.utils.OperationalError: connection to server at \"localhost\" (127.0.0.1), port 5432 failed: FATAL:  password authentication failed for user \"paperlessngx\"\nconnection to server at \"localhost\" (127.0.0.1), port 5432 failed: FATAL:  password authentication failed for user \"paperlessngx\"\n<\/code><\/pre>\n\n\n\n<p>Ich hab nochmal gepr\u00fcft, dass beim Kopieren kein Fehler aufgetreten ist und nat\u00fcrlich ist da keiner. Okay.. es scheint so zu sein, dass Paperless-ngx noch nicht so richtig mit Postgre-SQL arbeitet. Na dann kommentiere ich diese Stelle mal in der Config aus und schau mir an, was er macht wenn ich eine SQLite nehme.<\/p>\n\n\n\n<p>Mir wird zumindest klar, warum in der Anleitung folgender Passus steht:<\/p>\n\n\n\n<p><strong>Warning<\/strong><\/p>\n\n\n\n<p><strong>This is a development server which should not be used in production. It is not audited for security and performance is inferior to production ready web servers.<\/strong><\/p>\n\n\n\n<p>Na seies drum, ich m\u00f6chte mir ja erstmal einen Eindruck verschaffen. Mit SQLite l\u00e4uft das Initialisieren der Datenbank durch. Als n\u00e4chtes kommt das Anlegen des Superusers. Dann machen wir das doch mal.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>user@2204lts:\/opt\/paperless-ngx\/src$ sudo -Hu paperless python3 manage.py createsuperuser\nSystem check identified some issues:\n\nWARNINGS:\n?: DEBUG mode is enabled. Disable Debug mode. This is a serious security issue, since it puts security overides in place which are meant to be only used during development. This also means that paperless will tell anyone various debugging information when something goes wrong.\nUsername (leave blank to use 'paperless'): superuser\nError: That username is already taken.\nUsername (leave blank to use 'paperless'):\nEmail address:\nPassword:\nPassword (again):\nThe password is too similar to the username.\nBypass password validation and create user anyway? &#91;y\/N]: y\nSuperuser created successfully.\nuser@2204lts:\/opt\/paperless-ngx\/src$\n<\/code><\/pre>\n\n\n\n<p> L\u00e4uft auch sauber durch. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. Teststart von Paperless-ngx<\/h2>\n\n\n\n<p>Als n\u00e4chtes wird ein Test des Servers empfohlen. Mal sehen ob er startet.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>user@2204lts:\/opt\/paperless-ngx\/src$ sudo -Hu paperless python3 manage.py runserver\nWatching for file changes with StatReloader\n&#91;2022-05-15 14:24:12,449] &#91;INFO] &#91;django.utils.autoreload] Watching for file changes with StatReloader\nPerforming system checks...\n\nSystem check identified some issues:\n\nWARNINGS:\n?: DEBUG mode is enabled. Disable Debug mode. This is a serious security issue, since it puts security overides in place which are meant to be only used during development. This also means that paperless will tell anyone various debugging information when something goes wrong.\n\nSystem check identified 1 issue (0 silenced).\nMay 15, 2022 - 14:24:12\nDjango version 4.0.4, using settings 'paperless.settings'\nStarting ASGI\/Channels version 3.0.4 development server at http:\/\/127.0.0.1:8000\/\nQuit the server with CONTROL-C.\n<\/code><\/pre>\n\n\n\n<p>Er sagt er l\u00e4uft auf 127.0.0.1:8000. Mal gucken ob er auch antwortet.<\/p>\n\n\n\n<p>Im Webbrowser antwortet er jedenfalls nicht auf anfragen von Au\u00dfen, aber er sagte ja auch, er h\u00f6rt nur auf die Loopback Adresse. Dann halt von der bash aus mit wget mal die Homepage abholen..<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>user@2204lts:~$ wget 127.0.0.1:8000\/home\n--2022-05-15 12:26:39--  http:\/\/127.0.0.1:8000\/home\nConnecting to 127.0.0.1:8000... connected.\nHTTP request sent, awaiting response... 302 Found\nLocation: \/accounts\/login\/?next=\/home &#91;following]\n--2022-05-15 12:26:39--  http:\/\/127.0.0.1:8000\/accounts\/login\/?next=\/home\nReusing existing connection to 127.0.0.1:8000.\nHTTP request sent, awaiting response... 200 OK\nLength: 8284 (8,1K) &#91;text\/html]\nSaving to: \u2018home\u2019\n\nhome                100%&#91;===================&gt;]   8,09K  --.-KB\/s    in 0s\n\n2022-05-15 12:26:39 (138 MB\/s) - \u2018home\u2019 saved &#91;8284\/8284]\n\nuser@2204lts:~$ <\/code><\/pre>\n\n\n\n<p>Da ist jemand zuhause und antwortet auch. Ich hab mir die home mal in einen Browser hier her\u00fcber auf den anderen Rechner geholt. Und ja, das sieht nach einem g\u00fcltigen Versuch aus. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"612\" height=\"316\" src=\"https:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Server-test.jpg\" alt=\"\" class=\"wp-image-1495\" srcset=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Server-test.jpg 612w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Server-test-300x155.jpg 300w\" sizes=\"auto, (max-width: 612px) 100vw, 612px\" \/><\/figure>\n\n\n\n<p>Beim Abrufen der homepage zeigt er auf der Console auch ordentlich was passiert.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>user@2204lts:\/opt\/paperless-ngx\/src$ sudo -Hu paperless python3 manage.py runserver\nWatching for file changes with StatReloader\n&#91;2022-05-15 14:24:12,449] &#91;INFO] &#91;django.utils.autoreload] Watching for file changes with StatReloader\nPerforming system checks...\n\nSystem check identified some issues:\n\nWARNINGS:\n?: DEBUG mode is enabled. Disable Debug mode. This is a serious security issue, since it puts security overides in place which are meant to be only used during development. This also means that paperless will tell anyone various debugging information when something goes wrong.\n\nSystem check identified 1 issue (0 silenced).\nMay 15, 2022 - 14:24:12\nDjango version 4.0.4, using settings 'paperless.settings'\nStarting ASGI\/Channels version 3.0.4 development server at http:\/\/127.0.0.1:8000\/\nQuit the server with CONTROL-C.\nHTTP GET \/home 302 &#91;0.03, 127.0.0.1:55752]\n&#91;2022-05-15 14:26:39,858] &#91;INFO] &#91;django.channels.server] HTTP GET \/home 302 &#91;0.03, 127.0.0.1:55752]\nHTTP GET \/accounts\/login\/?next=\/home 200 &#91;0.03, 127.0.0.1:55752]\n&#91;2022-05-15 14:26:39,893] &#91;INFO] &#91;django.channels.server] HTTP GET \/accounts\/login\/?next=\/home 200 &#91;0.03, 127.0.0.1:55752]\n<\/code><\/pre>\n\n\n\n<p>Au\u00dfer dem Lapsus mit der Postgre-SQL, die nicht sauber angezogen wird ist bisher alles nach Doku gelaufen. Na dann machen wir mal \u00fcber das gr\u00fcne Einhorn einen Server daraus.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. Service f\u00fcr Paperless-ngx mit GUnicorn anlegen.<\/h2>\n\n\n\n<p>Im Verzeichnis \/scripts liegt eine systemctl unit Datei, welche ich f\u00fcr meine Installation etwas modifiziert habe. Da ich ja die Installation nicht nach \/opt\/paperless sondern nach \/opt\/paperless-ngx (\u00fcber einen Softlink) durchgef\u00fchrt habe pa\u00dft sonst beim Ausf\u00fchren des GUnicorns der Pfad zur Konfig nicht. F\u00fcr unsere Installation sieht die zu nutzende Unit Datei in \/etc\/systemd\/system\/paperless-webserver.service dann wie folgt aus.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=Paperless webserver\nAfter=network.target\nWants=network.target\nRequires=redis.service\n#Requires=paperless-webserver.socket\n\n&#91;Service]\nUser=paperless\nGroup=paperless\nWorkingDirectory=\/opt\/paperless-ngx\/src\nExecStart=\/opt\/paperless\/.local\/bin\/gunicorn -c \/opt\/paperless-ngx\/gunicorn.conf.py paperless.asgi:application\n\n&#91;Install]\nWantedBy=multi-user.target\n\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">10. Paperless-ngx als reboot festen Service einrichten<\/h2>\n\n\n\n<p>Okay die Unit Datei muss nat\u00fcrlich nach von \/opt\/psudo systemctl start paperless-webserver.serviceaperless-ngx\/scripts von root nach \/etc\/systemd\/system\/ kopiert werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp \/opt\/paperless-ngx\/scripts\/paperless-webserver.service \/etc\/systemd\/system\/\n<\/code><\/pre>\n\n\n\n<p>Dann ist es Zeit ihn in der bash zu starten und reboot fest zu machen.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo systemctl start paperless-webserver.service\nsudo systemctl enable paperless-webserver.service\nCreated symlink \/etc\/systemd\/system\/multi-user.target.wants\/paperless-webserver.service \u2192 \/etc\/systemd\/system\/paperless-webserver.service.\n\nsudo systemctl status paperless-webserver.service\n\u25cf paperless-webserver.service - Paperless webserver\n     Loaded: loaded (\/etc\/systemd\/system\/paperless-webserver.service; enabled; vendor preset: enabled)\n     Active: active (running) since Sun 2022-05-15 12:51:20 UTC; 10min ago\n   Main PID: 2029 (gunicorn)\n      Tasks: 9 (limit: 9410)\n     Memory: 170.9M\n        CPU: 5.370s\n     CGroup: \/system.slice\/paperless-webserver.service\n             \u251c\u25002029 \/usr\/bin\/python3 \/opt\/paperless\/.local\/bin\/gunicorn -c \/opt\/paperless-ngx\/gunicorn.conf.py paperless.asgi&gt;\n             \u251c\u25002031 \/usr\/bin\/python3 \/opt\/paperless\/.local\/bin\/gunicorn -c \/opt\/paperless-ngx\/gunicorn.conf.py paperless.asgi&gt;\n             \u2514\u25002032 \/usr\/bin\/python3 \/opt\/paperless\/.local\/bin\/gunicorn -c \/opt\/paperless-ngx\/gunicorn.conf.py paperless.asgi&gt;\n\nMai 15 12:51:20 2204lts systemd&#91;1]: Started Paperless webserver.\nMai 15 12:51:21 2204lts gunicorn&#91;2029]: &#91;2022-05-15 14:51:21 +0200] &#91;2029] &#91;INFO] Starting gunicorn 20.1.0\nMai 15 12:51:21 2204lts gunicorn&#91;2029]: &#91;2022-05-15 14:51:21 +0200] &#91;2029] &#91;INFO] Listening at: http:\/\/0.0.0.0:8000 (2029)\nMai 15 12:51:21 2204lts gunicorn&#91;2029]: &#91;2022-05-15 14:51:21 +0200] &#91;2029] &#91;INFO] Using worker: paperless.workers.Configurabl&gt;\nMai 15 12:51:21 2204lts gunicorn&#91;2029]: &#91;2022-05-15 14:51:21 +0200] &#91;2029] &#91;INFO] Server is ready. Spawning workers\n\n\n<\/code><\/pre>\n\n\n\n<p>Sieht soweit ganz gut. Die mitgelieferte Unit Datei funktioniert. Na dann rebooten wir mal uns sehen uns an, ob er auch dann wieder aus der Hocke kommt, der gute Paperless-ngx.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\nuser@2204lts:\/opt\/paperless-ngx\/scripts$ sudo reboot\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">11. Paperless-ngx l\u00e4uft<\/h2>\n\n\n\n<p>Den Reboot hat er \u00fcberstanden und kommt auch von alleine wieder hoch.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"978\" src=\"https:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/paperless-ngx-screen-1024x978.jpg\" alt=\"\" class=\"wp-image-1499\" srcset=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/paperless-ngx-screen-1024x978.jpg 1024w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/paperless-ngx-screen-300x286.jpg 300w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/paperless-ngx-screen-768x733.jpg 768w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/paperless-ngx-screen.jpg 1282w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Er sieht optisch ganz ansprechend aus im Dark-Mode. Ich hab mal ein paar PDFs hinein geworfen. Da scheint ihm noch etwas zu fehlen, denn er bleibt in diesem Status h\u00e4ngen uns verarbeitet die \u00fcbergebene PDF Datei nicht.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"551\" src=\"https:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/eine-pdf-import-1024x551.jpg\" alt=\"\" class=\"wp-image-1503\" srcset=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/eine-pdf-import-1024x551.jpg 1024w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/eine-pdf-import-300x161.jpg 300w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/eine-pdf-import-768x413.jpg 768w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/eine-pdf-import.jpg 1396w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Sehen wir uns doch mal die restlichen Unit Dateien unter Scripts an.<\/p>\n\n\n\n<p>Da die letzten Tage das Internet bei mir zu Hause in den Gurten baumelte, hab ich hier im Fluss eine Unterbrechung. Wo war ich stehen geblieben. Genau &#8211; an der Stelle, dass die PDFs f\u00fcr den Import kleben geblieben sind. Das l\u00e4t sich durch die Nutzung der Paperless-Scheduler Unit im Systemctl beheben. Im Verzeichnis \/opt\/paperless-ngx\/scripts\/ gibt es eine Scheduler Unit. Diese muss noch f\u00fcr unsere Bedarf angepasst werden, und zwar wie folgt:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=Paperless scheduler\nRequires=redis.service\n\n&#91;Service]\nUser=paperless\nGroup=paperless\nWorkingDirectory=\/opt\/paperless-ngx\/src\nExecStart=python3 manage.py qcluster\n\n&#91;Install]\nWantedBy=multi-user.target\n<\/code><\/pre>\n\n\n\n<p>Danach muss die Systemctl Unit in das passende Verzeichnis \/etc\/systemd\/system\/ kopiert werden und aktiviert und enebaled werden.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo cp paperless-scheduler.service \/etc\/systemd\/system\/\nsudo systemctl start paperless-scheduler.service\nsudo systemctl enable paperless-scheduler.service\nsudo systemctl status paperless-scheduler.service\n<\/code><\/pre>\n\n\n\n<p>Und schon l\u00e4uft der Import ebenso sauber durch. Zum Testen habe ich einfach mal ein paar Dokus vom Open ZFS DevSummit auf der Website hochgeladen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"762\" src=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/pdf-uploaded-1024x762.jpg\" alt=\"\" class=\"wp-image-1506\" srcset=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/pdf-uploaded-1024x762.jpg 1024w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/pdf-uploaded-300x223.jpg 300w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/pdf-uploaded-768x571.jpg 768w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/pdf-uploaded.jpg 1277w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Die hochgeladenen PDFs werden auch sch\u00f6n m,it Dokumenten Thumbnails im Dokumentenbereich angezeigt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"471\" src=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Dokumententhumbnails-1024x471.jpg\" alt=\"\" class=\"wp-image-1508\" srcset=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Dokumententhumbnails-1024x471.jpg 1024w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Dokumententhumbnails-300x138.jpg 300w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Dokumententhumbnails-768x353.jpg 768w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Dokumententhumbnails-980x450.jpg 980w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Dokumententhumbnails.jpg 1277w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Auch das Suchen in den Dokumenten l\u00e4uft scheinbar recht fl\u00fcssig. Ich habe Probweise nach \u00dcberschrift eines Slides gesucht, welches ich beim schnell mal hineinsehen gefunden habe: &#8222;Failure: Where&#8220;. Auch das l\u00e4uft so, wie ich es erhoft hatte, dass Paperless-ngx nur diese PDF dann als Suchergebnis anzeigt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"463\" src=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Failure_Where-1024x463.jpg\" alt=\"\" class=\"wp-image-1510\" srcset=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Failure_Where-1024x463.jpg 1024w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Failure_Where-300x136.jpg 300w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Failure_Where-768x347.jpg 768w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Failure_Where.jpg 1277w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Beim Clicken auf das Auge wird das gefundene PDF auch ge\u00f6ffnet, jedoch wird der Sucherbgriff nicht sauber \u00fcbergeben und das erneute Ansto\u00dfen des Suchprozesses in der PDF, mittls &lt;STRG&gt;+F unde dem Suchbegriff &#8222;Failure: Where&#8220; f\u00fchrt zum Ziel.<\/p>\n\n\n\n<p>Bevor ich mich dem Batch-Import zuwende, m\u00f6chte ich jetzt noch mal ganz genau checken, welche Dokumentenformate unterst\u00fctzt werden. Denn am liebsten will ich ja schlussendlich da alles einfach hineinwerfen und dann Paperless-ngx f\u00fcr mich suchen lassen.<\/p>\n\n\n\n<p>Stellt sich heraus, es ist wie in der Dokumenation angeben, es werden prim\u00e4r PDF, Bilder und plain Text unterst\u00fctzt..<\/p>\n\n\n\n<p><em><strong>Q:<\/strong> What file types does paperless-ngx support?<\/em><\/p>\n\n\n\n<p><em><strong>A:<\/strong> Currently, the following files are supported:<\/em><\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>PDF <em>documents, PNG images, JPEG images, TIFF images and GIF images are processed with OCR and converted into PDF documents.<\/em><\/li><li><em>Plain text documents are supported as well and are added verbatim to paperless.<\/em><\/li><\/ul>\n\n\n\n<p>Ich habe mir mal einen schlecht lesebaren Screendumo von einem Mathematik Video gezogen, in welchem der Begriff Bremsweg zu sehen ist. Den Screendump habe ich dann Paperless-ngx als .bmp\/.jpg\/.png\/.tif im Webupload zum Fra\u00df vor geworfen. Hat er anstandslos genommen und auch die Suche nach dem Begriff Bremsweg zeigt, dass die OCR sauber arbeitet.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"493\" src=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Bremsweg-search-1024x493.jpg\" alt=\"\" class=\"wp-image-1513\" srcset=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Bremsweg-search-1024x493.jpg 1024w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Bremsweg-search-300x144.jpg 300w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Bremsweg-search-768x370.jpg 768w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/Bremsweg-search.jpg 1274w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Bei Plaintext hab ich zwei IETF RFC als Textfile \u00fcber den Webupload hochgeladen. Es sind die beiden RFCs 1918 und 4193, welche sich um die Privaten-Adressen oder Unique Local IPv6 Unicast Adressen drehen. Eine Textsuche nach 10.0.0.0\/8 oder fc00::\/7 f\u00fchre, wie erwartet, zur Anzeige des jeweiligen RFC Dokumentes als Thumbnail und mit dem Click auf das Auge wird das Dokument ge\u00f6ffnet. Hier ist es wie bei den PDF Dateien ebenso, dass der gesuchte Parameter nicht \u00fcbergeben wird und eine erneute Suche notwendig ist. Evuentuell ist mein Anspruch hier etwas zu hoch, dass ich den Jump zum ersten Auftauchen des Suchbegriffs erwarte.<\/p>\n\n\n\n<p>Die Dokumente werden entsprechend der oben durchgef\u00fchrten Definition als Orginal in folgendem Pfad gespeichert: \/opt\/paperless\/media-root\/documents\/originals\/<\/p>\n\n\n\n<p>Die geOCRten Dokumente liegen dann alle im Archiv Verzeichnis: \/opt\/paperless\/media-root\/documents\/archive<\/p>\n\n\n\n<p>Lediglich die Plaintextfiles werden nicht zum PDF per OCR konvertiert. Hier wird scheinbar immer auf das orginale File zugegriffen. Die Thumbnails f\u00fcr den Browser landen in folgendem Verzeichnis: \/opt\/paperless\/media-root\/documents\/thumbnails<\/p>\n\n\n\n<p>Nun w\u00fcrde ich nat\u00fcrlich auch gerne noch meinen ganzen Zoo an verschieden formatierten Office-Files (Microsoft, Openoffice, Libreoffice, etc..) auf das Paperless-ngx bringen. Ich denke mal auf Tika herum..<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">12. Fazit<\/h2>\n\n\n\n<p>Das Projekt Paperless-ngx leistet sehr gute Arbeit, lediglich die scheinbar fehlende Postgre-SQL Unterst\u00fctzung k\u00f6nnte man negativ ankreiden. Da das Projekt jedoch klar von einem Produktiveneinsatz abr\u00e4t, wird das wohl noch einge Entwicklerzeit dauern, bis sich dieses von mir als produktionsrelevantes Feature einstellt. Die Tests sind alle positiv Gelaufen. Auch bei einem Balkimport von 400 PDF Files \u00fcber das Webupload-Tool machte Paperless-ngx nicht schlapp. Die CPU Load der VBox beim Import war entsprechend auf &#8222;4 CPUs&#8220; verteilt bei einer gemittelten RAM Nutzung von 5GByte der 8GByte. Die Lastverteilung klappt sehr gut, wenn man sich an die in der Doku stehenden Threadzahlen h\u00e4lt.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"325\" height=\"191\" src=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/CPUload.jpg\" alt=\"\" class=\"wp-image-1519\" srcset=\"http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/CPUload.jpg 325w, http:\/\/www.fotoandnet.de\/wp\/wp-content\/uploads\/2022\/05\/CPUload-300x176.jpg 300w\" sizes=\"auto, (max-width: 325px) 100vw, 325px\" \/><\/figure>\n\n\n\n<p>Meine langfristige Zielstellung alle Dokumente in einem Tool zu agregieren und hier durchsuchbar zu machen r\u00fcckt in greifbare N\u00e4he.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Nachtrag vom 05.Juni 2022<\/h2>\n\n\n\n<p>Ich hab in der Zwischenzeit erfolglos versucht das Apache Tika mit dem Papless-NGX zum Fliegen zu bekommen. Mir erscheint das Projekt Paperless-NGX auf einem guten Weg zu sein, jedoch wird meine Erwartungshaltung an ein papierloses B\u00fcro hier noch nicht weit genug erf\u00fcllt. Folgerichtig sehe ich mir als n\u00e4chstes das Projekt Docspell an. Auch hier werde ich berichten, wie es zu installieren ist und ob es alltagstauglich ist. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ich bin stark daran interessiert den ganzen sich ansammelnden Papierwust etwas professioneller zu handhaben. Nachdem ich mir dazu auf YT einige echt gute Beitr\u00e4ge von Christian Zengel angesehen habe, will ich mir mal eine&#46;&#46;&#46;<\/p>\n","protected":false},"author":2,"featured_media":1464,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[82,78,80,81,79],"class_list":["post-1457","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-linux","tag-das-papierlose-buero","tag-linux","tag-lts22-04","tag-paperless-ngx","tag-ubuntu-server"],"_links":{"self":[{"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1457","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1457"}],"version-history":[{"count":53,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1457\/revisions"}],"predecessor-version":[{"id":1811,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/posts\/1457\/revisions\/1811"}],"wp:featuredmedia":[{"embeddable":true,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=\/wp\/v2\/media\/1464"}],"wp:attachment":[{"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1457"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1457"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.fotoandnet.de\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1457"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}