<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://techcorner.max-it.de/index.php?action=history&amp;feed=atom&amp;title=Paperless-ngx%3A_Installation_mit_Docker_Compose</id>
	<title>Paperless-ngx: Installation mit Docker Compose - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://techcorner.max-it.de/index.php?action=history&amp;feed=atom&amp;title=Paperless-ngx%3A_Installation_mit_Docker_Compose"/>
	<link rel="alternate" type="text/html" href="https://techcorner.max-it.de/index.php?title=Paperless-ngx:_Installation_mit_Docker_Compose&amp;action=history"/>
	<updated>2026-10-19T03:13:48Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in maxTechCorner</subtitle>
	<generator>MediaWiki 1.43.9</generator>
	<entry>
		<id>https://techcorner.max-it.de/index.php?title=Paperless-ngx:_Installation_mit_Docker_Compose&amp;diff=5074&amp;oldid=prev</id>
		<title>imported&gt;TechCorner-Redaktion: Neuer Artikel: Compose mit PostgreSQL, Valkey, Tika und Gotenberg, Pflichtwerte ab v3, OCR deutsch, Reverse Proxy, Updates</title>
		<link rel="alternate" type="text/html" href="https://techcorner.max-it.de/index.php?title=Paperless-ngx:_Installation_mit_Docker_Compose&amp;diff=5074&amp;oldid=prev"/>
		<updated>2026-10-17T00:00:00Z</updated>

		<summary type="html">&lt;p&gt;Neuer Artikel: Compose mit PostgreSQL, Valkey, Tika und Gotenberg, Pflichtwerte ab v3, OCR deutsch, Reverse Proxy, Updates&lt;/p&gt;
&lt;table style=&quot;background-color: #fff; color: #202122;&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 17. Oktober 2026, 00:00 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;de&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(kein Unterschied)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>imported&gt;TechCorner-Redaktion</name></author>
	</entry>
	<entry>
		<id>https://techcorner.max-it.de/index.php?title=Paperless-ngx:_Installation_mit_Docker_Compose&amp;diff=4904&amp;oldid=prev</id>
		<title>imported&gt;TechCorner-Redaktion: Neuer Artikel: Compose mit PostgreSQL, Valkey, Tika und Gotenberg, Pflichtwerte ab v3, OCR deutsch, Reverse Proxy, Updates</title>
		<link rel="alternate" type="text/html" href="https://techcorner.max-it.de/index.php?title=Paperless-ngx:_Installation_mit_Docker_Compose&amp;diff=4904&amp;oldid=prev"/>
		<updated>2026-10-17T00:00:00Z</updated>

		<summary type="html">&lt;p&gt;Neuer Artikel: Compose mit PostgreSQL, Valkey, Tika und Gotenberg, Pflichtwerte ab v3, OCR deutsch, Reverse Proxy, Updates&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Steckbrief&lt;br /&gt;
