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:
+12
@@ -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
|
||||||
|
|||||||
@@ -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`.
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|
||||||
|
|||||||
@@ -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.
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
Gegenbuch-Daten der Produktivinstanz.
|
||||||
|
Inhalt wird nicht im Repository gefuehrt (enthaelt den Signaturschluessel).
|
||||||
|
Dieses Verzeichnis gehoert ins Backup.
|
||||||
@@ -0,0 +1,2 @@
|
|||||||
|
Gegenbuch-Daten der Testinstanz.
|
||||||
|
Inhalt wird nicht im Repository gefuehrt.
|
||||||
Reference in New Issue
Block a user