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/*
!data/backups/.gitkeep !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-Defaults-Drop-Box (Export-ZIPs zwischen dev/prod hin und her)
factory-exports/* factory-exports/*
!factory-exports/.gitkeep !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 exit 0; **Eintrag nachtraeglich veraendert → Alarm exit 2**; **Eintraege
geloescht (maxId geschrumpft) → Alarm exit 2**; Siegel verschwunden → geloescht (maxId geschrumpft) → Alarm exit 2**; Siegel verschwunden →
Alarm. Testartefakte und Image geloescht. 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 - Behoben beim Bauen: `useradd -u 1000 || true` verschluckte, dass UID 1000
im Node-Image bereits vergeben ist der Container startete gar nicht. im Node-Image bereits vergeben ist der Container startete gar nicht.
Jetzt laeuft er als der vorhandene Benutzer `node`. 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 Der Signaturschlüssel wird beim ersten Start **auf dem Gegenbuch-Rechner
erzeugt** und verlässt ihn nie. 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 Im Projektverzeichnis, nicht in Docker-Volumes:
Buch, der Schlüssel und der Beobachtungsspeicher. Geht es verloren, beginnt die
```
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 Beobachtung von vorn und der nächste Lauf sagt das ausdrücklich, statt „alles
gut" zu melden. 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.