Gegenbuch: Daten im Projektverzeichnis statt in Docker-Volumes

Projektkonvention wie beim Hauptstack: Bind-Mount auf
tools/audit-notary/data/<instanz>/ 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 <noreply@anthropic.com>
This commit is contained in:
2026-08-22 18:54:45 +02:00
co-authored by Claude Opus 5
parent a62c51b7c7
commit cb9f1f5fce
6 changed files with 47 additions and 3 deletions
+12
View File
@@ -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
+6
View File
@@ -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/<instanz>/`. 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`.
+17 -3
View File
@@ -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.
+7
View File
@@ -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.
+3
View File
@@ -0,0 +1,3 @@
Gegenbuch-Daten der Produktivinstanz.
Inhalt wird nicht im Repository gefuehrt (enthaelt den Signaturschluessel).
Dieses Verzeichnis gehoert ins Backup.
+2
View File
@@ -0,0 +1,2 @@
Gegenbuch-Daten der Testinstanz.
Inhalt wird nicht im Repository gefuehrt.