| gilt_fuer   = Paperless-ngx 3.3.x als Docker-Container (ghcr.io/paperless-ngx/paperless-ngx) mit PostgreSQL 18, Valkey 9, Apache Tika und Gotenberg auf Linux, z. B. Debian 13 oder Ubuntu 24.04&lt;br /&gt;
| bereich     = Server-Software&lt;br /&gt;
| dauer       = ca. 1 Stunde&lt;br /&gt;
| rechte      = Root bzw. Mitglied der Gruppe docker&lt;br /&gt;
| stand       = Oktober 2026&lt;br /&gt;
}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Paperless-ngx mit Docker Compose installieren&amp;#039;&amp;#039;&amp;#039; ist der empfohlene Weg: Die Anwendung, eine PostgreSQL-Datenbank, Valkey als Nachrichtenvermittler sowie Tika und Gotenberg für Office-Dateien und E-Mails laufen als eigene Container. Diese Anleitung baut auf der offiziellen Compose-Vorlage auf, setzt die seit Version 3 vorgeschriebenen Werte, stellt die Texterkennung auf Deutsch ein und zeigt den ersten Start, den Betrieb hinter einem Reverse Proxy und den Ablauf von Updates.&lt;br /&gt;
&lt;br /&gt;
[[Datei:Paperless-Installation.png|thumb|center|750px|Installation von Paperless-ngx mit Docker Compose: Container webserver (Port 8000) mit Ordnern data, media, consume und export; PostgreSQL 18, Valkey als Broker, Tika und Gotenberg für Office-Dateien und E-Mails; Pflichtwerte PAPERLESS_SECRET_KEY und PAPERLESS_DBENGINE seit Version 3, PAPERLESS_URL, OCR-Sprache deu+eng, Zeitzone Europe/Berlin, USERMAP_UID/GID; Superuser anlegen; Reverse Proxy mit HTTPS und PAPERLESS_TRUSTED_PROXIES; Updates mit festem Versions-Tag.]]&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
* Linux-Server oder VM mit &amp;#039;&amp;#039;&amp;#039;Docker Engine&amp;#039;&amp;#039;&amp;#039; und Compose-Plugin, siehe [[Docker]].&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ressourcen&amp;#039;&amp;#039;&amp;#039;: 2–4 vCPU und 4–8 GB RAM für ein kleines Büro; OCR großer Scans ist rechenintensiv. Die CPU muss SSE4.2 unterstützen (praktisch jede CPU seit 2011), sonst stürzt der Klassifikator ab: &amp;lt;code&amp;gt;grep -o -m1 sse4_2 /proc/cpuinfo&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Speicher&amp;#039;&amp;#039;&amp;#039;: Originale plus PDF/A-Archivversion – grob das Doppelte der Scan-Menge, zuzüglich Backup.&lt;br /&gt;
* Ein &amp;#039;&amp;#039;&amp;#039;DNS-Name&amp;#039;&amp;#039;&amp;#039; wie &amp;lt;code&amp;gt;dms.firma.de&amp;lt;/code&amp;gt; und ein Reverse Proxy mit Zertifikat, siehe [[Reverse Proxy]]. Paperless-ngx sollte nur im LAN bzw. per VPN erreichbar sein.&lt;br /&gt;
&lt;br /&gt;
== Schritt 1: Verzeichnisse und Geheimnisse ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
sudo mkdir -p /opt/paperless/{consume,export} &amp;amp;&amp;amp; cd /opt/paperless&lt;br /&gt;
cat &amp;gt; .env &amp;lt;&amp;lt;EOF&lt;br /&gt;
PG_PASSWORD=$(openssl rand -hex 24)&lt;br /&gt;
PAPERLESS_SECRET_KEY=$(python3 -c &amp;quot;import secrets; print(secrets.token_urlsafe(64))&amp;quot;)&lt;br /&gt;
EOF&lt;br /&gt;
chmod 600 .env&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Seit Version 3 ist &amp;#039;&amp;#039;&amp;#039;&amp;lt;code&amp;gt;PAPERLESS_SECRET_KEY&amp;lt;/code&amp;gt; Pflicht&amp;#039;&amp;#039;&amp;#039;. Er signiert Sitzungen und Token und gehört ins Backup.&lt;br /&gt;
&lt;br /&gt;
== Schritt 2: Paperless-ngx mit Docker Compose konfigurieren ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;yaml&amp;quot;&amp;gt;&lt;br /&gt;
services:&lt;br /&gt;
  broker:&lt;br /&gt;
    image: docker.io/valkey/valkey:9-alpine&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./redisdata:/data&lt;br /&gt;
&lt;br /&gt;
  db:&lt;br /&gt;
    image: docker.io/library/postgres:18&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./pgdata:/var/lib/postgresql&lt;br /&gt;
    environment:&lt;br /&gt;
      POSTGRES_DB: paperless&lt;br /&gt;
      POSTGRES_USER: paperless&lt;br /&gt;
      POSTGRES_PASSWORD: ${PG_PASSWORD}&lt;br /&gt;
&lt;br /&gt;
  webserver:&lt;br /&gt;
    image: ghcr.io/paperless-ngx/paperless-ngx:3.3.2&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    depends_on: [db, broker, gotenberg, tika]&lt;br /&gt;
    ports:&lt;br /&gt;
      - &amp;quot;127.0.0.1:8000:8000&amp;quot;&lt;br /&gt;
    volumes:&lt;br /&gt;
      - ./data:/usr/src/paperless/data&lt;br /&gt;
      - ./media:/usr/src/paperless/media&lt;br /&gt;
      - ./export:/usr/src/paperless/export&lt;br /&gt;
      - ./consume:/usr/src/paperless/consume&lt;br /&gt;
    environment:&lt;br /&gt;
      PAPERLESS_REDIS: redis://broker:6379&lt;br /&gt;
      PAPERLESS_DBENGINE: postgresql&lt;br /&gt;
      PAPERLESS_DBHOST: db&lt;br /&gt;
      PAPERLESS_DBPASS: ${PG_PASSWORD}&lt;br /&gt;
      PAPERLESS_SECRET_KEY: ${PAPERLESS_SECRET_KEY}&lt;br /&gt;
      PAPERLESS_URL: https://dms.firma.de&lt;br /&gt;
      PAPERLESS_TRUSTED_PROXIES: 172.18.0.1&lt;br /&gt;
      PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT: 1&lt;br /&gt;
      PAPERLESS_TIME_ZONE: Europe/Berlin&lt;br /&gt;
      PAPERLESS_OCR_LANGUAGE: deu+eng&lt;br /&gt;
      PAPERLESS_TIKA_ENABLED: 1&lt;br /&gt;
      PAPERLESS_TIKA_ENDPOINT: http://tika:9998&lt;br /&gt;
      PAPERLESS_TIKA_GOTENBERG_ENDPOINT: http://gotenberg:3000&lt;br /&gt;
      USERMAP_UID: 1000&lt;br /&gt;
      USERMAP_GID: 1000&lt;br /&gt;
