Paperless-ngx im Praxistest: Wie Sie den Dateispeicher intelligent optimieren
Wer Paperless-ngx im produktiven Einsatz hat, kennt das Phänomen: Die Festplatte meldet sich. Erst leise, dann immer penetranter. Was als überschaubares Dokumentenmanagement-Projekt begann, entwickelt sich schnell zum Speicherfresser – besonders wenn täglich Dutzende PDFs eintrudeln. Dabei zeigt sich: Die Standardkonfiguration ist selten für langfristige Archivierung ausgelegt. Zeit, die Speicherstrategie unter die Lupe zu nehmen.
Vom Datenberg zur effizienten Landschaft: Speicherarchitektur verstehen
Paperless-ngx arbeitet mit drei Dateiarten: Den Originaldokumenten (meist PDFs), den archivierten PDF/A-Versionen und Thumbnails. Während die Originale unverändert bleiben, wandelt das System Dokumente in das langzeitstabile PDF/A-Format um – ein Prozess, der bei falschen Einstellungen schnell zum Speicherproblem wird. Der Teufel steckt hier im Detail der Consumer-Pipeline.
Ein klassischer Fehler: Unbedachte OCR-Einstellungen. Tesseract erzeugt durchaus brauchbare Texterkennung bei 150 DPI. Warum also standardmäßig 300 DPI einstellen? Das bläht Dateien unnötig auf. Wer Rechnungen ohne Bebilderung verarbeitet, kann oft sogar auf 72 DPI runtergehen. Interessanter Aspekt: Viele vergessen, dass auch die Thumbnail-Generierung Speicher kostet – bei hunderttausend Dokumenten summiert sich das.
Die Kompressionsfrage: Mehr als nur ein Knopf
PDF ≠ PDF. Die Komprimierungsstufe bei der Archivierung entscheidet über Platzverbrauch. Paperless-ngx nutzt Ghostscript, das verschiedene Algorithmen bietet. DCTEncode für Bilder, FlateEncode für Text. Doch Voreinstellungen sind oft zu konservativ. Ein Test: Eine 50-seitige Firmenpräsentation als Scan. Standardeinstellung: 12 MB. Nach Optimierung der JPEG-Qualität von 90 auf 75: 6,2 MB. Visuell kaum Unterschied, aber halbierter Platzbedarf.
Dabei zeigt sich ein Zielkonflikt: Juristische Dokumente benötigen maximale Lesbarkeit, interne Memos vertragen stärkere Kompression. Die Lösung? Tag-basierte Regeln. Dokumente mit Schlagworten wie „Vertrag“ oder „Rechnung“ erhalten schonende Kompression, „Interne Mitteilung“ darf stärker komprimiert werden. So spart man intelligent, ohne Risiko.
Speichertrennung: Die unterschätzte Strategie
Warum alles auf teurem SSD-Speicher parken? Paperless-ngx erlaubt die Trennung von Originalen, Archiven und Thumbnails über PAPERLESS_ORIGINAL_DIR
, PAPERLESS_ARCHIVE_DIR
und PAPERLESS_THUMBNAIL_DIR
. Praxistipp: Legen Sie Archive auf günstigem NAS-Speicher ab – die Zugriffe sind selten. Thumbnails gehören auf schnelle SSDs, da sie bei Suchen ständig abgerufen werden. Originalspeicher? Kann sogar auf Write-Once-Media wie optischen Platten liegen, wenn Compliance es zulässt.
Ein Fallbeispiel: Ein mittelständischer Maschinenbauer reduzierte seine SSD-Kosten um 60%, indem er nur Thumbnails und die Postgres-Datenbank auf Performance-Speicher hielt. Die 2 TB Archiv-PDFs wanderten auf ein Ceph-Object-Storage. Ladezeiten im Webinterface? Unverändert.
Symbolische Links und Co.: Dateisystem-Tricks
Wer mit Docker läuft, kann Volumes gezielt auf verschiedene Storage-Tiers mappen. Bei Bare-Metal-Installationen helfen symbolische Links: Nach der Konsumierung verschiebt ein Cronjob ältere Archive auf günstigeren Speicher und ersetzt sie durch einen Symlink. Paperless-ngx bemerkt das nicht – solange der Pfad stimmt. Vorsicht allerdings bei Backups: Tools wie rsync müssen mit -L
arbeiten, sonst kopieren sie nur leere Links.
Lebenszyklus-Management: Nicht alles ist für die Ewigkeit
Das größte Sparpotenzial liegt oft in der Entrümpelung. Paperless-ngx hat zwar eine „Dokumente ohne Korrespondenten“-Funktion, doch echtes Lebenszyklus-Management fehlt. Lösung? Automatisierung via API. Ein Python-Skript, das nach Ablauf von Aufbewahrungsfristen Dokumente markiert:
import requests
from datetime import datetime, timedelta
api_url = "https://paperless/api/"
auth = ("admin", "passwort")
# Dokumente älter als 7 Jahre holen
cutoff = (datetime.now() - timedelta(days=2555)).strftime("%Y-%m-%d")
params = {"created__date__lt": cutoff}
response = requests.get(f"{api_url}documents/", params=params, auth=auth)
Kombinieren Sie dies mit Tags wie „Löschkandidat“ und manueller Freigabe. Nicht zuletzt wegen Compliance: Blindes Löschen kann gefährlich sein.
Duplikate jagen mit Fuzzy Matching
Doppelte Rechnungen sind Speicherverschwender. Paperless-ngx‘ eingebaute Duplikaterkennung arbeitet mit Hashwerten – erkennt aber nur exakte Kopien. Praktischer sind Tools wie fdupes mit Fuzzy-Matching. Ein Beispielaufruf:
fdupes -r -A -n /pfad/zum/archiv
Parameter -A
ignoriert leere Dateien, -n
sucht nach Dateien gleicher Größe. Kombinieren Sie dies mit OCR-Textvergleichen: Zwei Dokumente mit 95% Textübereinstimmung sind wahrscheinlich Duplikate. Aber Vorsicht: Angebot und Rechnung können ähnlich sein – inhaltliche Prüfung bleibt nötig.
PostgreSQL-Tuning: Wenn die Datenbank zum Flaschenhals wird
Vergessen Sie nicht die Datenbank! Ein ungewarteter Postgres-Index bläht sich auf und bremst das gesamte System. Regelmäßiges VACUUM ANALYZE
ist Pflicht. Bei großen Instanzen lohnt sich pg_repack zur Optimierung ohne Downtime. Prüfen Sie besonders den document_document
-Table. Ein Indikator: Wenn SELECT pg_size_pretty(pg_total_relation_size('document_document'));
mehr als 20% der Dokumentgröße anzeigt, liegt Bloat vor.
Ein interessanter Aspekt: Die Volltextsuche. Standardmäßig erstellt Paperless-ngx einen tsvector-Index. Bei Millionen Dokumenten kann dieser mehrere GB groß werden. Hier hilft Partitionierung nach Jahren – wenn auch mit manuellem Aufwand.
Thumbnails: Kleine Bilder, großer Impact
Thumbnails werden bei jedem Dokument in vier Größen generiert (256px bis 1024px). Bei 500.000 Dokumenten sind das zwei Millionen Dateien – ein Albtraum für jedes Dateisystem. Abhilfe schafft:
- Reduzierung der Thumbnail-Größen in der Konfiguration (wer braucht wirklich 1024px?)
- Umstellung auf modernere Formate wie WebP (30% Platzersparnis gegenüber PNG)
- Löschen alter Thumbnails nach Dokumentänderung mittels
inotifywait
Wer mutig ist, kann Thumbnails sogar in der Datenbank als BYTEA speichern. Das vereinfacht Backups, kostet aber Datenbankressourcen.
Betriebliche Integration: Workflows anpassen
Technik ist das eine – Organisation das andere. Erfolgreiche Speicheroptimierung erfordert angepasste Workflows. Beispiel Scans: Wenn die Buchhaltung unkorrigierte Belegscans einwirft, produziert die OCR Fehler und nachträgliche Korrekturen. Besser: Ein Preprocessing-Skript, das mit unpaper Dokumente entzerrt und mit img2pdf optimiert, bevor Paperless-ngx sie sieht.
Ein oft übersehener Hebel: Die Mailbox. Viele Firmen konsumieren E-Mail-Anhänge direkt. Doch warum 8 MB PowerPoint-Dateien archivieren? Ein Skript, das Anhänge extrahiert, in PDF wandelt und nur diese weitergibt, kann Speicher sparen. Tools wie mutt oder getmail bieten hier Ansatzpunkte.
Monitoring: Nicht blind fliegen
Ohne Metriken kein Optimierungserfolg. Prometheus-Exporter für Paperless-ngx liefern Dokumentenzahlen, aber keine Speicherdetails. Ein einfaches Bash-Skript hilft:
#!/bin/bash
ARCHIVE_DIR="/opt/paperless/media/archive"
ORIGINAL_DIR="/opt/paperless/media/originals"
du -sh $ARCHIVE_DIR | awk '{print "archive_size_kb " $1}'
find $ARCHIVE_DIR -type f -name '*.pdf' | wc -l | awk '{print "archive_files " $1}'
Kombinieren Sie dies mit Grafana. So sehen Sie sofort, wenn nach einem Update die PDF-Kompression versagt oder ein defekter Scanner unkorrigiert 600-DPI-Bilder produziert.
Zukunftsperspektiven: Wohin entwickelt sich das System?
Die Community treibt spannende Entwicklungen voran. Ein PR zur stufenweisen Kompression liegt vor: Dokumente werden zunächst schnell archiviert, nachts erfolgt eine stärkere Rekompression. Auch ZSTD-Kompression wird diskutiert – bis zu 15% besser als aktuelles Flate. Nicht zuletzt arbeitet das Team an direkter S3-Integration, was Speichertrennung enorm vereinfachen würde.
Ein persönlicher Kommentar: Paperless-ngx ist kein „Fire-and-Forget“-System. Wer es ernsthaft als DMS nutzt, muss sich um die Speicheroptimierung kümmern – ähnlich wie bei einer Datenbank. Die gute Nachricht: Mit den richtigen Kniffen lässt sich der Platzbedarf oft halbieren. Und das ohne Kompromisse bei Compliance oder Zugriffsgeschwindigkeit. Am Ende steht nicht nur leere Festplattenkapazität, sondern ein schlankeres, reagibleres System. Das sollte jedem Administrator ein Lächeln entlocken.