Betreiber-Entscheidung: Das Gegenbuch laeuft auf einer eigenen Maschine fuer Prod und Staging; ein externes Git-Repository entfaellt, das Buch liegt lokal. Die Trennung, auf die es ankommt, ist damit gegeben - wer OpenCRM uebernimmt, kommt nicht ans Buch. Richtung bewusst so herum: Das Gegenbuch holt ueber HTTPS mit einem Token, das nur audit:read kann. OpenCRM kennt weder Adresse noch Schluessel des Gegenbuchs. Kein SSH-Zugang zum CRM noetig. tools/audit-notary/ enthaelt jetzt Dockerfile, entrypoint.sh, docker-compose.yml und .env.example. Zwei Dienste (prod, staging) mit getrennten Verzeichnissen und Schluesseln, gesteuert ueber COMPOSE_PROFILES - dasselbe Muster wie beim Caddy-Profil im Hauptstack. Der Signaturschluessel wird beim ersten Start auf der Gegenbuch-Maschine erzeugt. Lokaler Betrieb ist jetzt ein vollwertiger Modus statt eines Testschalters. Die Erfolgsmeldung benennt bei jedem Lauf, was abgedeckt ist und was nicht - statt der frueheren pauschalen Formulierung "kein Manipulationsschutz", die im Einsatz auf eigener Maschine schlicht falsch war. Verifiziert mit echtem Docker-Build gegen eine CRM-Attrappe: Genesis ohne Bestaetigung -> Code 4; mit Bestaetigung Normalbetrieb exit 0; Eintrag veraendert -> Alarm exit 2; Eintraege geloescht -> Alarm exit 2; Siegel verschwunden -> Alarm. Behoben beim Bauen: useradd -u 1000 || true verschluckte, dass UID 1000 im Node-Image vergeben ist - der Container startete gar nicht. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
24 lines
952 B
Docker
24 lines
952 B
Docker
# Gegenbuch – läuft auf einem EIGENEN Rechner, nicht dort, wo OpenCRM läuft.
|
||
#
|
||
# Der Container holt lesend einen Kontrollwert vom CRM (HTTPS + Token mit
|
||
# audit:read) und legt seine Einträge in einem Git-Repository auf DIESER
|
||
# Maschine ab. Er braucht keinen SSH-Zugang zum CRM, keine Datenbank, keine
|
||
# Shell dort. Umgekehrt kennt OpenCRM dieses Gegenbuch überhaupt nicht.
|
||
FROM node:20-slim
|
||
|
||
# git für das Buch, openssh-client für die Signaturen (ssh-keygen).
|
||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||
git openssh-client ca-certificates \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
COPY notary.mjs /opt/notary/notary.mjs
|
||
COPY entrypoint.sh /opt/notary/entrypoint.sh
|
||
RUN chmod +x /opt/notary/entrypoint.sh
|
||
|
||
# Nicht als root laufen. Das Node-Image bringt bereits einen Benutzer mit
|
||
# UID 1000 mit ("node") – der passt zu Bind-Mounts unter ./data/.
|
||
USER node
|
||
WORKDIR /gegenbuch
|
||
|
||
ENTRYPOINT ["/opt/notary/entrypoint.sh"]
|