&lt;br /&gt;
  gotenberg:&lt;br /&gt;
    image: docker.io/gotenberg/gotenberg:8.37&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
    command:&lt;br /&gt;
      - &amp;quot;gotenberg&amp;quot;&lt;br /&gt;
      - &amp;quot;--chromium-disable-javascript=true&amp;quot;&lt;br /&gt;
      - &amp;quot;--chromium-allow-list=^file:///tmp/.*&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  tika:&lt;br /&gt;
    image: docker.io/apache/tika:3.3.1.0&lt;br /&gt;
    restart: unless-stopped&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PAPERLESS_DBENGINE&amp;#039;&amp;#039;&amp;#039; ist seit Version 3 für PostgreSQL und MariaDB Pflicht.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PAPERLESS_URL&amp;#039;&amp;#039;&amp;#039; setzt zugleich erlaubte Hostnamen und vertrauenswürdige Ursprünge (CSRF). Ohne den richtigen Wert schlagen Anmeldung und Speichern hinter dem Proxy fehl.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OCR-Sprache&amp;#039;&amp;#039;&amp;#039;: &amp;lt;code&amp;gt;deu+eng&amp;lt;/code&amp;gt; erkennt deutsche und englische Texte. Deutsch, Englisch, Französisch, Italienisch und Spanisch sind im Image enthalten, weitere über &amp;lt;code&amp;gt;PAPERLESS_OCR_LANGUAGES&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;USERMAP_UID/GID&amp;#039;&amp;#039;&amp;#039;: auf den Benutzer setzen, dem der Eingangsordner auf dem Host gehört – sonst fehlen Schreibrechte.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Tika und Gotenberg&amp;#039;&amp;#039;&amp;#039; wandeln Word-, Excel- und E-Mail-Dateien in PDF um. Die Gotenberg-Parameter verhindern, dass beim Umwandeln von E-Mails JavaScript oder externe Inhalte (Tracking-Pixel) geladen werden.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Feste Versionen&amp;#039;&amp;#039;&amp;#039; statt &amp;lt;code&amp;gt;latest&amp;lt;/code&amp;gt;, damit Updates bewusst erfolgen.&lt;br /&gt;
