Die Steuerungsebene ist ein Go-Binary, olivares, konfiguriert durch eine kleine Menge
von Flags auf seinem serve-Unterbefehl und einer Handvoll Umgebungsvariablen — keine
ausufernde Konfigurationsdatei. Die Standards sind so gewaehlt, dass sie ablehnend
schliessen: Loopback-Binds, TLS an, keine ausgelieferten Credentials. Alles unten stammt
aus den eigenen Befehlsdefinitionen und der Kompositionswurzel des Binaries; wo eine
Einstellung nicht im Quellcode bestaetigt werden kann, wird sie hier nicht aufgefuehrt.
Geheimnisse, die echte Quellen verdrahten und echte Schluessel verwahren, bleiben in Operator-gehaltenen Dateien oder gemounteten Secrets, referenziert durch Umgebungsvariablen — nie im Speicher. Fuer den ausfuehrbaren Ende-zu-Ende-Pfad siehe den Self-Host-Leitfaden; fuer die vollstaendige Flag-Auflistung siehe die CLI-Referenz.
Der serve-Unterbefehl
olivares serve fuehrt den REST/Web-HTTP-Server und den gRPC-Server in einem Prozess
aus, wobei die Webkonsole auf demselben Origin wie die API bereitgestellt wird. Dies sind
die gaengigen Konfigurationseingaben.
| Flag | Standard | Zweck |
|---|---|---|
--listen | 127.0.0.1:8443 | HTTP-Bind-Adresse (REST-API + eingebettete Webkonsole). |
--grpc-listen | 127.0.0.1:8444 | gRPC-Bind-Adresse (Steuerungsebene / Kollektor-Ingest). |
--data-dir | $OLIVARES_DATA_DIR oder ./olivares-data | Audit-Signaturschluessel, TLS-Material und — fuer SQLite — die Speicherdatei. |
--engine | sqlite | Speicher-Engine: sqlite oder postgres. |
--dsn | leer (SQLite-Datei im Datenverzeichnis) | Speicher-Verbindungsstring. |
--checkpoint-interval | 1h | Wie oft ein signierter Audit-Checkpoint ueber jede Mandantenkette geschrieben wird. 0 deaktiviert. |
--insecure | aus | Klartext-HTTP/gRPC bereitstellen. Nur fuer Localhost-Entwicklung. |
--seed-demo | aus | Eine synthetische Beispielumgebung laden. Weigert sich, auf einem Nicht-Loopback-Bind zu starten. |
TLS ist standardmaessig an. Ohne bereitgestelltes --tls-cert/--tls-key stellt die
Engine ein selbstsigniertes Zertifikat im Datenverzeichnis einmalig im Voraus sicher,
bevor ein Listener eine Verbindung akzeptiert — sodass sowohl der HTTP- als auch der
gRPC-Server dasselbe Zertifikat verwenden und keiner auf Klartext zurueckfaellt. Wenn sie
dieses Zertifikat generiert, protokolliert sie den SHA-256-Fingerprint, damit Clients es
vertrauen oder pinnen koennen.
--insecure ist der einzige Weg, Klartext bereitzustellen, und der gRPC-Pfad schliesst
ablehnend: Ausserhalb von --insecure weigert sich der Server, einen Klartext-Listener
zu konstruieren, anstatt stillschweigend zu degradieren. Verwenden Sie es nur gegen
127.0.0.1 waehrend der lokalen Entwicklung.
--seed-demo stellt einen Demo-Administrator mit einem oeffentlichen,
Quellbaum-Passwort und fabrizierten Umgebungsdaten bereit — nur fuer Demos und E2E.
Die Engine weigert sich, es zu starten, wenn einer der Listener Nicht-Loopback ist.
Verwenden Sie ein wegwerfbares Datenverzeichnis.
Eine zweite Stufe von Flags steuert verteilte und gegenseitige-TLS-Topologien —
--admin-dsn und --allow-privileged-db-role (Postgres), --grpc-client-ca
(Kollektor-gegenseitiges-TLS) und --region/--known-regions (Datenresidenz). Diese
werden unten behandelt und vollstaendig in der CLI-Referenz
aufgefuehrt.
Umgebungsvariablen
Die Engine liest eine kleine Anzahl von Umgebungsvariablen beim Start. Die folgenden sind in der Kompositionswurzel und Verdrahtung bestaetigt.
Datenverzeichnis und Quellen
| Variable | Wirkung |
|---|---|
OLIVARES_DATA_DIR | Standard-Datenverzeichnis, wenn --data-dir nicht angegeben ist (faellt auf ./olivares-data zurueck). Haelt den Audit-Signaturschluessel, TLS-Material und die SQLite-Speicherdatei. Persistieren Sie es ueber Neustarts. |
OLIVARES_SOURCES_CONFIG | Pfad zu einer JSON-Datei, die echte Beobachtungsquellen, Identitaets-Roster-Provider und Wissensdokument-Quellen vor dem Start der Engine verdrahtet. |
OLIVARES_SOURCES_CONFIG ist die einzelne Eingabe, durch die Nicht-Demo-Signalquellen
und Roster-Provider aufgeloest werden. Es ist die geheimnisse-tragende Konfiguration des
Operators und wird bewusst aus dem Speicher herausgehalten. Die Engine liest sie beim Start
und registriert jede Quelle, bevor die Runtime startet.
Die Behandlung ist ehrlich statt fail-fast. Eine fehlende Variable, eine nicht lesbare oder ungueltige-JSON-Datei oder eine konfigurierte-aber-leere Quellenliste warnen alle und ergeben eine leere Konfiguration — die Engine bricht den Start nie ab. Eine unkonfigurierte Quelle zeigt eine Warnung an, anstatt die Ebene zum Absturz zu bringen oder vorzutaeuschen, dass sie funktioniert: Ohne etwas Verdrahtetes bleibt die Zugriffskarte einfach leer. Um sie zu bevoelkern, konfigurieren Sie mindestens eine Quelle — siehe Eine Quelle verbinden und, fuer den kooperativen Claude-Code-Pfad, Claude Code verbinden.
Autorisierungs-Entscheidungspunkt
Die native attributbasierte und rollenbasierte Zugriffskontrolle steuert immer. Ein externer Policy Decision Point (PDP), wenn ausgewaehlt, ist eine zusaetzliche nur-einschraenkende Ebene, die die Entscheidung, die das eingebaute RBAC bereits getroffen hat, nur verengen kann — nie erweitern.
| Variable | Wirkung |
|---|---|
OLIVARES_PDP_ENGINE | Waehlt den externen PDP: cedar, opa oder none (leer/none = nur natives ABAC). |
OLIVARES_PDP_CEDAR_FILE | Cedar-Engine: Pfad zur Richtliniendatei des Operators. |
OLIVARES_PDP_OPA_URL / _OPA_PATH / _OPA_TOKEN | OPA-Engine: Basis-URL, Entscheidungspfad und Bearer-Token fuer den Open Policy Agent-Endpunkt. |
Zwei Adapter sitzen hinter einer Naht — ein eingebetteter Cedar-Evaluator (der
Pure-Go-Pfad) und ein OPA-ueber-HTTP-Adapter. Wenn OLIVARES_PDP_ENGINE eine Engine
auswaehlt, aber deren Konfiguration ungueltig ist (eine nicht lesbare Cedar-Datei, ein
fehlerhaftes OPA-Ziel), deaktiviert die Engine nur den externen PDP, behaelt die native
ABAC-Engine und RBAC durchsetzend und protokolliert laut. Eine defekte Richtliniendatei
laesst Anfragen nie ungesteuert und bringt die Ebene nie zum Absturz. Fuer das
standardmaessig-ablehnende Modell siehe Governance.
Audit-Signaturschluessel
Das Audit-Ledger ist nur-anhaengend, hash-verkettet und durch Ed25519-signierte Checkpoints verankert. Der Pro-Ereignis-Signaturschluessel wird beim Start aufgeloest, fail-closed fuer jede verwahrte Quelle.
| Variable | Wirkung |
|---|---|
OLIVARES_AUDIT_SIGNING_KEY | Vom Kunden bereitgestellter Signaturschluessel, base64, inline. |
OLIVARES_AUDIT_SIGNING_KEY_FILE | Pfad zu einem gemounteten Secret, das den Schluessel haelt (bevorzugt — der Wert gelangt nie in die Prozessumgebung). |
OLIVARES_KEY_CUSTODY | Deklarierte Verwahrungshaltung (byok oder cmek). Ein Start, dessen tatsaechliche Schluesselverwahrung nicht mit der deklarierten uebereinstimmt, wird abgelehnt. |
Ohne diese gesetzt wird der Schluessel beim ersten Start im Datenverzeichnis
gepraegt — der ehrliche Einzelknoten-/Entwicklungs-Fallback. Das Teilen eines
Schluessels ueber Replicas (ueber den Env-Wert oder ein gemountetes Secret) ist fuer
Hochverfuegbarkeit erforderlich: Sonst praegt jeder Knoten seinen eigenen und das Ledger
forkt beim Failover. Pro-Ereignis-Signierung bleibt immer on-box. KMS-verpackte
(kundenverwalteter-Schluessel) Verwahrung ist eine zusaetzliche Haltung, konfiguriert ueber
OLIVARES_KEY_WRAP; siehe die CLI-Referenz.
Speicherauswahl
Die Engine waehlt ihren Speicher ueber --engine.
| Engine | Wann verwenden | Hinweise |
|---|---|---|
sqlite (Standard) | Einzelnes Binary, einzelner Knoten, air-gapped Installationen. | Eingebetteter Pure-Go-Speicher, null externe Abhaengigkeiten. Ohne --dsn lebt die Speicherdatei im Datenverzeichnis. |
postgres | Multi-Tenant- und Scale-Out-Deployments. | Fuegt Row-Level-Security-Mandantenisolierung hinzu. Erfordert eine Least-Privilege-Anwendungsrolle. |
SQLite ist der Standard und braucht keinen externen Dienst — es ist der air-gap-faehige, null-Abhaengigkeiten-Speicher fuer die Einzelknoten-Topologie, und derjenige, den das Ein-Befehl-Docker-Compose-Deployment ausfuehrt. Wechseln Sie zu Postgres, wenn Sie Multi-Tenant-Isolierung oder horizontale Skalierung brauchen, nicht vorher.
Die Auswahl von postgres aktiviert den Row-Level-Security-Backstop, der Mandanten
isoliert. Die Engine weigert sich zu starten gegen einen Postgres-Superuser oder eine
BYPASSRLS-Rolle — was diesen Backstop deaktivieren wuerde — es sei denn,
--allow-privileged-db-role ueberschreibt den Schutz explizit (nur Single-Tenant /
wegwerfbar). Fuer volle cross-tenant System-Lesevorgaenge (Org-Auflistung,
Multi-Tenant-Checkpoint-Abdeckung) stellen Sie eine dedizierte NOSUPERUSER BYPASSRLS
Admin-Rolle ueber --admin-dsn bereit; ohne sie laufen diese Lesevorgaenge
RLS-eingeschraenkt und geben moeglicherweise leer zurueck. OLIVARES_DB_MAX_CONNS begrenzt
den Pro-Knoten-Anwendungspool.
Mandantenverwaltung und Residenz
Eine einzelne Instanz ist auf Postgres konstruktionsbedingt multi-tenant, mit
Row-Level-Security, die die Daten jedes Mandanten isoliert. Datenresidenz wird obenauf durch
--region geschichtet.
- Einzelregion (Standard, kein
--region): keine Residenz-Durchsetzung. - Regionsbezogen (
--region eu,--region us, …): Die Instanz bedient nur Mandanten, die an ihre Heimatregion gepinnt sind, und lehnt regionsueberschreitenden Zugriff ablehnend ab.--known-regionslistet die Regionscodes auf, die ueber das gesamte Deployment gueltig sind; der Pin eines Mandanten muss einer davon sein, und eine fehlerhafte Regionskonfiguration laesst den Start fehlschlagen, bevor der Speicher geoeffnet wird.
Audit-Checkpoints
--checkpoint-interval steuert, wie oft ein signierter Checkpoint ueber jede
Mandantenkette geschrieben wird (Standard 1h; 0 deaktiviert). Ein letzter Checkpoint
wird beim sauberen Herunterfahren geschrieben, bevor der Speicher schliesst, sodass die
Kette sowohl beim Herunterfahren als auch im Intervall verankert ist. Siehe
Einen Release verifizieren dafuer, wie die signierte Kette
nachgelagert verifiziert wird.
Sichere Standards
Diese Haltungen gelten ohne Konfiguration ueber serve hinaus. Sie sind die
Standardhaltung des Produkts, keine optionale Haertung.
| Bereich | Standard | Bedeutung |
|---|---|---|
| Credentials | Keine ausgeliefert | Kein Standard-Benutzername oder -Passwort. Beim ersten Start ohne Benutzer praegt die Engine einen einmaligen Setup-Token und gibt ihn ausschliesslich auf Standardausgabe aus — nie in die Logs. |
| Transport | TLS an | HTTP und gRPC werden ueber TLS bereitgestellt; ein selbstsigniertes Zertifikat wird im Datenverzeichnis generiert, wenn keines bereitgestellt wird, und sein Fingerprint wird protokolliert. |
| Bind-Adresse | Loopback | --listen und --grpc-listen sind standardmaessig 127.0.0.1. Off-Host-Erreichbarkeit ist eine bewusste Operator-Entscheidung. |
| Klartextmodus | Aus | --insecure ist der einzige Weg, Klartext bereitzustellen, und der gRPC-Pfad schliesst ablehnend. Nur fuer Localhost-Entwicklung. |
| Demo-Seeding | Aus | --seed-demo ist aus und weigert sich bei jedem Nicht-Loopback-Bind, weil es einen Demo-Administrator mit oeffentlichem Passwort praegt. |
| Telemetrie-Heimruf | Aus | Die Engine telefoniert nicht nach Hause. Ausgehende Verbindungen existieren nur zu den Quellen, die Sie konfigurieren — das macht eine air-gapped Steuerungsebene mit null Egress moeglich. |
Die Loopback-Binds bedeuten, dass die Engine off-host nicht erreichbar ist, bis Sie sie
aendern. Wenn Sie sie veroeffentlichen — zum Beispiel durch das Mapping eines Host-Ports in
Docker Compose — ist TLS bereits an, um sie zu schuetzen; kombinieren Sie keinen
veroeffentlichten Bind mit --insecure. Bei einer frischen Installation gibt die Engine
einen FIRST-BOOT SETUP-Block auf Standardausgabe mit dem einmaligen Setup-Token aus (lesen
Sie ihn aus den Container-Logs unter Compose); der Administrator verwendet ihn, um den
ersten Benutzer zu erstellen, und authentifiziert sich dann.
Fuer das, was das Produkt beobachtet, wo es steuert und wo die Abdeckung gestuft ist, lesen Sie Ehrlichkeit und Grenzen.