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

18 thoughts on “Paperless mit SSL im LAN auf Debian VM auf Proxmox”
    1. Ja das geht.

      In der Compose Datei diese Zeilen suchen:

      paperless:
      # Paperless auf Version 2.19.3 festgesetzt:
      image: ghcr.io/paperless-ngx/paperless-ngx:2.19.4

      Dann die Nummer: 2.19.4 auf die gewünschte Version setzen.

      Dann:

      docker-compose down
      docker-compose up -d

      bzw:
      docker compose down
      docker compose up -d

  1. Moins,

    ich danke ebenfalls für die Anleitung!

    Eine Frage, die sich gar nicht so sehr um paperless sondern um docker dreht (würde ja auch gern verstehen, was ich hier kopiere) ist folgende: warum legen Sie die named volumes an, die dann, nach meinem Verständnis, gar keinen Einsatz mehr finden

    „`
    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
    „`

    und werden sie offensichtlich doch, weil ich einen Fehler bekomme, wenn ich was ändere

  2. Hallo Ralf-Peter,
    danke Dir für die Arbeit, die Du hier in diese Videos und den Blog reingesteckt hast. Ich habe gem. Deines Blogs versucht, Paperless auf einem Mini-Asus zu installieren. Dabei habe ich nacheinander jeden Schritt explizit abgearbeitet. Jedoch habe ich die neueste stable-Version von Debian benutzt und auch die neueste stable-Version von paperless.
    Habe alle IP’s Deiner Anleitung gegen die meines Servers ausgetauscht. Jetzt konnte ich Proxmox in neuester Ausgabe per USB-Stick installieren. Auch die VM für Debian anzulegen funktionierte, und ich kann auch mit https://meine IP:8006 darauf zugreifen. Alle Schritte aus dem Blog nachvollzogen, aber kein Zugriff über http://meine IP:8000 auf paperless. Firewall abgeschaltet. Auch kein Erfolg ! Ist wohl alles bischen zu kompliziert für einen alten Mann.

  3. Leider ist mein Kommentar von gestern scheinbar rausgeflogen. Es stand da er müßte erst genehmigt werden. Ich habe die Anleitung schritt für Schritt nachvollzogen,komme aber nicht in Paperless rein. VM wird erreicht unter https://192 … … … :8006 Unter der gleichen IP-Adresse mit Port 8000 > http://192. … … … :8000/ komme ich jedoch nicht auf Paperless. Müssen die IP’s denn unterschiedlich sein ? Ich lege aber doch nur eine VM an?

    1. Hallo Franz-Jürgen,

      dein Proxmox Server hat eine IP z.B. 192.168.1.xxx über den Port 8006 greifst zu auf das Proxmox WEB-UI zu.. Deine Paperless-VM hat eine eigene IP z.B. 192.168.1.yyy und da kannst du Dich dann den Port 8000 von Paperless-UI einloggen.. Siehe es als zwei unterschiedlichen Server an.. Good Luck

      Gruß Kurt

  4. Gerade vor einer halben Stunde einen neuen Kommentar geschrieben und auch der ist wieder weg. Das sind jetzt 2 Kommentare in 2 Tagen die weggekommen sind.

  5. Hallo Ralf-Peter
    ich kann machen was ich will, bekomme das Paperless nicht ans Laufen. Wenn ich richtig gelesen habe, hattest Du ja auch schon erhebliche Probleme mit Deinem Backup-System.
    Warum geht man nicht einfach hin und bietet Konsumern nicht einfach das Programm mit einer einfachen Installationsroutine, einer einfachen Backup-Variante und einer automatischen Update-Funktion an. Die Idee, die dahinter steckt, Dokumente vernünftig verwalten zu können scheint mir eminent wichtig und up-to-date zu sein. Da wäre sicher der Eine oder Andere bereit etwas dafür zu bezahlen

    1. Hallo Franz-Jürgen. Zu den Kommentaren. Ich bekomme am Tag 50 Spam-Kommentrare und muss alles händisch freigeben.

      Deine Paperless VM braucht eine eigene feste IP und ist ein eigener Server. Ich sehe keinen Grund, weshalb das nicht funktionieren sollte.

      1. Die Installation scheitert schon am Punkt wo Kitty seinen Auftritt beginnt. Bei apt update && apt upgrade -y kann er schon einige Pakete nicht runterladen. Mit dem Befehl apt-get probiert, dasselbe Spiel. Docker.io und docker-compose lassen sich nicht installieren. systemctl enable –now docker funktioniert dann folgerichtig auch nicht. Ist alles so umständlich. Ich bin jetzt 71 Jahre alt. Gibt es für nen Hunny „betreutes Installieren?“

        1. Hi,

          Das Problem hatte ich auch – lag (nach einigem googeln) wohl an der Minimalinstallation, so dass einige Pakete, u.a. Resolv.conf (bin Anfänger, es gibt mehrere ähnlich lautende Dateien) nicht installiert werden. Das führt zu dem DNS-Fehler.
          Und weil das inzwischen wohl ein „dynamischer Verweis“ ist, lässt sich die Datei nicht einfach per nano ergänzen, sondern muss erst entfernt und dann neu erstellt werden.
          Danach lässt sich „Nameserver 8.8.8.8“ speichern

          Dann klappten die Updates.

          Bin noch dabei, den Rest nachzuvollziehen. Vielen Dank bis hierhin!!

      2. Nachdem ich mit mehreren Versuchen über Debian das Ding nicht ans Laufen bekommen habe, hatte ich nun die Schn. …voll und wollte schon alles hinschmeißen. Dann hab ich einen letzten Versuch mit einer anderen Distribution > aktuellste Ubuntu Live-Version angestoßen. Und siehe da, „es läuft!“. Augenscheinlich war das Update und Upgraden über SSL in den Trixie_Versionen nicht möglich. Warum auch immer.

  6. Hallo liebe Nutzer,
    nach langem hin und her hab ich ja paperless über eine Ubuntu-Distribution ans Laufen bekommen. Der eingebundene Dokumentendrucker Brother ADS-4700W tut auch seinen Dienst, hab jetzt 132 Dokumente schon eingescannt und gespeichert. Und auch die Netzwerkfreigaben über Samba tun ihren Dienst. Also alles gut. Habe aber bewußt den optionalen Teil fürs Backup weggelassen, weil es da wohl einige Schwierigkeiten gab. Ich möchte aber doch eine Backup-Funktion nutzen und diese Daten dann auf einer Nextcloud nur mit lokalen Zugang ablegen.
    Aber ich finde die Datei-Ordner media, den Datenbank-Ordner usw. nicht. Welche Dateien muss ich sichern, um ein komplettes Backup zu bekommen? Und wo finde ich diese ?
    In vielen Beschreibungen liegen die relevanten Ordner alle in einem Verzeichnis Paperless-ngx

  7. moin, Deine letzten Worte in „Gottes Gehör“, habe version 2.20.15 nach Deiner Anleitung installiert und was soll ich sagen … es hat funktioniert! Danke!!!
    Es funktioniert mit der letzten Debian 13 version, Probleme hatte ich mit meine UniFi- Netzwerk und der statischen IP-Adresse. Letzlich habe ich die VM auf DHCP umgestellt und in der UDM feste IP-Adresse vergeben. Läuft …
    Demnächst mach ich das Update auf version 3.x, hoffe das funktioniert genauso 😉 …

Schreibe einen Kommentar

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