&lt;br /&gt;
== Schritt 3: Starten und Superuser anlegen ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
docker compose up -d&lt;br /&gt;
docker compose logs -f webserver        # warten, bis Migrationen durch sind&lt;br /&gt;
docker compose exec webserver createsuperuser&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;https://dms.firma.de&amp;lt;/code&amp;gt; aufrufen und mit dem Superuser anmelden.&lt;br /&gt;
# Unter &amp;#039;&amp;#039;Mein Profil&amp;#039;&amp;#039; die Zwei-Faktor-Anmeldung einrichten.&lt;br /&gt;
# Für die tägliche Arbeit ein &amp;#039;&amp;#039;&amp;#039;normales Benutzerkonto&amp;#039;&amp;#039;&amp;#039; anlegen; der Superuser sieht alle Dokumente und ist nur für die Verwaltung gedacht, siehe [[Paperless-ngx: Benutzer, Berechtigungen und Absicherung]].&lt;br /&gt;
# Unter &amp;#039;&amp;#039;Einstellungen&amp;#039;&amp;#039; Sprache Deutsch, Datumsformat und Startseite wählen.&lt;br /&gt;
# Ein Testdokument hochladen und unter &amp;#039;&amp;#039;Aufgaben&amp;#039;&amp;#039; bzw. &amp;#039;&amp;#039;Systemstatus&amp;#039;&amp;#039; prüfen, ob OCR, Tika und Gotenberg arbeiten.&lt;br /&gt;
&lt;br /&gt;
== Reverse Proxy ==&lt;br /&gt;
* Der Proxy leitet &amp;lt;code&amp;gt;https://dms.firma.de&amp;lt;/code&amp;gt; auf &amp;lt;code&amp;gt;http://127.0.0.1:8000&amp;lt;/code&amp;gt; weiter, inklusive WebSocket-Verbindungen für die Statusanzeigen (&amp;lt;code&amp;gt;/ws/&amp;lt;/code&amp;gt;).&lt;br /&gt;
* Die &amp;#039;&amp;#039;&amp;#039;maximale Upload-Größe&amp;#039;&amp;#039;&amp;#039; im Proxy anheben (z. B. nginx &amp;lt;code&amp;gt;client_max_body_size 200M;&amp;lt;/code&amp;gt;), sonst scheitern große Scans.&lt;br /&gt;
* Seit Version 3 bestimmt die Anmeldebibliothek die Client-IP für die Ratenbegrenzung anders. Hinter einem Proxy &amp;lt;code&amp;gt;PAPERLESS_TRUSTED_PROXIES&amp;lt;/code&amp;gt; auf die IP-Adresse setzen, mit der der Proxy bei Paperless ankommt – läuft er auf demselben Host, ist das die Gateway-Adresse des Docker-Netzes (&amp;lt;code&amp;gt;docker network inspect&amp;lt;/code&amp;gt;). &amp;lt;code&amp;gt;PAPERLESS_ALLAUTH_TRUSTED_PROXY_COUNT&amp;lt;/code&amp;gt; ist die Zahl der Proxy-Stationen, meist 1; ohne diesen Wert setzt Paperless die Anzahl der eingetragenen Adressen ein. Falsche Werte führen zu &amp;#039;&amp;#039;&amp;#039;403 Forbidden&amp;#039;&amp;#039;&amp;#039; beim Login.&lt;br /&gt;
* Beispiele: [[OPNsense - Caddy Reverse Proxy]], [[Nginx]].&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
cd /opt/paperless&lt;br /&gt;
docker compose exec -T webserver document_exporter ../export   # Backup, siehe Backup-Artikel&lt;br /&gt;
# Tag in compose.yaml anheben, dann:&lt;br /&gt;
docker compose pull &amp;amp;&amp;amp; docker compose up -d &amp;amp;&amp;amp; docker compose logs --tail 100 webserver&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
* Datenbankmigrationen laufen beim Start automatisch.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Umstieg von Version 2 auf 3&amp;#039;&amp;#039;&amp;#039; nur von &amp;#039;&amp;#039;&amp;#039;2.20.15&amp;#039;&amp;#039;&amp;#039; aus. Vorher den Migrationsleitfaden lesen: neue Pflichtwerte, geänderte OCR- und Eingangsordner-Einstellungen, neu aufgebauter Suchindex. Details in [[Paperless-ngx: Backup, Updates und GoBD im Unternehmen]].&lt;br /&gt;
* Bei Hauptversionen von PostgreSQL ist ein Dump und Neuimport nötig; das Daten-Volume der Datenbank wird nicht automatisch migriert.&lt;br /&gt;
&lt;br /&gt;
== Hinweise ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SQLite&amp;#039;&amp;#039;&amp;#039; funktioniert für Tests und Einzelplätze, für mehrere Benutzer PostgreSQL wählen.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ohne Tika&amp;#039;&amp;#039;&amp;#039; werden nur PDF, Bilder und Textdateien verarbeitet. Für Word-Dokumente und E-Mail-Dateien ist es nötig.&lt;br /&gt;
* Bei Aufbau und Betrieb von Linux-Servern und Containern unterstützt Sie das [https://www.max-it.de/it-services/linux-consulting/ Linux-Consulting von m.a.x. it].&lt;br /&gt;
&lt;br /&gt;
== Siehe auch ==&lt;br /&gt;
* [[Paperless-ngx]] – Überblick und alle Artikel der Reihe&lt;br /&gt;
* [[Paperless-ngx: Dokumente erfassen – Scanner, E-Mail und Barcodes]]&lt;br /&gt;
* [[PostgreSQL]]&lt;br /&gt;
* [[Redis]]&lt;br /&gt;
&lt;br /&gt;
== Links und Quellen ==&lt;br /&gt;
* [https://docs.paperless-ngx.com/setup/ Paperless-ngx Dokumentation: Setup]&lt;br /&gt;
* [https://www.max-it.de/it-services/linux-consulting/ Linux-Consulting von m.a.x. it]&lt;br /&gt;
&lt;br /&gt;
{{Uebermax}}&lt;br /&gt;
[[Kategorie:Server-Software]]&lt;br /&gt;
&lt;/div&gt;</summary>
		<author><name>imported&gt;TechCorner-Redaktion</name></author>
	</entry>
</feed>