Konfigurationsreferenz

Wippy liest seine Runtime-Konfiguration aus .wippy.yaml-Dateien.

Verwenden Sie die wiederholbare Option wippy run --set section.path=value, um die folgenden Konfigurationsfelder beim Start zu überschreiben. Für einzelne Registry-Einträge statt Konfigurationsabschnitte verwenden Sie override: oder -o; siehe Einträge überschreiben.

Konfigurations-Komposition {#config-composition}

--config ist wiederholbar; Dateien komponieren von links nach rechts mit demselben Schema:

wippy run --config .wippy.yaml --config .wippy.local.yaml
  • Spätere Dateien überschreiben übereinstimmende Werte und behalten alles andere bei.
  • Jede explizit benannte Datei muss existieren. Ohne --config ist die Standarddatei .wippy.yaml optional.
  • Die erste Datei verankert das Verzeichnis, gegen das relative Pfade aufgelöst werden.
  • Dateinamen tragen keine reservierte Bedeutung; nichts außer dem Standard wird automatisch entdeckt.

Die Konfiguration wird in dieser Reihenfolge angewendet: komponierte Dateien, ausgewählte --profile-Overlays und anschließend --set-Überschreibungen. Bei Anwendungen aus Packs haben gepackte Runtime-Defaults eine niedrigere Priorität; siehe Runtime-Defaults veröffentlichen.

Profile {#profiles}

Eine Konfigurationsdatei kann benannte Overlays unter profiles: deklarieren. Jeder Profilkörper spiegelt die normalen Konfigurationsabschnitte; die Auswahl mit --profile <name> legt diese Werte über die zusammengeführte Basiskonfiguration:

version: "1.0"

vars:
  port: 8085

override:
  app:db:kind: db.sql.sqlite

disable:
  namespaces: ["legacy.**"]

profiles:
  pg:
    vars:
      port: 18085
    override:
      app:db:kind: db.sql.postgres
    disable:
      namespaces.add: ["experimental.**"]
wippy run --profile pg
  • --profile ist wiederholbar; Profile komponieren von links nach rechts, nach der Datei-Komposition und vor --set. Ein unbekannter Name ist ein Fehler.
  • Werte werden pro Blatt zusammengeführt (der letzte Schreiber gewinnt). Der Abschnitt profiles: selbst wird aus der aufgelösten Konfiguration entfernt.
  • Der Abschnitt disable unterstützt Listenoperationen innerhalb von Profilen — namespaces.add, namespaces.remove, entries.add, entries.remove — sodass ein Profil die Basisliste anpassen kann, statt sie zu ersetzen.
  • ${name}-Referenzen interpolieren aus dem zusammengeführten vars:-Abschnitt. OS-Umgebungsreferenzen sind innerhalb von Profil-Vars nicht erlaubt; verwenden Sie ${env:NAME} in der Basiskonfiguration, aufgelöst beim Laden der Datei.

wippy run, test und pack akzeptieren --profile; run list, install, update, lint und registry akzeptieren es ebenfalls für Workspace-Profile (zusammen mit --set). Anwendungen können Profile in Packs ausliefern — siehe Profile veröffentlichen.

Logger

Steuert den zap-Logger-Encoder. CLI-Flags (-v, -c, -s) überschreiben Level/Ausgabe; die einzige yaml-gesteuerte Option ist die Kodierung.

Feld Typ Standard Beschreibung
encoding string console Encoder: console (menschenlesbar) oder json (strukturiert)
logger:
  encoding: json

Log-Manager

Steuert das Runtime-Log-Routing. Konsolenausgabe wird über CLI-Flags (-v, -c, -s) konfiguriert.

Feld Typ Standard Beschreibung
propagate_downstream bool true Logs an Konsolen-/Dateiausgabe senden
stream_to_events bool false Logs für programmatischen Zugriff zum Event-Bus veröffentlichen
min_level int 0 (-1 mit -v) Minimales Level: -1=debug, 0=info, 1=warn, 2=error. Die CLI schreibt diesen Schlüssel nach dem Lesen der Datei aus ihren Flags, sodass ein Dateiwert ignoriert wird; ändern Sie ihn mit --set logmanager.min_level=<n>
logmanager:
  propagate_downstream: true
  stream_to_events: false

Siehe: Logger-Modul

Profiler

Go pprof HTTP-Server für CPU-/Speicher-Profiling. Mit -p Flag oder Konfiguration aktivieren.

Feld Typ Standard Beschreibung
enabled bool false Profiler-Server starten
address string localhost:6060 Adresse zum Lauschen
read_timeout duration 15s HTTP Read-Timeout
write_timeout duration 15s HTTP Write-Timeout
idle_timeout duration 60s Keep-Alive-Timeout
profiler:
  enabled: true
  address: "localhost:6060"

Zugriff unter http://localhost:6060/debug/pprof/

Sicherheit

Globales Sicherheitsverhalten. Individuelle Richtlinien werden als security.policy-Einträge definiert.

Feld Typ Standard Beschreibung
strict_mode bool true Zugriff verweigern, wenn der Sicherheitskontext unvollständig ist
security:
  strict_mode: false

Siehe: Sicherheitssystem, Sicherheitsmodul

Registry

Eintragsspeicherung und Versionshistorie. Die Registry enthält alle Konfigurationseinträge.

Feld Typ Standard Beschreibung
enable_history bool true Eintragsversionen verfolgen
history_type string memory Speicher: memory, sqlite, postgres, nil
history_path string .wippy/registry.db SQLite-Dateipfad (verwendet bei history_type: sqlite)
history_dsn string Postgres-DSN (verwendet bei history_type: postgres)
history_schema string Postgres-Schemaname (verwendet bei history_type: postgres)
event_wait_timeout duration 30s Wartezeit pro Operation auf die Bestätigung durch Listener während eines Registry-Apply
dispatch_internal_kinds string[] [registry.entry, ns.dependency, ns.requirement, ns.definition] Entry-Typen, die intern behandelt statt an Komponenten-Listener verteilt werden
dependency_resolve_timeout duration 0 (keins) Grenze für die Auflösung von Abhängigkeiten
dependency_download_timeout duration 0 (keins) Grenze für jeden Modul-Download und jede Download-URL-Anfrage
dependency_lock_path string gefundene wippy.lock Lock-Datei, die der Abhängigkeits-Handler liest und schreibt
dependency_vendor_dir string <lock-Verzeichnis>/<directories.modules>/vendor Verzeichnis mit den heruntergeladenen Modul-Packs
registry:
  history_type: sqlite
  history_path: /var/lib/wippy/registry.db
registry:
  history_type: postgres
  history_dsn: ${env:WIPPY_REGISTRY_HISTORY_DSN}
  history_schema: wippy_registry

Siehe: Registry-Konzept, Registry-Modul

Artifact

Ausgabewurzel für materialisierte Build-Zeit-Artefakte.

Feld Typ Standard Beschreibung
materialization_root string übergeordnetes Verzeichnis des Dependency-Vendor-Verzeichnisses Von der Anwendung besessene Wurzel, unter der jedes Artefaktformat seinen eigenen Teilbaum schreibt
artifact:
  materialization_root: build/wippy

Siehe: Build-Zeit-Artefakte

Workspace

Lokale Modulersetzungen, adressiert über org/module. Die Werte sind Verzeichnisse; relative Pfade werden gegen das Verzeichnis der ersten --config-Datei aufgelöst, und null deaktiviert eine Ersetzung, die aus einer früheren Konfigurationsebene oder einem Profil geerbt wurde.

workspace:
  replacements:
    acme/http: ../local-http
    acme/sql: null

Ersetzungen werden nie in wippy.lock geschrieben. Siehe Lokale Entwicklung mit Ersetzungen.

Relay

Nachrichtenrouting zwischen Prozessen über Knoten hinweg.

Feld Typ Standard Beschreibung
node_name string abgeleitete instanzspezifische ID Bezeichner für diesen Relay-Knoten (Standard: UUIDv5 aus machine-id/Hostname + Arbeitsverzeichnis; überschreibbar über WIPPY_NODE_ID / WIPPY_RELAY_NODE_NAME)
relay:
  node_name: worker-1

Siehe: Prozessmodell

Supervisor

Dienst-Lebenszyklus-Verwaltung. Steuert das interne Steuerungs-Postfach des Supervisors, das zum Versand von Lebenszyklus-Ereignissen verwendet wird.

Feld Typ Standard Beschreibung
host.buffer_size int 1024 Kapazität des internen Steuerungs-Postfachs
host.worker_count int 16 Nebenläufige Dispatcher-Worker
supervisor:
  host:
    buffer_size: 2048
    worker_count: 32

Siehe: Supervision-Anleitung

Worker und Warteschlangen pro `process.host` werden am Eintrag selbst konfiguriert (`workers`, `queue_size`, `local_queue_size`), nicht in diesem globalen Abschnitt. Siehe den [Process Host](system/process-host.md)-Eintragstyp.

Lua-Runtime

Lua-VM-Caching und Expression-Auswertung.

Feld Typ Standard Beschreibung
cache.enabled bool type_system.enabled Kompilierten Bytecode-/Typecheck-Cache auf Disk persistieren; folgt type_system.enabled, sofern nicht explizit gesetzt
cache.dir string .wippy/cache/lua Cache-Verzeichnis-Pfad (relativ zum Konfigurations-/Arbeitsverzeichnis)
cache.mode string readwrite Cache-Modus: readwrite (Standard), readonly, off; unbekannte Werte fallen auf readwrite zurück
cache.compile.enabled bool true Kompilierten Bytecode persistieren (bei cache.enabled)
cache.typecheck.enabled bool true Typecheck-Ergebnisse persistieren (bei cache.enabled)
cache.max_bytes int 1073741824 Obergrenze der Cache-Größe auf Disk in Bytes
cache.max_entries int 20000 Maximale Anzahl gecachter Einträge
cache.prune_interval int 256 Schreibvorgänge zwischen Cache-Bereinigungsläufen
type_system.enabled bool false Statische Typprüfung aktivieren
type_system.strict bool false Typwarnungen als Fehler behandeln
invalidation_wait_timeout duration registry.event_wait_timeout (30s) Wartezeit auf die Bestätigung der Code-Invalidierung nach einer Eintragsänderung
eval.max_steps int 10000 Standardbudget an Scheduler-Schritten für einen eval-Lauf; negative Werte werden abgelehnt
eval.cache_size int 256 Cache-Einträge kompilierter Programme für ausgewerteten Quellcode
eval.cache_ttl duration 0 (kein Ablauf) Lebensdauer eines zwischengespeicherten kompilierten Programms
lua:
  cache:
    enabled: true
    dir: .cache/lua
  type_system:
    enabled: true

Siehe: Lua-Übersicht

Scheduler

Core-Partitionierung für die WASM-Runtime. Wenn aktiviert, werden reserved_cores CPUs für die WASM-Ausführung reserviert und die übrigen bedienen den Actor-Scheduler; eine ungültige Aufteilung (zum Beispiel mehr reservierte Cores als verfügbar) wird protokolliert und ignoriert.

Feld Typ Standard Beschreibung
wasm_isolation.enabled bool false Cores zwischen WASM- und Actor-Arbeit aufteilen
wasm_isolation.reserved_cores int 1 Für die WASM-Ausführung reservierte Cores
scheduler:
  wasm_isolation:
    enabled: true
    reserved_cores: 2

Finder

Registry-Such-Caching. Wird intern für Eintrags-Lookups verwendet.

Feld Typ Standard Beschreibung
query_cache_size int 1000 Gecachte Abfrageergebnisse
regex_cache_size int 100 Kompilierte Regex-Muster
finder:
  query_cache_size: 2000

OpenTelemetry

Verteiltes Tracing und Metrik-Export über OTLP.

Feld Typ Standard Beschreibung
enabled bool false OTEL aktivieren
endpoint string localhost:4318 OTLP-Endpunkt
protocol string http/protobuf Protokoll: grpc, http/protobuf
service_name string wippy-runtime Dienst-Bezeichner
service_version string Dienst-Versions-Tag
insecure bool true Unverschlüsselte OTLP-Verbindung zulassen
sample_rate float 1.0 Trace-Sampling (0.0-1.0)
propagators string[] [tracecontext, baggage] Context-Propagatoren
traces_enabled bool true Traces exportieren
metrics_enabled bool false Metriken exportieren
http.enabled bool true HTTP-Anfragen tracen
http.extract_headers bool true Trace-Context aus eingehenden Headern extrahieren
http.inject_headers bool true Trace-Kontext in die HTTP-Antwort einfügen
process.enabled bool true Prozess-Lebenszyklus tracen
process.trace_lifecycle bool true Spans für spawn/terminate ausgeben
interceptor.enabled bool true Funktionsaufrufe tracen
interceptor.order int 100 Dekodiertes Kompatibilitätsfeld; Runtime v0.3.32a registriert den Interceptor unabhängig von diesem Wert mit Reihenfolge 100
queue.enabled bool true Queue publish/consume tracen
temporal.enabled bool false Temporal-Workflows tracen
otel:
  enabled: true
  endpoint: "http://jaeger:4318"
  traces_enabled: true
  process:
    trace_lifecycle: true

Standard-OTEL-Umgebungsvariablen (OTEL_SDK_DISABLED, OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_EXPORTER_OTLP_PROTOCOL, OTEL_EXPORTER_OTLP_INSECURE, OTEL_SERVICE_NAME, OTEL_SERVICE_VERSION, OTEL_TRACES_SAMPLER, OTEL_TRACES_SAMPLER_ARG, OTEL_PROPAGATORS) überschreiben die entsprechenden Felder.

Siehe: Observability-Anleitung

Herunterfahren :id=shutdown

Verhalten beim kontrollierten Herunterfahren.

Feld Typ Standard Beschreibung
timeout duration 30s Maximale Wartezeit für Komponenten zum Stoppen
shutdown:
  timeout: 60s

Metriken

Interner Metriken-Sammlungspuffer.

Feld Typ Standard Beschreibung
buffer.size int 10000 Metriken-Puffer-Kapazität
interceptor.enabled bool true Funktionsaufrufe automatisch verfolgen
metrics:
  buffer:
    size: 20000
  interceptor:
    enabled: true

Siehe: Metriken-Modul, Observability-Anleitung

Prometheus

Prometheus-Metriken-Endpunkt.

Feld Typ Standard Beschreibung
enabled bool false Metriken-Server starten
address string Adresse zum Lauschen; muss explizit gesetzt werden, wenn enabled: true, sonst startet der Metriken-Server nicht
max_cardinality int 1024 Pro Metrik behaltene unterschiedliche Label-Sets (LRU); 0 oder kleiner verwendet den Standard
prometheus:
  enabled: true
  address: "0.0.0.0:9090"

Stellt /metrics-Endpunkt für Prometheus-Scraping bereit, zusätzlich /livez.

Siehe: Observability-Anleitung

Cluster

Multi-Node-Clustering: Gossip-Mitgliedschaft plus ein begrenzter Raft-Konsenskern. Siehe den Cluster-Leitfaden für Architektur und Betriebsmodell; dieser Abschnitt ist die Konfigurationsschlüssel-Referenz.

Oberste Ebene

Feld Typ Standard Beschreibung
enabled bool false Clustering aktivieren
name string hostname Knotenname; muss im Cluster eindeutig sein
failure_domain string Zonen-/Rack-Label; im Gossip beworben, damit Voter über Domains verteilt werden
kv_crdt_tombstone_retention duration 0 Alter, ab dem store.kv.crdt-Lösch-Tombstones freigegeben werden; 0 deaktiviert die altersbasierte GC
kv_crdt_tombstone_gc_alive_peers bool false Die aktuelle Alive-Mitgliedschaft als Bestätigungsmenge für Tombstones verwenden

Mitgliedschaft (Gossip)

SWIM-Gossip über memberlist. Wird für Knotenentdeckung, Fehlererkennung und Metadaten-Verbreitung verwendet.

Feld Typ Standard Beschreibung
membership.bind_addr string 0.0.0.0 Gossip-Bind-Adresse
membership.bind_port int 7946 Gossip-Bind-Port (TCP+UDP)
membership.advertise_addr string Adresse, die Peers verwenden, um diesen Knoten zu erreichen (NAT/k8s)
membership.join_addrs string Kommagetrennte Seed-host:port-Paare
membership.secret_key string Base64-kodierter Gossip-Verschlüsselungsschlüssel (inline)
membership.secret_file string Pfad zur Datei mit dem Gossip-Verschlüsselungsschlüssel
membership.gossip_interval duration 500ms Gossip-Verbreitungsperiode
membership.push_pull_interval duration 5s Periode der vollständigen Zustandssynchronisation
membership.dead_node_reclaim_time duration 30s Wann Name/Adresse eines toten Knotens wiederverwendet werden können
membership.probe_interval duration 1s Zyklus der Fehlererkennungs-Probes
membership.probe_timeout duration 200ms Ack-Wartezeit pro Probe
membership.tcp_timeout duration 1s Timeout der TCP-Fallback-Probe
membership.suspicion_mult int 3 Multiplikator des Suspicion-Timeouts

Ein Gossip-Secret ist erforderlich. Entweder membership.secret_key oder membership.secret_file setzen (die Datei gewinnt, wenn beides angegeben ist); ohne beides startet die Cluster-Komponente nicht. Der Wert ist base64-kodiert.

Die vier Probe-Schlüssel erben die Local-Network-Defaults von memberlist, wenn sie nicht gesetzt sind; erhöhen Sie sie für Verbindungen mit hoher Latenz (z.B. probe_interval: 2s, probe_timeout: 500ms, suspicion_mult: 5).

Internode (Transport)

TCP-Mesh für Relay- und Raft-Verkehr zwischen Knoten. Raft nutzt dieses Mesh über Internode-Request/Reply; es gibt keinen separaten Raft-Port.

Feld Typ Standard Beschreibung
internode.bind_addr string 0.0.0.0 Mesh-Bind-Adresse
internode.bind_port int 0 Mesh-Port (0 = auto: 7950-7959, dann ephemer)
internode.auto_port bool true Tatsächlichen Port beim Start ermitteln, festlegen und im Gossip bewerben
internode.advertise_addr string Zusätzlicher Relay-Endpunkt (IP oder DNS-Name), veröffentlicht für aktualisierte Peers — für NAT- oder Load-Balancer-Erreichbarkeit
internode.advertise_port int 0 Port für advertise_addr (0 = Bind-Port; erfordert advertise_addr)
internode.identity_key string Base64-kodierter privater ed25519-Schlüssel, der diesen Knoten identifiziert (inline)
internode.identity_key_file string Pfad zu einer Datei, die diesen Schlüssel enthält
internode.trusted_peer_keys map Base64-kodierter öffentlicher ed25519-Schlüssel je Knotenname, einschließlich dieses Knotens

advertise_addr/advertise_port veröffentlichen einen additiven Endpunkt in den Knoten-Metadaten, während der Bind-Endpunkt unverändert beworben bleibt, sodass Cluster mit gemischten Versionen während eines Rolling Upgrades verbunden bleiben.

Die Internode-Identität ist zwingend, sobald Clustering aktiviert ist. identity_key und identity_key_file schließen sich gegenseitig aus, und eines von beiden muss vorhanden sein; der Wert dekodiert (Standard- oder Raw-base64) entweder zu einem 32-Byte-ed25519-Seed oder zu einem 64-Byte-ed25519-Privatschlüssel. trusted_peer_keys bildet jeden Knotennamen auf den 32-Byte-ed25519-Public-Key dieses Knotens ab und muss einen Eintrag für den lokalen cluster.name enthalten, dessen Wert zur lokalen Identität passt — andernfalls schlägt der Start fehl. Siehe die Cluster-Anleitung.

Raft (Konsens)

Begrenztes Raft. Der Raft-Zustand ist standardmäßig fs-dauerhaft und wird unter raft.data_dir (Standard ~/.wippy/store) gespeichert; ein neugestarteter Knoten tritt dem Quorum dennoch von Peers wieder bei. store.kv.raft-Einträge replizieren darüber. Bootstrap ist gossip-gesteuert (Consul/Nomad bootstrap_expect-Stil).

Feld Typ Standard Beschreibung
raft.data_dir string ~/.wippy/store Verzeichnis für fs-dauerhaften Raft-Zustand und dauerhafte CRDT-Snapshots (unter <data_dir>/_sys/). Festplatten-los nur, wenn kein Pfad aufgelöst wird (kein Home-Verzeichnis und keiner gesetzt)
raft.enabled bool true Raft-Knoten betreiben; false macht diesen zum reinen Gossip-Client
raft.role string server server betreibt einen Raft-Knoten; client ist nur Gossip
raft.eligible bool true Ob dieser Knoten als Voter oder Standby ausgewählt werden darf; false hält ihn als Client außerhalb von Raft
raft.priority int 100 Voter-Auswahlpriorität (niedrigerer Wert wird bevorzugt)
raft.bootstrap_expect int 1 Initiale Quorumgröße: 0=bestehendem beitreten, 1=Einzelknoten, N=auf N berechtigte Knoten einschließlich des lokalen warten, dann Quorum bilden
raft.max_voters int 5 Voter-Obergrenze (muss ungerade sein); bis zu max_standbys weitere berechtigte Knoten werden Standbys, der Rest bleibt Client
raft.max_standbys int 4 Nicht-abstimmende Mitglieder, warm gehalten für Beförderung; Knoten jenseits voters+standbys sind keine Raft-Mitglieder
raft.reconcile_debounce duration 2s Koaleszenzfenster nach einem Gossip-Ereignis, bevor der Voter-Reconciler läuft
raft.reconcile_timeout duration 2s Schranke pro Reconcile-Durchlauf
raft.heartbeat_timeout duration 3s Follower-Leerlaufwartzeit vor dem Start einer Wahl
raft.election_timeout duration 3s Kandidaten-Wahltimeout (mindestens heartbeat)
raft.commit_timeout duration 500ms Heartbeat-Takt des Leerlauf-Leaders
raft.snapshot_threshold uint64 8192 Log-Einträge seit dem letzten Snapshot, bevor ein neuer erstellt wird
raft.snapshot_interval duration 2m Snapshot-Prüfintervall
raft.snapshot_retain int 3 Beibehaltene Snapshots
raft.trailing_logs uint64 10240 Nach einem Snapshot beibehaltene Log-Einträge
raft.max_append_entries int 16 Maximale Einträge pro AppendEntries RPC
raft.leader_probe_interval duration 3s Takt der Globale-Registry-Leader-Erreichbarkeits-Probe
raft.leader_probe_grace int 3 Aufeinanderfolgende Probe-Fehler, bevor Leader als nicht erreichbar gilt
raft.registry_backend string kv Implementierung der Cluster-Namensregistry: kv (gemeinsamer kv-Keyspace) oder fsm (dedizierte Raft-FSM)
raft.global_dissem_tombstone_retention duration 0 Wie lange der Verbreitungs-Cache globaler Namen Lösch-Tombstones behält

Einzelknoten (Entwicklung) — Clustering aktiviert, bootstrappt sich sofort:

cluster:
  enabled: true
  name: dev
  membership:
    secret_key: "d2lwcHktZG9jcy1nb3NzaXAtc2VjcmV0LTMyYnl0ZXM="
  internode:
    identity_key: "d2lwcHktZG9jcy1kZXYtbm9kZS1leGFtcGxlc2VlZCE="
    trusted_peer_keys:
      dev: "rNqImcjOzef28dzvma80mSrCW1px5LBAc5TbaYqAgm0="
  raft:
    bootstrap_expect: 1

Drei-Knoten-Voting-Cluster — jeder Knoten listet die anderen als Seeds und wartet auf alle drei vor der Quorumbildung. Jeder Knoten trägt dieselbe trusted_peer_keys-Karte und seinen eigenen privaten Schlüssel:

cluster:
  enabled: true
  name: node-1
  failure_domain: us-east-1a
  membership:
    bind_port: 7946
    join_addrs: "node-2:7946,node-3:7946"
    secret_file: /etc/wippy/cluster.key
  internode:
    identity_key_file: /etc/wippy/node-1.key
    trusted_peer_keys:
      node-1: "okmamN3PKkMpPwPBurknHy2Wi3dwp/rz+uTM2fF9aD0="
      node-2: "PWX+oOYrFdtjUxbgmTkXCFI0KEvG++ZM52HOWfDkqP8="
      node-3: "QfP0fgllbj4s95VAztTORhy3bv9mst1l0lwuUNvO/hE="
  raft:
    bootstrap_expect: 3
    max_voters: 5

Gossip-only-Client — tritt dem Cluster für Benennung/Messaging bei, betreibt nie Raft. Er braucht dennoch eine eigene Identität und muss in der Vertrauenskarte jedes Knotens auftauchen:

cluster:
  enabled: true
  name: edge-7
  membership:
    join_addrs: "node-1:7946,node-2:7946"
    secret_file: /etc/wippy/cluster.key
  internode:
    identity_key_file: /etc/wippy/edge-7.key
    trusted_peer_keys:
      node-1: "okmamN3PKkMpPwPBurknHy2Wi3dwp/rz+uTM2fF9aD0="
      node-2: "PWX+oOYrFdtjUxbgmTkXCFI0KEvG++ZM52HOWfDkqP8="
      node-3: "QfP0fgllbj4s95VAztTORhy3bv9mst1l0lwuUNvO/hE="
      edge-7: "7lzP4jBAkC3P+0jq4vtMsC45571BlVXk3mSlOD/Z0SA="
  raft:
    role: client

LSP

Language-Server-Protocol-Server für Editor-Integrationen.

Feld Typ Standard Beschreibung
enabled bool false TCP-Server aktivieren
address string :7777 TCP-Listen-Adresse
http_enabled bool false HTTP-Transport aktivieren
http_address string :7778 HTTP-Listen-Adresse
http_path string /lsp HTTP-Endpunkt-Pfad
http_allow_origin string * CORS Allowed-Origin
max_message_bytes int 8388608 Maximale Größe eingehender Nachrichten
lsp:
  enabled: true
  address: ":7777"
  http_enabled: true

Siehe: LSP-Anleitung

Netzwerkdienst

Overlay-Netzwerk-Manager (SOCKS5-, I2P-, Tailscale-Treiber).

Feld Typ Standard Beschreibung
state_dir string .wippy/net Verzeichnis für Treiber-Statusspeicherung
default_network string Standard-Netzwerk-ID, die angewendet wird, wenn Einträge network weglassen
network_service:
  state_dir: /var/lib/wippy/net
  default_network: app:tailscale

Siehe: Netzwerk-Overlays

HTTP-Dispatcher

Tuning für den gemeinsamen HTTP-Client-Pool, der von HTTP-dispatched Funktionen und ausgehenden Anfragen verwendet wird.

Feld Typ Standard Beschreibung
dispatcher.http.timeout duration 0 (kein) Timeout pro Anfrage
dispatcher.http.max_idle_conns int 0 (stdlib) Maximale Leerlaufverbindungen über alle Hosts
dispatcher.http.max_idle_per_host int 0 (stdlib) Maximale Leerlaufverbindungen pro Host
dispatcher.http.idle_conn_timeout duration 0 (stdlib) Leerlaufverbindungs-Timeout
dispatcher.http.max_clients int 0 (unbegrenzt) Maximale unterschiedliche gepoolte Clients
dispatcher:
  http:
    timeout: 30s
    max_idle_per_host: 32

Module

Modul-Registry-Client, der von wippy install/update verwendet wird.

Feld Typ Standard Beschreibung
registry_url string https://hub.wippy.ai Registry-Endpunkt
modules:
  registry_url: https://internal-registry.example.com

Erweiterungen

Native Go-Plugin-Erweiterungen, die beim Booten geladen werden (nur Unix).

Feld Typ Standard Beschreibung
enabled bool true Erweiterungen laden
paths string[] Plugin-Dateipfade (relativ zum Konfigurationsverzeichnis)
extensions:
  enabled: true
  paths:
    - ./extensions/myplugin.so

Umgebungsvariablen

Variable Beschreibung
GOMEMLIMIT Speicherlimit-Fallback, wenn das Flag --memory-limit nicht gesetzt ist (Vorrang: Flag --memory-limit > GOMEMLIMIT > Standard 1G)

Internode-TLS

Aktivieren Sie gegenseitiges TLS für das Internode-TCP-Mesh mit cluster.internode.tls. Damit wird auch der darüber transportierte Relay- und Raft-Verkehr geschützt. Ergänzen Sie die bestehende Cluster-Konfiguration:

cluster:
  internode:
    tls:
      enabled: true
      cert_file: /etc/wippy/node.crt
      key_file: /etc/wippy/node.key
      ca_file: /etc/wippy/cluster-ca.pem

TLS ist standardmäßig deaktiviert. Bei enabled: true sind alle drei nicht leeren Dateipfade erforderlich: ein PEM-Zertifikat, der passende private Schlüssel und ein PEM-CA-Bundle zur Prüfung von Server- und Client-Zertifikaten. Die Mindestversion ist TLS 1.2. Alle Peers benötigen kompatible Zertifikate und Vertrauenswurzeln. Die ed25519-Identität und die Liste vertrauenswürdiger Peer-Schlüssel bleiben erforderlich.

Unbekannte TLS-Einstellungen, ungültige Typen, fehlende oder ungültige Zugangsdaten, fehlerhafte CA-Bundles und Dateipfade ohne enabled: true verhindern den Start. Eine ungültige explizite Konfiguration fällt niemals stillschweigend auf Klartext zurück.

Siehe auch