In dieser Anleitung wir die IP: 192.168.2.158 und der Hostname der VM: paperless-vm-1 verwendet. Natürlich müssen diese Daten in der gesamten Anleitung angepasst werden, wenn sie auf ihren eigenen IP-Bereich sind. Den hostname empfehle ich erst mal zu belassen, bis Sie verstanden haben, wo dieser überall geändert werden muss. #ComputerRalle

Ausgangspunkt: Debian 13 Minimal. Es sind nur Standardsystemkomponenten und SSH Server installiert. debian-13.1.0-amd64-netinst.iso.

Interfaces Datei der VM bearbeiten IP Adresse vergeben

nano /etc/network/interfaces

IP und Gateway müssen sich natürlich in Ihrem Netzwerk befinden. Hier in der Anleitung ist die IP: 192.168.2.158 – diese findet sich an verschiedenen Stellen. Überall wo hier in dieser Anleitung diese IP steht, muss die Ihre anstatt eingetragen werden!

allow-hotplug ens18
auto ens18
iface ens18 inet static
        address 192.168.2.158/24
        gateway 192.168.2.1
        dns-nameservers 8.8.8.8
nano /etc/hosts

Hier muss Ihre IP auch rein (belassen Sie den Hostname: paperless-vm-1 vorerst so):

127.0.0.1       localhost
127.0.1.1       paperless-vm-1
192.168.2.158   paperless-vm-1
nano /etc/hostname
paperless-vm-1

SSH Zugriff aktivieren

nano /etc/ssh/sshd_config

Diesen Eintrag in die configdatei einfügen:

PermitRootLogin Yes
reboot

Nun kann via SSH z.B. KiTTY der Server betreten werden.

Docker auf Debian installieren

apt update && apt upgrade -y
apt install -y docker.io docker-compose curl
systemctl enable --now docker

Paperless mit docker compose installieren

Ordner für Paperlessinstallation erstellen:

mkdir -p /opt/paperless
cd /opt/paperless

docker-compose.yml Datei erstellen:

nano /opt/paperless/docker-compose.yml

Diese compose kopieren und in die docker-compose.yml einfügen. Beachten Sie, dass hier in dieser Datei IP und Hostname mehrfach auftauchen. Wenn Sie IP und Hostname geändert haben, dann auch hier.

