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.
