From cb9f1f5fceafae63be4aec8ed3f55c95fd88d0a1 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Sat, 22 Aug 2026 18:54:45 +0200 Subject: [PATCH] Gegenbuch: Daten im Projektverzeichnis statt in Docker-Volumes Projektkonvention wie beim Hauptstack: Bind-Mount auf tools/audit-notary/data// statt benannter Volumes. Wichtiger Nebeneffekt, der vorher fehlte: Das Verzeichnis war nicht von der Versionsverwaltung ausgenommen - Signaturschluessel und Gegenbuch waeren beim naechsten Commit im Repository gelandet. Jetzt ist der Inhalt ignoriert, waehrend die Verzeichnisse selbst ueber .gitkeep bestehen bleiben. Letzteres ist noetig, weil Docker fehlende Bind-Mount-Ziele als root anlegt und der Container als UID 1000 laeuft - der erste Start waere sonst am Schreibrecht gescheitert. Verifiziert mit echtem docker compose gegen eine CRM-Attrappe: Buch, Schluessel, Beobachtungsspeicher und status.txt landen unter tools/audit-notary/data/prod/, Normalbetrieb exit 0. Testcontainer, Image, Attrappe und .env danach entfernt; nur die drei .gitkeep bleiben. Co-Authored-By: Claude Opus 5 --- .gitignore | 12 ++++++++++++ docs/todo.md | 6 ++++++ tools/audit-notary/README.md | 20 +++++++++++++++++--- tools/audit-notary/data/.gitkeep | 7 +++++++ tools/audit-notary/data/prod/.gitkeep | 3 +++ tools/audit-notary/data/staging/.gitkeep | 2 ++ 6 files changed, 47 insertions(+), 3 deletions(-) create mode 100644 tools/audit-notary/data/.gitkeep create mode 100644 tools/audit-notary/data/prod/.gitkeep create mode 100644 tools/audit-notary/data/staging/.gitkeep diff --git a/.gitignore b/.gitignore index a727d389..ad8736ce 100644 --- a/.gitignore +++ b/.gitignore @@ -36,6 +36,18 @@ data/factory-defaults/* data/backups/* !data/backups/.gitkeep +# Gegenbuch (laeuft auf eigener Maschine): enthaelt das Buch selbst, den +# Signaturschluessel und den Beobachtungsspeicher. Nichts davon gehoert ins +# Repository - der Schluessel schon gar nicht. +tools/audit-notary/data/* +!tools/audit-notary/data/.gitkeep +!tools/audit-notary/data/prod/ +tools/audit-notary/data/prod/* +!tools/audit-notary/data/prod/.gitkeep +!tools/audit-notary/data/staging/ +tools/audit-notary/data/staging/* +!tools/audit-notary/data/staging/.gitkeep + # Factory-Defaults-Drop-Box (Export-ZIPs zwischen dev/prod hin und her) factory-exports/* !factory-exports/.gitkeep diff --git a/docs/todo.md b/docs/todo.md index 1f7b3508..671d9692 100644 --- a/docs/todo.md +++ b/docs/todo.md @@ -125,6 +125,12 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung exit 0; **Eintrag nachtraeglich veraendert → Alarm exit 2**; **Eintraege geloescht (maxId geschrumpft) → Alarm exit 2**; Siegel verschwunden → Alarm. Testartefakte und Image geloescht. + - **Daten im Projektverzeichnis, keine Docker-Volumes** (Projektkonvention): + Bind-Mount auf `tools/audit-notary/data//`. Der Inhalt ist per + `.gitignore` ausgenommen – dort liegt der Signaturschluessel –, die + Verzeichnisse selbst bestehen ueber `.gitkeep`. Ohne das haette Docker sie + beim ersten Start als `root` angelegt und der Container (UID 1000) haette + nicht schreiben koennen. - Behoben beim Bauen: `useradd -u 1000 || true` verschluckte, dass UID 1000 im Node-Image bereits vergeben ist – der Container startete gar nicht. Jetzt laeuft er als der vorhandene Benutzer `node`. diff --git a/tools/audit-notary/README.md b/tools/audit-notary/README.md index 56d78d04..bd41e50e 100644 --- a/tools/audit-notary/README.md +++ b/tools/audit-notary/README.md @@ -55,10 +55,24 @@ Das Token kann ausschließlich Prüfwerte lesen: keine Kundendaten, keine Der Signaturschlüssel wird beim ersten Start **auf dem Gegenbuch-Rechner erzeugt** und verlässt ihn nie. -### Was ins Backup gehört +### Wo die Daten liegen -Das Datenverzeichnis (`./data/prod` bzw. `./data/staging`). Darin liegen das -Buch, der Schlüssel und der Beobachtungsspeicher. Geht es verloren, beginnt die +Im Projektverzeichnis, nicht in Docker-Volumes: + +``` +tools/audit-notary/data/prod/ + buch/ das Gegenbuch selbst (ein Git-Repository) + schluessel/ Signaturschlüssel – wird beim ersten Start erzeugt + beobachtungen.jsonl was zuletzt gesehen wurde + status.txt Ergebnis des letzten Durchlaufs +``` + +Der Inhalt ist vom Repository ausgenommen – der Signaturschlüssel gehört dort +nicht hinein. Die Verzeichnisse selbst sind über `.gitkeep` vorhanden, damit +sie nach einem `git clone` schon existieren und Docker sie nicht als `root` +anlegt. + +**Ins Backup gehört genau dieses Verzeichnis.** Geht es verloren, beginnt die Beobachtung von vorn – und der nächste Lauf sagt das ausdrücklich, statt „alles gut" zu melden. diff --git a/tools/audit-notary/data/.gitkeep b/tools/audit-notary/data/.gitkeep new file mode 100644 index 00000000..447adb81 --- /dev/null +++ b/tools/audit-notary/data/.gitkeep @@ -0,0 +1,7 @@ +Hier liegen die Gegenbuch-Daten (je Instanz ein Unterverzeichnis): + + data/prod/ Buch, Signaturschlüssel, Beobachtungsspeicher, status.txt + data/staging/ dasselbe für die Testinstanz + +Der Inhalt wird bewusst NICHT im Repository geführt – er enthält den +Signaturschlüssel. Dieses Verzeichnis gehört ins Backup. diff --git a/tools/audit-notary/data/prod/.gitkeep b/tools/audit-notary/data/prod/.gitkeep new file mode 100644 index 00000000..d3a957fa --- /dev/null +++ b/tools/audit-notary/data/prod/.gitkeep @@ -0,0 +1,3 @@ +Gegenbuch-Daten der Produktivinstanz. +Inhalt wird nicht im Repository gefuehrt (enthaelt den Signaturschluessel). +Dieses Verzeichnis gehoert ins Backup. diff --git a/tools/audit-notary/data/staging/.gitkeep b/tools/audit-notary/data/staging/.gitkeep new file mode 100644 index 00000000..e2f3b7d4 --- /dev/null +++ b/tools/audit-notary/data/staging/.gitkeep @@ -0,0 +1,2 @@ +Gegenbuch-Daten der Testinstanz. +Inhalt wird nicht im Repository gefuehrt.