# compose Datei von #ComputerRalle
# ralf-peter-kleinert.de
# Name des Containers, wird vor die Volumes gesetzt:
name: paperless-ngx
services:
  broker:
    # Version 7 festgesetzt:
    image: redis:7
    restart: always
  db:
    # Datenbankversion auf 17 festgesetzt:
    image: postgres:17
    restart: always
    volumes:
      - db_data:/var/lib/postgresql/data
    environment:
      POSTGRES_DB: paperless
      POSTGRES_USER: paperless
      POSTGRES_PASSWORD: paperless
  gotenberg:
    # gotenberg auf Version 8 festgesetzt:
    image: gotenberg/gotenberg:8
    restart: always
    environment:
      DISABLE_GOOGLE_CHROME: "1"
  tika:
    image: apache/tika:latest
    restart: always
  # alpine zum zurueckspielen von Paperless Backup Program Backups:
  alpine:
    image: alpine:3
    container_name: alpine_helper
    entrypoint: sh
    stdin_open: true
    tty: true
  paperless:
    # Paperless auf Version 2.19.3 festgesetzt:
    image: ghcr.io/paperless-ngx/paperless-ngx:2.19.4
    depends_on:
      - db
      - broker
      - gotenberg
      - tika
    ports:
      - "8000:8000"
    restart: always
    volumes:
      - data:/usr/src/paperless/data
      - media:/usr/src/paperless/media
      # diese beiden Ordner werden ueber Samba freigegeben:
      - ./export:/usr/src/paperless/export
      - ./consume:/usr/src/paperless/consume
    env_file:
      # in die email-versand.env werden Serveradresse, Mailadresse, Ports, User, PW usw eingetragen
      # hier koennen dann aus Paperless Dokumente via Mail versendet werden
      # muss vor start von docker-compose up -d vorhanden sein:
      - ./email-versand.env
    environment:
      PAPERLESS_REDIS: redis://broker:6379
      PAPERLESS_DBHOST: db
      PAPERLESS_DBNAME: paperless
      PAPERLESS_DBUSER: paperless
      PAPERLESS_DBPASS: paperless
      PAPERLESS_TIME_ZONE: Europe/Berlin
      PAPERLESS_SECRET_KEY: aksjd@Kfhs87H/(&986jlk-Klunihgiu87659zol
      PAPERLESS_CONSUMPTION_DIR: /usr/src/paperless/consume
      PAPERLESS_MEDIA_ROOT: /usr/src/paperless/media
      PAPERLESS_EXPORT_DIR: /usr/src/paperless/export
      PAPERLESS_TIKA_ENABLED: "1"
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000
      PAPERLESS_TIKA_ENDPOINT: http://tika:9998
      # Cosume Abruf alle 30 Sekunden:
      PAPERLESS_CONSUMER_POLLING: "30"
      PAPERLESS_CONSUMER_POLLING_DELAY: "30"
      PAPERLESS_CONSUMER_POLLING_RETRY_COUNT: "3"
      PAPERLESS_CONSUMER_DELETE_DUPLICATES: "true"
      PAPERLESS_CONSUMER_RECURSIVE: "true"
      # Mülleimer Zeit:
      PAPERLESS_EMPTY_TRASH_DELAY: "365"
      PAPERLESS_OCR_LANGUAGE: deu+eng
      # Dokument Export benennt die Doks Nach Jahr, Monat, Tag, Name:
      PAPERLESS_FILENAME_FORMAT: "{{ created_year }}-{{ created_month }}-{{ created_day }}_{{ title }}"
      PAPERLESS_ALLOWED_HOSTS: "paperless-vm-1,192.168.2.158,localhost"
      PAPERLESS_CSRF_TRUSTED_ORIGINS: "https://paperless-vm-1,https://192.168.2.158"
volumes:
  data:
  media:
  export:
  db_data:

Email Datei für Versand

nano /opt/paperless/email-versand.env
PAPERLESS_EMAIL_HOST=
PAPERLESS_EMAIL_PORT=25
PAPERLESS_EMAIL_HOST_USER=
PAPERLESS_EMAIL_HOST_PASSWORD=
PAPERLESS_EMAIL_FROM=
PAPERLESS_EMAIL_USE_TLS=
PAPERLESS_EMAIL_USE_SSL=

SSL-Zertifikat erstellen

VM-lokalen Ordner für das Zertifikat erstellen:

mkdir -p /etc/ssl/localcerts
cd /etc/ssl/localcerts

Befehl Um Zertifikat zu erzeugen, hier -days 3650 = 10 Jahre. Beachten Sie, dass auch hier IP und hostname im Zertifikat enthalten sind!

openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -keyout paperless-vm-1.key -out paperless-vm-1.crt -subj "/C=DE/ST=Berlin/L=Berlin/O=Local/OU=IT/CN=paperless-vm-1" -addext "subjectAltName=DNS:paperless-vm-1,IP:192.168.2.158"

Zertifikat aufrufen, dann markieren und mit STRG+Shift+c kopieren:

cat /etc/ssl/localcerts/paperless-vm-1.crt

Zertifikat in Windows installieren

Neue Textdatei auf Windows PC erstellen. Am besten mit Notepadd++. Umbenennen in: paperless-vm-1.crt, dann das kopierte Zetifikat einfügen und speichern.

Doppelklick auf das Zert paperless-vm-1.crt -> Zertifikat installieren -> Lokaler Computer -> Alle Zertifikate in folgendem Speicher speichern, Durchsuchen -> Vertrauenswürdige Stammzertifizierungstellen -> Weiter -> Fertigstellen

In die Windows hosts-Datei IP und Hostname eintragen unter:

C:\Windows\System32\drivers\etc\hosts

Ganz unten zufügen und speichern:

192.168.2.158 paperless-vm-1

############## OPTIONAL Start ##############

Backup aus dem Paperless Backup Programm einspielen – optional

Falls Paperless schon läuft:

docker compose down

Backup von Windows Paperless Backup Programm in die VM kopieren, mit Powershell: 

scp -r "H:\Paperless-Backup\2025-10-28_12-15-01 - klein" root@192.168.2.158:/opt/paperless-backup

Paperless Ordner nach frischer Installation löschen:

rm -rf /opt/paperless/data
rm -rf /opt/paperless/media
rm -rf /opt/paperless/export

Backups wiederherstellen:

docker run --rm -v paperless-ngx_data:/restore -v /opt/paperless-backup:/backup alpine tar -xzf /backup/paperless-ngx_data.tar.gz -C /restore
docker run --rm -v paperless-ngx_media:/restore -v /opt/paperless-backup:/backup alpine tar -xzf /backup/paperless-ngx_media.tar.gz -C /restore
docker run --rm -v paperless-ngx_export:/restore -v /opt/paperless-backup:/backup alpine tar -xzf /backup/paperless-ngx_export.tar.gz -C /restore
docker run --rm -v paperless-ngx_db_data:/restore -v /opt/paperless-backup:/backup alpine tar -xzf /backup/paperless-ngx_db_data.tar.gz -C /restore
docker-compose up -d

Testen mit:

http://192.168.2.158:8000

############## OPTIONAL Ende ##############

cd /opt/paperless

Paperless hochfahren, alle Container werden heruntergeladen (gepullt) und aktiviert:

docker compose up -d

stunnel4 für SSL Zugriff installieren

stunnel ist ein kleines, mächtiges Werkzeug. Es kann eine unverschlüsselte TCP-Verbindung entgegennehmen, sie per SSL oder TLS verschlüsseln und an den Zielserver weiterleiten.

Umgekehrt kann es auch eine verschlüsselte Verbindung annehmen und sie intern wieder unverschlüsselt bereitstellen. Auf diese Weise lässt sich jeder beliebige Netzwerkdienst, der selbst keine Verschlüsselung unterstützt, sicher betreiben. Man kann sich stunnel wie einen Verschlüsselungs-Adapter vorstellen. Das Programm packt Datenströme in einen sicheren Tunnel ohne, dass die entsprechende Anwendung etwas davon wissen muss.

apt install stunnel4 -y

stunnel Konfigurieren

stunnel.conf erstellen / öffnen:

nano /etc/stunnel/stunnel.conf

Eintrag:

pid = /var/run/stunnel4/paperless.pid
include = /etc/stunnel/paperless.conf

paperless.conf erstellen / öffnen:

nano /etc/stunnel/paperless.conf

Eintrag:

pid = /var/run/stunnel4/paperless.pid

[paperless]
accept = 443
connect = 8000
cert = /etc/ssl/localcerts/paperless-vm-1.crt
key = /etc/ssl/localcerts/paperless-vm-1.key

default auf ENABLED=1 setzen:

nano /etc/default/stunnel4
ENABLED=1

stunnel aktivieren und checken:

systemctl enable --now stunnel4
systemctl restart stunnel4
systemctl status stunnel4

Samba installieren Paperless consume und export freigeben

apt install samba -y

Samba config Datei öffnen:

nano /etc/samba/smb.conf

Ganz am Ende der Datei einfügen:

[global]
   workgroup = WORKGROUP
   server string = Paperless Server
   security = user
   map to guest = never
   smb encrypt = required
   server signing = mandatory
   log file = /var/log/samba/log.%m
   max log size = 1000

[paperless-consume]
   path = /opt/paperless/consume
   browseable = yes
   writable = yes
   guest ok = no
   public = no
   valid users = paperless
   force user = paperless
   create mask = 0775
   directory mask = 0775

[paperless-export]
   path = /opt/paperless/export
   browseable = yes
   writable = yes
   guest ok = no
   public = no
   valid users = paperless
   force user = paperless
   create mask = 0775
   directory mask = 0775

Rechte setzen:

chmod -R 777 /opt/paperless/consume
chmod -R 777 /opt/paperless/export
adduser paperless
smbpasswd -a paperless
systemctl restart smbd

reboot

Windows auch einmal neustarten.

Die Rechner und der paperless Server müssen sich im selben Netzwerk befinden! Auf Windows oder Netzwerkrechner können diese Ordner nun aufgerufen werden:

\\192.168.2.158\paperless-consume

\\paperless-vm-1\paperless-consume

\\192.168.2.158\paperless-export

\\paperless-vm-1\paperless-export

Paperless im Browser aufrufen

Paperless-ngx ohne SSL im Browser öffnen:

http://192.168.2.158:8000

Paperless aufrufen mit SSL:

https://paperless-vm-1

Paperless läuft.

Video zu dieser Anleitung