Paperless-ngx "Bare Metal" installieren (Debian 11/12)

Aus RT-Wiki - IT-Notizbuch
Zur Navigation springen Zur Suche springen
Testumgebung
OS Debian 11.11/12.10
paperless-ngx (Dev) 2.15.0

Anleitung für die "Bare Metal" Installation von paperless-ngx mit dem Sourcecode vom Dev oder Beta Branch auf Debian 11 und 12.

Abhängigkeiten installieren

Das System auf den neusten Stand bringen:

sudo apt update
sudo apt upgrade
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev \
libpq-dev libsqlite3-dev libbz2-dev pkg-config libgdbm-compat-dev liblzma-dev tk-dev uuid-dev wget imagemagick unpaper \
fonts-liberation gnupg libpq-dev default-libmysqlclient-dev pkg-config libmagic-dev libzbar0 poppler-utils \
icc-profiles-free qpdf liblept5 libxml2 pngquant zlib1g tesseract-ocr redis git curl

Python 3.11 installieren

Debian 11:

wget https://www.python.org/ftp/python/3.11.11/Python-3.11.11.tgz
tar -xvf Python-3.11.11.tgz
cd Python-3.11.11
./configure --enable-optimizations
make -j$(nproc)
sudo make install

Debian 12:

sudo apt install python3.11 python3.11-venv python3-pip python3-setuptools python3-wheel

Ghostscript 10.05 installieren

wget https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10050/ghostscript-10.05.0.tar.gz
tar -xvf ghostscript-10.05.0.tar.gz
cd ghostscript-10.05.0
./configure --without-x
make -j$(nproc)
sudo make install

Paperless-ngx installieren

Paperless Benutzer erstellen und Repository klonen:

sudo adduser paperless --system --home /opt/paperless --group
cd /opt/paperless
sudo -Hu paperless git clone https://github.com/paperless-ngx/paperless-ngx.git .
sudo -u paperless mkdir consume media

Debian 11:

sudo -Hu paperless pip3 install uv asyncio
sudo -Hu paperless uv export --no-dev --all-extras --format requirements-txt --output-file requirements.txt
sudo -Hu paperless pip3 install -r requirements.txt

Debian 12:

sudo -u paperless python3 -m venv /opt/paperless/venv
sudo -Hu paperless /opt/paperless/venv/bin/pip3 install uv asyncio
sudo -Hu paperless /opt/paperless/venv/bin/uv export --no-dev --all-extras --format requirements-txt --output-file requirements.txt
sudo -Hu paperless /opt/paperless/venv/bin/pip3 install -r requirements.txt
sudo -Hu paperless cp paperless.conf.example paperless.conf
sudo -u paperless vi paperless.conf
PAPERLESS_SECRET_KEY=change-me

PAPERLESS_CONSUMPTION_DIR=/mnt/paperless-store/consume
PAPERLESS_DATA_DIR=/mnt/paperless-store/data
PAPERLESS_MEDIA_ROOT=/mnt/paperless-store/media

PAPERLESS_TIME_ZONE=Europe/Berlin

Wenn du postgresql statt sqlite verwendet möchtest:

PAPERLESS_DBHOST=127.0.0.1 # Use postgresql
PAPERLESS_DBNAME=db_paperless
#PAPERLESS_DBUSER=paperless
PAPERLESS_DBPASS=<password>
sudo apt install postgresql
sudo -u postgres psql
CREATE DATABASE db_paperless;
CREATE USER paperless WITH ENCRYPTED PASSWORD '<password>';
GRANT ALL ON DATABASE db_paperless TO paperless;
\c db_paperless
GRANT ALL ON SCHEMA public TO paperless;
\q

Frontend

cd src-ui
sudo curl -sL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install nodejs
sudo npm install -g @angular/cli
sudo npm install -g pnpm
sudo -Hu paperless pnpm install

sudo -Hu paperless ng build --configuration production

Backend

cd ../src

Debian 11:

sudo -Hu paperless python3 manage.py migrate
sudo -Hu paperless python3 manage.py createsuperuser
sudo -Hu paperless python3 manage.py collectstatic

Debian 12:

sudo -Hu paperless /opt/paperless/venv/bin/python3 manage.py migrate
sudo -Hu paperless /opt/paperless/venv/bin/python3 manage.py createsuperuser
sudo -Hu paperless /opt/paperless/venv/bin/python3 manage.py collectstatic

ImageMagick konfigurieren

sudo vi /etc/ImageMagick-6/policy.xml
<policy domain="coder" rights="read|write" pattern="PDF" />

Systemd Services anlegen

cd ../scripts

paperless-consumer

Debian 12:

sudo vi paperless-consumer.service
ExecStart ersetzen:
ExecStart=/opt/paperless/venv/bin/python3 manage.py document_consumer
sudo ln -s /opt/paperless/scripts/paperless-consumer.service /etc/systemd/system/paperless-consumer.service
sudo systemctl daemon-reload
sudo systemctl enable --now paperless-consumer.service
systemctl status paperless-consumer.service

Sollte in etwa so aussehen:

● paperless-consumer.service - Paperless consumer
     Loaded: loaded (/etc/systemd/system/paperless-consumer.service; enabled; preset: enabled)
     Active: active (running) since Sat 2025-03-22 22:25:06 CET; 6s ago
   Main PID: 6715 (python3)
      Tasks: 11 (limit: 9472)
     Memory: 97.2M
        CPU: 1.518s
     CGroup: /system.slice/paperless-consumer.service
             └─6715 /opt/paperless/venv/bin/python3 manage.py document_consumer

paperless-scheduler

sudo vi paperless-scheduler.service

Debian 11:

ExecStart ersetzen:
ExecStart=/opt/paperless/.local/bin/celery --app paperless beat --loglevel INFO

