[[Uebersicht|← Zurück zur Homepage]] # PaperSafe – Arbeitsvorgabe für Claude Code > **Adressat dieser Notiz ist Claude Code mit direktem Zugriff auf den Proxmox-Host.** Sie ist eine Arbeitsanweisung, keine Beschreibung. Konzeptioneller Hintergrund: [[01-Konzept-Architektur]]. --- ## 0. Verbindliche Rahmenbedingungen | Punkt | Vorgabe | |---|---| | Host | Proxmox VE, 192.168.2.146 | | Zielsystem | Unprivilegierter LXC, Debian 12, darin Docker Compose | | Anwendung | Paperless-ngx, offizieller Docker-Compose-Stack (PostgreSQL + Redis) | | Nutzung | **Rein privat** – keine GoBD-Anforderungen | | Backup-Ziel | Synology NAS `dsobe2023` – **bereits als Proxmox-Backup-Ziel eingebunden und aktiv** | | Sprache OCR | `deu+eng` | | Zeitzone | `Europe/Berlin` | ## 1. Grundregeln (nicht verhandelbar) 1. **Keine Änderung an bestehenden Containern oder VMs.** Insbesondere Home Assistant (**VM 109**) und der Zigbee2MQTT-LXC sind tabu. Bei Unsicherheit über eine ID: nachfragen, nicht raten. 2. **Freie CTID selbst ermitteln** (`pct list` / `qm list`) und vor Verwendung bestätigen lassen. Keine ID überschreiben. 3. **Vor jedem Phasenübergang halten und Ergebnis berichten.** Die Phasen unten sind Gates, keine Wegmarken. 4. **Keine Befehle aus dem Gedächtnis.** Compose-Dateien, Image-Tags und Installationspfade sind gegen die aktuelle Doku unter `docs.paperless-ngx.com` bzw. das GitHub-Release zu verifizieren. Wenn die Doku etwas anderes sagt als diese Notiz: **die Doku gewinnt**, Abweichung melden und hier eintragen. 5. **Keine `latest`-Tags.** Immer eine explizite Version pinnen, damit Rollback und Nachvollziehbarkeit möglich sind. 6. **Keine Fremdskripte mit Root-Rechten** auf dem Host ausführen (auch keine Community-Helper-Scripts) – die Variante wurde bewusst verworfen. 7. **Secrets nicht in diese Notiz schreiben.** Passwörter und `PAPERLESS_SECRET_KEY` werden generiert und mir separat mitgeteilt, nicht ins Vault. 8. **Bei Fehlern: stoppen und berichten.** Keine kreativen Workarounds, keine stillen Abweichungen vom Plan. 9. **Destruktive Operationen** (`pct destroy`, `rm -rf`, Storage-Änderungen, Netzwerkanpassungen am Host) nur nach ausdrücklicher Freigabe im Einzelfall. 10. **Diese Notiz (05) ist schreibgeschützt.** Sie ist die Soll-Vorgabe und bleibt unverändert, damit Abweichungen erkennbar bleiben. Protokolliert wird in [[06-Umsetzungsprotokoll]]. Wenn eine Vorgabe hier fachlich falsch ist: melden, nicht korrigieren – die Änderung nehme ich vor. ## 2. Vorbereitung – vor Phase 1 zu klären Diese Werte sind nicht festgelegt. Claude Code ermittelt Vorschläge und legt sie mir zur Bestätigung vor: - [ ] Freie CTID - [ ] Freie IP im LAN + Gateway - [ ] Proxmox-Storage für Container-Disk (Name und freier Platz) - [ ] Verfügbare CPU-/RAM-Reserven auf dem Host - [ ] Freier Platz auf `dsobe2023` – das Archiv wächst dauerhaft Die Storage-Einbindung des NAS ist **bereits vorhanden** und darf nicht neu angelegt oder verändert werden. Typ und Pfad sind aus der bestehenden Proxmox-Konfiguration auszulesen, nicht zu erraten. --- ## Phase 1 – Bestandsaufnahme **Nur lesend. Keine Änderungen.** Zu ermitteln und zu berichten: - Proxmox-Version, freier Speicher je Storage - Belegte CT-/VM-IDs mit Namen - CPU-Kerne und RAM gesamt/belegt - Vorhandene Backup-Jobs: Ziel, Zeitplan, Aufbewahrungsregel und **ob sie „alle Container" erfassen oder eine explizite ID-Liste verwenden** - Einbindung von `dsobe2023`: Storage-Name, Typ (SMB/NFS), Pfad, freier Platz **Gate:** Bericht abwarten, Freigabe einholen. ## Phase 2 – Container anlegen **Nach Phase 1 bestätigte Werte (18.07.2026, verbindlich):** | Parameter | Wert | |---|---| | CTID | **110** | | Hostname | `papersafe` | | Template | Debian 12 (aktuellstes verfügbares) | | Typ | unprivilegiert | | CPU | 2 Kerne | | **cpuunits** | **50** (Standard ist 100) – Home Assistant soll im Konfliktfall Vorrang haben, OCR-Spitzen dürfen das Smart Home nicht ausbremsen. Aktuellen Parameternamen gegen die Proxmox-9-Doku prüfen | | RAM | 4096 MB | | Swap | 512 MB | | Root-Disk | 20 GB auf **`local-lvm`** (nicht `nvme-thin` – bewusste Entscheidung: Entkopplung der I/O von Home Assistant, das auf `nvme-thin` liegt) | | Netzwerk | Bridge `vmbr0`, **`ip=dhcp`** – konsistent mit allen bestehenden Gästen. Die feste Adresse wird als **DHCP-Reservierung im Router** vergeben, nicht im Container eingetragen | | Features | `nesting=1,keyctl=1` | | Onboot | aktiv | | Unattended Upgrades | für Sicherheitsupdates aktivieren | **Ablauf für die IP – Reihenfolge beachten:** 1. Container mit `ip=dhcp` anlegen 2. **MAC-Adresse auslesen und berichten** (`pct config 110`) 3. **Stopp.** Ich lege die Reservierung im Router an und gebe die feste IP bekannt 4. Erst danach Container starten und mit Phase 2 fortfahren Grund: Die MAC steht erst nach dem Anlegen fest, die Reservierung braucht sie. Ohne diesen Zwischenschritt bekommt der Container eine beliebige Adresse und `PAPERLESS_URL` müsste später nachgezogen werden. **Erledigt am 18.07.2026:** | Wert | Ergebnis | |---|---| | MAC net0 | `BC:24:11:E0:81:A8` | | **Reservierte IP** | **192.168.2.35** (Reservierung im Router angelegt) | | IPv6 | **deaktiviert.** Korrektur: Das zunächst hier vorgegebene `ip6=none` ist in Proxmox 9 **kein gültiger Wert** (gültig: `IPv6/CIDR|auto|dhcp|manual`) – Fehler in dieser Vorgabe. Umgesetzt wurde `ip6=manual`; da dies allein SLAAC im Gast nicht verhindert, zusätzlich per `/etc/sysctl.d/99-disable-ipv6.conf` im Container abgeschaltet | Anschließend Grundsystem: System aktualisieren, Locale `de_DE.UTF-8`, Zeitzone `Europe/Berlin`, Docker Engine + Compose-Plugin aus dem offiziellen Docker-Repository (nicht aus den Debian-Paketquellen). **Prüfung vor dem Gate:** `docker run --rm hello-world` läuft durch. Läuft es nicht, sind fast immer die LXC-Features die Ursache – dann Container-Konfiguration prüfen, **nicht** auf einen privilegierten Container ausweichen. **Gate:** Ergebnis berichten, Freigabe einholen. ## Phase 3 – Paperless-ngx installieren **Vorab: separates Daten-Volume anlegen** (Entscheidung 18.07.2026, in Phase 2 versäumt): | Parameter | Wert | |---|---| | Mount Point | `mp0` | | Storage | `local-lvm` | | Größe | **200 GB** (thin provisioned – belegt anfangs nur den tatsächlichen Verbrauch) | | Pfad im Container | `/opt/paperless/data` | | Backup | eingeschlossen (`backup=1`) | Grund: Dokumente und Datenbank sollen unabhängig vom 20-GB-System wachsen können. Ein späterer Umzug wäre deutlich aufwendiger als der Mount Point jetzt – **vor** dem ersten Dokument. - Compose-Stack unter `/opt/paperless/` ablegen - Variante mit **PostgreSQL + Redis**; Gotenberg und Tika mit aufnehmen (Office-Dokumente sind privat durchaus zu erwarten) - Datenverzeichnisse als **Bind-Mounts unterhalb `/opt/paperless/data/`** (nicht als benannte Docker-Volumes). Grund: alles liegt sichtbar an einer Stelle auf dem Daten-Volume, `document_exporter` und Fehlersuche werden einfacher, und die Backup-Abgrenzung ist eindeutig - Image-Version pinnen Zu setzende Variablen: | Variable | Wert | |---|---| | `PAPERLESS_OCR_LANGUAGE` | `deu+eng` | | `PAPERLESS_TIME_ZONE` | `Europe/Berlin` | | `PAPERLESS_SECRET_KEY` | generierter Zufallswert | | `PAPERLESS_URL` | `http://192.168.2.35:8000` (finale IP steht fest) | | `PAPERLESS_ADMIN_USER` / `_PASSWORD` | generiert, separat mitteilen | | `PAPERLESS_FILENAME_FORMAT` | `{{ created_year }}/{{ correspondent }}/{{ title }}` (entschieden 18.07.2026 – auch ohne Paperless navigierbar). **Korrektur:** Hier stand zunächst die veraltete Syntax mit einfachen Klammern; Paperless nutzt Jinja2-Templates mit doppelten Klammern. Platzhalternamen sind unverändert | | `USERMAP_UID` / `USERMAP_GID` | passend zu den Mount-Rechten | **Gate:** Stack läuft, Weboberfläche erreichbar, Login funktioniert. Berichten. ## Phase 4 – Funktionsprüfung - Testdokument in den Consume-Ordner legen. **Wichtig: ein bildbasiertes PDF ohne Textebene** (echter Scan oder aus einem Bild erzeugt) – ein digital erzeugtes PDF enthält bereits Text und prüft die OCR gar nicht - Verarbeitung, OCR-Qualität und Volltextsuche prüfen - Ein Office-Dokument testen (Gotenberg/Tika-Pfad) - **Ablagestruktur verifizieren:** Landen die Dateien tatsächlich als `Jahr/Korrespondent/Titel` auf dem Volume? - **Lastverhalten beobachten:** Während der OCR die Reaktionszeit von Home Assistant prüfen – hier zeigt sich, ob `cpuunits 50` wirkt - Verarbeitungsdauer und aufgetretene Warnungen berichten - Testdokumente anschließend wieder entfernen **Gate:** Ergebnis berichten. ## Nachträgliche Härtung (nach erfolgreicher Phase 4) `PAPERLESS_ADMIN_PASSWORD` steht im Klartext in `docker-compose.env` und wird nur beim **ersten** Start gebraucht – der Superuser existiert bereits. Die Variable (samt `PAPERLESS_ADMIN_USER`/`_MAIL`) ist danach zu entfernen, damit das Passwort nicht dauerhaft im Klartext liegt und in jedes Backup auf dem NAS wandert. Passwortänderungen laufen anschließend über die Weboberfläche oder `manage.py changepassword`. ## Phase 5 – Backup einrichten **Der NAS-Storage ist bereits eingebunden. Er wird nicht neu angelegt und nicht umkonfiguriert.** 1. Bestehenden Backup-Job prüfen: Erfasst er den neuen Container automatisch? Falls er eine explizite ID-Liste verwendet, den Container ergänzen – **die übrigen Einträge dabei nicht anfassen** 2. Aufbewahrungsregel des bestehenden Jobs berichten. Falls sie für ein Dokumentenarchiv zu knapp erscheint: **melden, nicht ändern** – der Job sichert auch andere Systeme 3. Logischen Export einrichten: `document_exporter` als geplanter Job, Ziel in eine **eigene Freigabe** auf dem NAS, getrennt von den Proxmox-Backups (Begründung siehe [[04-Betrieb-Backup]]) 4. Freien Platz auf dem NAS berichten und abschätzen, wie lange er bei wachsendem Archiv reicht **Nicht Aufgabe von Claude Code:** Konfiguration am Synology-NAS selbst (Snapshot Replication, Hyper Backup, Freigaben, Benutzer). Das mache ich in DSM. Claude Code darf den Bedarf melden, greift aber nicht auf das NAS zu. **Gate:** Beide Backup-Wege einmal manuell auslösen und Erfolg nachweisen. ## Phase 6 – Restore-Test **Dieser Schritt ist Pflicht, bevor produktiv Dokumente eingespielt werden.** 1. Backup auf eine **neue, freie CTID** zurückspielen – niemals über den Produktivcontainer 2. Testinstanz mit abweichender IP starten 3. Login, Dokumentenzugriff und Volltextsuche prüfen 4. Ergebnis berichten 5. Testinstanz erst nach meiner Freigabe entfernen ## Laufende Pflicht – Protokollierung nach jeder Phase **Nicht erst am Ende.** Nach jeder abgeschlossenen Phase ist [[06-Umsetzungsprotokoll]] fortzuschreiben: - Statusübersicht aktualisieren - Protokolleintrag mit Datum, Uhrzeit, ausgeführten Schritten - Aufgetretene Fehler und deren Lösung – auch die Sackgassen - Abweichungen von dieser Vorgabe mit Begründung - Ermittelte Eckdaten in die Tabelle eintragen Ein Protokoll, das erst nach Phase 6 aus der Erinnerung geschrieben wird, ist wertlos. ## Phase 7 – Dokumentation zurückschreiben Zum Abschluss sind die Dauerdokumente zu aktualisieren – **mit Versionserhöhung und Änderungshistorie-Eintrag** (Datum + Uhrzeit, Konvention siehe bestehende Notizen): | Notiz | Was eintragen | |---|---| | [[02-Installation]] | Tatsächlich ausgeführte Befehle, CTID, IP, Image-Version, Abweichungen von dieser Vorgabe | | [[03-Konfiguration]] | Gesetzte Variablen (ohne Secrets), angelegte Benutzer | | [[04-Betrieb-Backup]] | Backup-Zeitpläne, Pfade auf dem NAS, Ergebnis des Restore-Tests in der Tabelle | | [[00-Start]] | Status auf „In Betrieb", erledigte Punkte abhaken | | [[06-Umsetzungsprotokoll]] | Abschlusseintrag, offene Punkte aus der Umsetzung sammeln | **Abweichungen dokumentieren, nicht glattbügeln.** Wenn etwas anders gemacht wurde als hier vorgegeben, ist der Grund festzuhalten – das ist beim nächsten Update die wichtigste Information. --- ## Was ausdrücklich **nicht** Auftrag ist - Kein externer Zugriff, kein Reverse Proxy, keine Portfreigabe im Router (Entscheidung steht aus) - Keine E-Mail-Anbindung - Keine Scanner-Einrichtung (Gerät noch nicht geklärt) - Kein Massenimport bestehender Dokumente – erst nach erfolgreichem Restore-Test und nach Festlegung des Tag-Schemas - Keine Änderungen an der Proxmox-Host-Konfiguration - **Keine Änderungen an bestehenden Backup-Jobs außer dem Hinzufügen der neuen CTID** - **Kein Zugriff auf das Synology-NAS selbst** – DSM-Konfiguration mache ich manuell --- ## Anhang A – Fertiger Prompt für Phase 1 Claude Code hat Zugriff auf dieses Vault und kann die Notizen selbst lesen und schreiben. **Wichtig bei der Übergabe:** Diese Notiz ist der *Rahmen*, nicht der *Auftrag*. Der Auftrag ist immer genau eine Phase. Einleitung dazu: > Lies `40 Projekte/PaperSafe/05-Vorgabe-ClaudeCode.md` vollständig – sie ist der > verbindliche Rahmen für dieses Projekt, insbesondere die Grundregeln in Abschnitt 1. > Die Notiz selbst ist schreibgeschützt. > **Dein Auftrag ist ausschließlich Phase 1.** Danach stoppst du. > Protokolliert wird in `40 Projekte/PaperSafe/06-Umsetzungsprotokoll.md`. Anschließend der eigentliche Arbeitsauftrag: ````markdown Du arbeitest auf einem Proxmox-VE-Host (192.168.2.146). Es geht um die Vorbereitung einer neuen Paperless-ngx-Installation ("PaperSafe"). ## Dein Auftrag: NUR Bestandsaufnahme. Ausschliesslich lesende Befehle. Du aenderst in diesem Durchgang NICHTS. Keine Container anlegen, keine Konfiguration schreiben, keine Pakete installieren, keine Dienste starten oder stoppen. Wenn du glaubst, etwas aendern zu muessen: stoppen und fragen. Auf dem Host laufen produktive Systeme, unter anderem eine Home-Assistant-VM (ID 109) und ein Zigbee2MQTT-LXC. Diese sind tabu. ## Zu ermitteln und zu berichten 1. Proxmox-Version (pveversion -v, gekuerzt auf das Wesentliche) 2. Alle CTs und VMs mit ID, Name, Status (pct list, qm list) 3. Naechste freie CTID sowie 2 Alternativvorschlaege 4. Storages: Name, Typ, Groesse, belegt, frei (pvesm status) - Dabei besonders: welcher Storage eignet sich fuer eine 20-GB-Container-Disk - Und: wie ist das Synology-NAS "dsobe2023" eingebunden (Name, Typ SMB/NFS, Pfad, freier Platz)? Dieses ist bereits aktives Backup-Ziel und darf NICHT veraendert werden. 5. CPU-Kerne und RAM: gesamt, aktuell belegt, freie Reserve (Ziel: ein Container mit 2 Kernen / 4 GB RAM soll dazu passen) 6. Bestehende Backup-Jobs: Ziel, Zeitplan, Aufbewahrungsregel und ob sie "alle" Gaeste erfassen oder eine explizite ID-Liste verwenden (cat /etc/pve/jobs.cfg bzw. /etc/vzdump.conf) 7. Netzwerk: vorhandene Bridges, welches Subnetz die bestehenden Container nutzen, Gateway. Vorschlag fuer eine freie statische IP - inklusive Angabe, wie du geprueft hast, dass sie frei ist. ## Ausgabeformat Kurzer Bericht in Tabellenform, auf Deutsch. Am Ende: - Eine Empfehlung fuer CTID, Storage und IP - Eine Liste von allem, was dagegen spricht oder was dir unklar ist - Explizit: reichen die freien Ressourcen fuer 2 Kerne / 4 GB / 20 GB Disk? ## Protokollierung Trage das Ergebnis in "40 Projekte/PaperSafe/06-Umsetzungsprotokoll.md" ein: - Statusuebersicht Phase 1 auf "abgeschlossen" mit Datum - Protokolleintrag unter "Phase 1" mit Datum, Uhrzeit und den ausgefuehrten Befehlen - Tabelle "Ermittelte Eckdaten" mit deinen Empfehlungen fuellen, offene Werte als "Vorschlag, noch nicht bestaetigt" kennzeichnen - Version der Notiz erhoehen und Aenderungshistorie-Eintrag ergaenzen Die Notiz 05 nicht veraendern. ## Danach Stoppe und warte auf meine Freigabe. Schlage keine naechsten Schritte vor, fuehre sie erst recht nicht aus. ```` --- ## Anhang B – Prompt für Phase 2 Erst nach der DHCP-Reservierung wird der zweite Teil beauftragt. Der Prompt endet deshalb bewusst mitten in Phase 2. ````markdown Phase 1 ist abgeschlossen und freigegeben. Lies vor dem Start: - 40 Projekte/PaperSafe/05-Vorgabe-ClaudeCode.md (verbindlicher Rahmen, schreibgeschuetzt) - 40 Projekte/PaperSafe/06-Umsetzungsprotokoll.md (dein bisheriges Protokoll) ## Auftrag: Phase 2, erster Teil - Container anlegen Bestaetigte Werte stehen in 05 unter "Phase 2". Kurzfassung: CTID 110, Hostname papersafe, Debian 12, unprivilegiert, 2 Kerne, cpuunits 50, 4096 MB RAM, 512 MB Swap, 20 GB auf local-lvm, Bridge vmbr0 mit ip=dhcp, features nesting=1,keyctl=1, onboot 1. Abweichend von der urspruenglichen Planung: local-lvm statt nvme-thin (Entkopplung von Home Assistant) und DHCP statt fester IP (Reservierung erfolgt im Router). Beides ist bewusst so entschieden. Home Assistant ist VM 109. Bestehende Gaeste, Storages und Backup-Jobs bleiben unveraendert. ## Vorgehen 1. Container mit den obigen Werten anlegen. NOCH NICHT STARTEN. 2. Konfiguration ausgeben (pct config 110) und pruefen, ob alle Werte so gesetzt sind wie vorgegeben - insbesondere features und cpuunits. Falls ein Parametername in Proxmox 9 anders heisst als hier angegeben: melden, nicht raten. 3. MAC-Adresse des Netzwerkinterface auslesen und im Bericht nennen. 4. Protokolleintrag in 06 ergaenzen: Datum, Uhrzeit, ausgefuehrte Befehle im Wortlaut, aufgetretene Probleme. Version erhoehen, Aenderungshistorie-Eintrag, Statusuebersicht auf "in Arbeit". Eckdaten-Tabelle mit CTID, Storage und MAC fuellen. ## Danach Stoppe. Ich lege mit der MAC eine DHCP-Reservierung im Router an und melde dir die feste IP. Erst dann geht es weiter (Container starten, Grundsystem, Docker). Starte den Container nicht von dir aus. ```` --- ## Anhang C – Prompt für Phase 2b ````markdown Container 110 ist angelegt und gestoppt. Die DHCP-Reservierung im Router ist eingerichtet: MAC BC:24:11:E0:81:A8 -> 192.168.2.35. Lies vor dem Start: - 40 Projekte/PaperSafe/05-Vorgabe-ClaudeCode.md (verbindlicher Rahmen, schreibgeschuetzt) - 40 Projekte/PaperSafe/06-Umsetzungsprotokoll.md (dein bisheriges Protokoll) ## Auftrag: Phase 2b - Grundsystem vorbereiten ### 1. IPv6 entfernen Beim Anlegen wurde ip6=auto gesetzt, das war nicht vorgegeben. Vor dem Start auf ip6=none aendern. Fuer ein LAN-internes Archiv nicht noetig. ### 2. Container starten und Netzwerk pruefen - Container starten - Pruefen, ob er tatsaechlich 192.168.2.35 bekommen hat - Falls eine andere Adresse: STOPPEN und melden, nicht selbst korrigieren - Pruefen, dass die Adresse nicht doppelt vergeben ist (arping oder ping von aussen vor dem Start waere ideal - beschreibe, wie du es geprueft hast) ### 3. Grundsystem - System aktualisieren (apt update && apt full-upgrade) - Locale de_DE.UTF-8 erzeugen und setzen - Zeitzone Europe/Berlin - unattended-upgrades fuer Sicherheitsupdates installieren und aktivieren - Sinnvolle Basiswerkzeuge (curl, ca-certificates, gnupg) - nicht mehr ### 4. Docker installieren - Aus dem OFFIZIELLEN Docker-APT-Repository (docs.docker.com), nicht aus den Debian-Paketquellen - KEIN get.docker.com Convenience-Skript - Grundregel 6 verbietet Fremdskripte mit Root-Rechten - docker-ce, docker-ce-cli, containerd.io, docker-buildx-plugin, docker-compose-plugin - Installierte Versionen berichten ### 5. Funktionspruefung - docker run --rm hello-world muss durchlaufen - Laeuft es nicht, sind fast immer die LXC-Features nesting/keyctl die Ursache. Container-Konfiguration pruefen und melden. NICHT auf einen privilegierten Container ausweichen. ### 6. Protokoll 06-Umsetzungsprotokoll.md fortschreiben: Datum, Uhrzeit, ausgefuehrte Befehle im Wortlaut, Docker-Versionen, aufgetretene Probleme und Sackgassen. Version erhoehen, Aenderungshistorie, Statusuebersicht Phase 2 auf "abgeschlossen". Eckdaten-Tabelle: IP eintragen. ## Danach Stoppe und warte auf Freigabe. Phase 3 (Paperless-ngx) ist noch nicht beauftragt. Installiere nichts darueber hinaus. ```` --- ## Anhang D – Prompt für Phase 3 ````markdown Phase 2 ist abgeschlossen und freigegeben. Container 110 laeuft unter 192.168.2.35, Docker ist installiert und geprueft. Lies vor dem Start: - 40 Projekte/PaperSafe/05-Vorgabe-ClaudeCode.md (verbindlicher Rahmen, schreibgeschuetzt) - 40 Projekte/PaperSafe/06-Umsetzungsprotokoll.md (dein bisheriges Protokoll) ## Auftrag: Phase 3 - Paperless-ngx installieren ### 1. Daten-Volume anlegen (zuerst!) Container stoppen, Mount Point ergaenzen, wieder starten: - mp0, Storage local-lvm, 200 GB, Pfad im Container /opt/paperless/data - Im Backup eingeschlossen lassen - Nach dem Start pruefen, dass /opt/paperless/data gemountet und beschreibbar ist ### 2. Compose-Stack - Ablage: /opt/paperless/ - PostgreSQL + Redis + Gotenberg + Tika - Alle Datenverzeichnisse als Bind-Mounts unter /opt/paperless/data/ (media, data, consume, export, pgdata, redisdata) - KEINE benannten Docker-Volumes - Compose-Datei und Variablen aus der aktuellen Doku unter docs.paperless-ngx.com holen, nicht aus dem Gedaechtnis. Bei Abweichung zur Vorgabe: Doku gewinnt, Abweichung melden. - Alle Images auf explizite Versionen pinnen, kein latest. Verwendete Versionen im Protokoll nennen. ### 3. Variablen Siehe 05, Abschnitt Phase 3. Insbesondere: - PAPERLESS_OCR_LANGUAGE=deu+eng - PAPERLESS_TIME_ZONE=Europe/Berlin - PAPERLESS_URL=http://192.168.2.35:8000 - PAPERLESS_FILENAME_FORMAT={created_year}/{correspondent}/{title} (Syntax gegen die aktuelle Doku pruefen) - PAPERLESS_SECRET_KEY: Zufallswert generieren - USERMAP_UID/GID passend zu den Bind-Mount-Rechten ### 4. Secrets Secret-Key und Admin-Passwort generieren, aber NICHT ins Vault schreiben. Im Protokoll nur "generiert, separat uebermittelt" vermerken. Die Werte gibst du mir am Ende im Chat aus. ### 5. Start und Pruefung - Stack starten, Container-Status pruefen - Weboberflaeche auf http://192.168.2.35:8000 erreichbar? - Login mit dem Superuser moeglich? - Noch KEINE Testdokumente einspielen - das ist Phase 4 ### 6. Protokoll 06-Umsetzungsprotokoll.md fortschreiben: Datum, Uhrzeit, Befehle im Wortlaut, verwendete Image-Versionen, Probleme und Sackgassen. Version erhoehen, Aenderungshistorie, Statusuebersicht Phase 3. Eckdaten-Tabelle: Image-Version und Installationspfad eintragen. ## Danach Stoppe und warte auf Freigabe. Phase 4 (Funktionspruefung) ist noch nicht beauftragt. ```` --- ## Anhang E – Prompt für Phase 4 ````markdown Phase 3 ist abgeschlossen und freigegeben. Der Stack laeuft unter 192.168.2.35:8000, Login geprueft. Lies vor dem Start: - 40 Projekte/PaperSafe/05-Vorgabe-ClaudeCode.md (verbindlicher Rahmen, schreibgeschuetzt) - 40 Projekte/PaperSafe/06-Umsetzungsprotokoll.md (dein bisheriges Protokoll) ## Auftrag: Phase 4 - Funktionspruefung ### 1. OCR mit einem BILDBASIERTEN PDF Wichtig: Ein digital erzeugtes PDF hat bereits eine Textebene und prueft die OCR ueberhaupt nicht. Erzeuge ein Testdokument OHNE Textebene - z.B. deutschsprachigen Text rendern, als Bild rastern, daraus ein PDF bauen (ImageMagick/Ghostscript). Beschreibe im Protokoll, wie du es erzeugt hast, und weise nach, dass es vorher keine Textebene hatte (z.B. pdffonts oder pdftotext liefert nichts). Dann in den Consume-Ordner legen und pruefen: - Wird es automatisch eingelesen? - Erkennt die OCR den deutschen Text korrekt, inkl. Umlauten? - Findet die Volltextsuche einen Begriff aus dem Dokument? ### 2. Office-Dokument Ein .docx oder .odt mit deutschem Text einspielen (Gotenberg/Tika-Pfad). Wird es konvertiert und durchsuchbar? ### 3. Ablagestruktur verifizieren Pruefen, wo die Dateien tatsaechlich auf dem Volume landen. Erwartet wird die Struktur Jahr/Korrespondent/Titel aus PAPERLESS_FILENAME_FORMAT. Tatsaechliche Pfade im Protokoll nennen. ### 4. Lastverhalten Waehrend der OCR-Verarbeitung beobachten: - CPU-Auslastung auf dem Proxmox-Host - Ob Home Assistant (VM 109) spuerbar traeger reagiert Hier zeigt sich, ob cpuunits 50 wirkt. Nur beobachten und berichten - nichts veraendern. ### 5. Verarbeitungsdauer Zeit vom Ablegen im Consume-Ordner bis zur Verfuegbarkeit in der Oberflaeche, je Testdokument. ### 6. Aufraeumen Testdokumente wieder loeschen, auch aus dem Papierkorb. Pruefen, dass die zugehoerigen Dateien vom Volume verschwunden sind. ### 7. Haertung PAPERLESS_ADMIN_PASSWORD, PAPERLESS_ADMIN_USER und PAPERLESS_ADMIN_MAIL aus docker-compose.env entfernen - der Superuser existiert bereits, die Variablen werden nur beim ersten Start gebraucht. Danach Stack neu starten und pruefen, dass der Login weiterhin funktioniert. Grund: Das Passwort soll nicht dauerhaft im Klartext liegen und in jedes NAS-Backup wandern. ### 8. Protokoll Wie gewohnt fortschreiben: Datum, Uhrzeit, Befehle, OCR-Ergebnis im Wortlaut (erkannter Text), Zeiten, Probleme und Sackgassen. Version erhoehen, Aenderungshistorie, Statusuebersicht Phase 4. ## Danach Stoppe und warte auf Freigabe. Phase 5 (Backup) ist noch nicht beauftragt. ```` ## Offene Punkte - [x] ~~Werte aus Abschnitt 2 klären~~ → Phase 1 abgeschlossen, CTID/Storage/Netzwerk bestätigt - [x] ~~DHCP-Reservierung im Router anlegen~~ → 192.168.2.35 reserviert - [ ] Wachstum der Backups im Auge behalten: Der bestehende Job läuft 3× täglich mit `keep-daily=5` und erfasst den Container samt Archiv automatisch. Bei wachsendem Bestand steigt der Platzbedarf auf dem NAS entsprechend (aktuell 3,1 TB frei) --- **Status:** Bereit zur Übergabe an Claude Code **Version:** 1.8 **Letzte Aktualisierung:** 18.07.2026 18:00 Uhr ### Änderungshistorie | Version | Datum | Uhrzeit | Änderung | |---|---|---|---| | 1.0 | 18.07.2026 | 14:05 | Erstfassung – Arbeitsvorgabe für Claude Code: Grundregeln, 7 Phasen mit Freigabe-Gates, Negativabgrenzung | | 1.1 | 18.07.2026 | 14:12 | **Nutzerangabe:** `dsobe2023` ist ein Synology-NAS und bereits aktives Proxmox-Backup-Ziel. Phase 5 umgestellt von „Storage einbinden" auf „bestehenden Job prüfen und ergänzen"; Vorbereitungspunkt zum Freigabetyp entfällt; Zugriff auf das NAS selbst und Änderungen an bestehenden Backup-Jobs ausdrücklich ausgeschlossen | | 1.2 | 18.07.2026 | 14:20 | Anhang A ergänzt: fertiger, direkt übergebbarer Prompt für Phase 1 (rein lesende Bestandsaufnahme mit Stopp-Anweisung am Ende) | | 1.3 | 18.07.2026 | 14:30 | **Vault-Zugriff von Claude Code bestätigt:** Grundregel 10 ergänzt (diese Notiz ist schreibgeschützt, Protokoll läuft über [[06-Umsetzungsprotokoll]]), laufende Protokollpflicht nach jeder Phase eingeführt, Anhang A um Übergabe-Einleitung und Protokollierungsauftrag erweitert | | 1.4 | 18.07.2026 | 14:55 | **Korrektur (Nutzerangabe):** Home Assistant läuft auf **VM 109**, nicht VM 100. Betraf Grundregel 1 und den Prompt in Anhang A – die Schutzregel hätte die falsche ID geschützt. Auch in `CLAUDE.md` und im Memory korrigiert | | 1.5 | 18.07.2026 | 15:30 | **Phase 1 freigegeben, Werte für Phase 2 verbindlich gesetzt:** CTID 110, Disk auf `local-lvm` (statt `nvme-thin` – Entkopplung der I/O von Home Assistant), `ip=dhcp` mit Reservierung im Router (statt fester Container-IP – konsistent mit allen bestehenden Gästen), `cpuunits 50` neu ergänzt (HA hat Vorrang bei OCR-Lastspitzen). Ablauf für die MAC-/Reservierungs-Reihenfolge beschrieben, Anhang B mit Prompt für Phase 2 ergänzt | | 1.6 | 18.07.2026 | 16:20 | **Phase 2 erster Teil abgeschlossen:** Container 110 angelegt, MAC `BC:24:11:E0:81:A8`, DHCP-Reservierung im Router auf **192.168.2.35** eingerichtet. `PAPERLESS_URL` mit finaler IP gesetzt. IPv6 (`ip6=auto`, beim Anlegen ungefragt ergänzt) wird vor dem Start auf `ip6=none` zurückgenommen. Anhang C mit Prompt für Phase 2b ergänzt | | 1.7 | 18.07.2026 | 17:10 | **Phase 2 abgeschlossen und freigegeben.** Korrektur eines Fehlers in dieser Vorgabe: `ip6=none` ist in Proxmox 9 kein gültiger Wert – umgesetzt wurde `ip6=manual` plus sysctl-Deaktivierung im Gast. **Neu für Phase 3:** separates Daten-Volume `mp0` mit 200 GB auf `local-lvm` unter `/opt/paperless/data` (in Phase 2 versäumt, vor dem ersten Dokument nachgeholt), Bind-Mounts statt benannter Docker-Volumes festgelegt, `PAPERLESS_FILENAME_FORMAT={created_year}/{correspondent}/{title}` entschieden. Anhang D mit Prompt für Phase 3 ergänzt | | 1.8 | 18.07.2026 | 18:00 | **Phase 3 abgeschlossen und freigegeben.** Korrektur eines Fehlers in dieser Vorgabe: `PAPERLESS_FILENAME_FORMAT` nutzt Jinja2 mit doppelten Klammern, nicht die hier zunächst genannte einfache Syntax. **Phase 4 präzisiert:** OCR-Test ausdrücklich mit bildbasiertem PDF ohne Textebene, Verifikation der Ablagestruktur und Beobachtung des Lastverhaltens gegenüber Home Assistant ergänzt. **Neuer Abschnitt „Nachträgliche Härtung":** `PAPERLESS_ADMIN_PASSWORD` nach der Inbetriebnahme aus `docker-compose.env` entfernen. Anhang E mit Prompt für Phase 4 ergänzt | --- [[Impressum|Impressum]] | [[Datenschutzerklärung|Datenschutz]]