Debian 12:

ExecStart ersetzen:
ExecStart=/opt/paperless/venv/bin/celery --app paperless beat --loglevel INFO
sudo ln -s /opt/paperless/scripts/paperless-scheduler.service /etc/systemd/system/paperless-scheduler.service
sudo systemctl daemon-reload
sudo systemctl enable --now paperless-scheduler.service
systemctl status paperless-scheduler.service

Sollte in etwa so aussehen:

● paperless-scheduler.service - Paperless Celery Beat
     Loaded: loaded (/etc/systemd/system/paperless-scheduler.service; enabled; preset: enabled)
     Active: active (running) since Sat 2025-03-22 22:29:33 CET; 4s ago
   Main PID: 6981 ([celery beat] -)
      Tasks: 22 (limit: 9472)
     Memory: 115.1M
        CPU: 1.831s
     CGroup: /system.slice/paperless-scheduler.service
             └─6981 "[celery beat] --app paperless beat --loglevel INFO"

paperless-task-queue

sudo vi paperless-task-queue.service

Debian 11:

ExecStart ersetzen:
ExecStart=/opt/paperless/.local/bin/celery --app paperless worker --loglevel INFO

Debian 12:

ExecStart ersetzen:
ExecStart=/opt/paperless/venv/bin/celery --app paperless worker --loglevel INFO
sudo ln -s /opt/paperless/scripts/paperless-task-queue.service /etc/systemd/system/paperless-task-queue.service
sudo systemctl daemon-reload
sudo systemctl enable --now paperless-task-queue.service
systemctl status paperless-task-queue.service

Sollte in etwa so aussehen:

● paperless-task-queue.service - Paperless Celery Workers
     Loaded: loaded (/etc/systemd/system/paperless-task-queue.service; enabled; preset: enabled)
     Active: active (running) since Sat 2025-03-22 22:31:23 CET; 4s ago
   Main PID: 7122 ([celeryd: celer)
      Tasks: 24 (limit: 9472)
     Memory: 197.6M
        CPU: 2.177s
     CGroup: /system.slice/paperless-task-queue.service
             ├─7122 "[celeryd: celery@paperless-ngx-1:MainProcess] -active- (--app paperless worker --loglevel INFO)"
             ├─7153 "[celeryd: celery@paperless-ngx-1:ForkPoolWorker-1]"
             └─7154 "[celeryd: celery@paperless-ngx-1:ForkPoolWorker-2]"

paperless-webserver

sudo vi paperless-webserver.service

Debian 11:

exec ersetzen:
exec /opt/paperless/.local/bin/granian --interface asginl --ws "paperless.asgi:application"'

Debian 12:

exec ersetzen:
exec /opt/paperless/venv/bin/granian --interface asginl --ws "paperless.asgi:application"'
sudo ln -s /opt/paperless/scripts/paperless-webserver.service /etc/systemd/system/paperless-webserver.service
sudo systemctl daemon-reload
sudo systemctl enable --now paperless-webserver.service
systemctl status paperless-webserver.service

Sollte in etwa so aussehen:

● paperless-webserver.service - Paperless webserver
     Loaded: loaded (/etc/systemd/system/paperless-webserver.service; enabled; preset: enabled)
     Active: active (running) since Sat 2025-03-22 22:34:41 CET; 3s ago
   Main PID: 7519 (granian asginl )
      Tasks: 18 (limit: 9472)
     Memory: 133.2M
        CPU: 1.746s
     CGroup: /system.slice/paperless-webserver.service
             ├─7519 "granian asginl :::8000 paperless.asgi:application"
             └─7521 "granian asginl :::8000 paperless.asgi:application worker-1"

Zusätzliche Pakete installieren

stopwords & punkt_tab

cd ..


Debian 11:

sudo -Hu paperless python3 -m nltk.downloader stopwords
sudo -Hu paperless python3 -m nltk.downloader punkt_tab

Debian 12:

sudo -Hu paperless /opt/paperless/venv/bin/python3 -m nltk.downloader stopwords
sudo -Hu paperless /opt/paperless/venv/bin/python3 -m nltk.downloader punkt_tab
sudo apt install tesseract-ocr-deu
sudo -Hu paperless vi /opt/paperless/paperless.conf
PAPERLESS_NLTK_DIR=/opt/paperless/nltk_data

jbig2enc

sudo apt install autotools-dev automake libtool libleptonica-dev
cd ~

Debian 11:

wget https://ftp.gnu.org/gnu/autoconf/autoconf-2.71.tar.xz
tar -xf autoconf-2.71.tar.xz
cd autoconf-2.71/
./configure
make -j$(nproc)
sudo make install 
. ~/.profile
autoconf --version
git clone https://github.com/agl/jbig2enc
cd jbig2enc
./autogen.sh
./configure && make -j$(nproc)
sudo make install

Für die Verarbeitung von Dokumenten in deutscher Sprache:

sudo apt install tesseract-ocr-deu
sudo -Hu paperless vi /opt/paperless/paperless.conf
PAPERLESS_OCR_LANGUAGE=deu+eng

Tika / Gotenberg installieren (Docker)

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo docker pull apache/tika
sudo docker run -d --restart unless-stopped -p 127.0.0.1:9998:9998 apache/tika
sudo docker pull gotenberg/gotenberg:8
sudo docker run -d --restart unless-stopped -p 127.0.0.1:3000:3000 gotenberg/gotenberg:8
sudo -Hu paperless vi /opt/paperless/paperless.conf
# Tika settings

PAPERLESS_TIKA_ENABLED=true
PAPERLESS_TIKA_ENDPOINT=http://localhost:9998
PAPERLESS_TIKA_GOTENBERG_ENDPOINT=http://localhost:3000

Quellen