Перейти к содержимому

Конфигурация

Wippy настраивается через файлы .wippy.yaml. Все параметры имеют разумные значения по умолчанию.

Любое значение ниже можно переопределить при запуске с помощью wippy run --set section.path=value (можно указывать несколько раз, имеет приоритет над файлом). Чтобы переопределить отдельные записи реестра, а не эти секции конфигурации, используйте секцию override: или флаг -o — см. Переопределение записей.

Управляет кодировщиком zap-логгера. CLI-флаги (-v, -c, -s) переопределяют уровень/вывод; единственная опция, управляемая через yaml, — это кодировка.

ПолеТипПо умолчаниюОписание
encodingstringconsoleКодировщик: console (человекочитаемый) или json (структурированный)
logger:
encoding: json

Управляет маршрутизацией логов среды выполнения. Вывод в консоль настраивается через флаги CLI (-v, -c, -s).

ПолеТипПо умолчаниюОписание
propagate_downstreambooltrueПередавать логи в консоль/файл
stream_to_eventsboolfalseПубликовать логи в шину событий для программного доступа
min_levelint-1Минимальный уровень: -1=debug, 0=info, 1=warn, 2=error
logmanager:
propagate_downstream: true
stream_to_events: false
min_level: 0

См.: Модуль Logger

HTTP-сервер Go pprof для профилирования CPU и памяти. Включается флагом -p или через конфиг.

ПолеТипПо умолчаниюОписание
enabledboolfalseЗапустить сервер профилировщика
addressstringlocalhost:6060Адрес прослушивания
read_timeoutduration15sТаймаут чтения HTTP
write_timeoutduration15sТаймаут записи HTTP
idle_timeoutduration60sТаймаут keep-alive
profiler:
enabled: true
address: "localhost:6060"

Доступен по адресу http://localhost:6060/debug/pprof/

Глобальное поведение безопасности. Отдельные политики определяются как записи security.policy.

ПолеТипПо умолчаниюОписание
strict_modeboolfalseЗапрещать доступ при неполном контексте безопасности
security:
strict_mode: true

См.: Система безопасности, Модуль Security

Хранилище записей и история версий. Реестр содержит все конфигурационные записи.

ПолеТипПо умолчаниюОписание
enable_historybooltrueОтслеживать версии записей
history_typestringmemoryХранилище: memory, sqlite, nil
history_pathstring.wippy/registry.dbПуть к SQLite
registry:
history_type: sqlite
history_path: /var/lib/wippy/registry.db

См.: Концепция реестра, Модуль Registry

Маршрутизация сообщений между процессами на разных нодах.

ПолеТипПо умолчаниюОписание
node_namestringlocalИдентификатор ноды этого реле
relay:
node_name: worker-1

См.: Модель процессов

Управление жизненным циклом сервисов. Контролирует внутренний управляющий почтовый ящик супервизора, используемый для диспетчеризации событий жизненного цикла.

ПолеТипПо умолчаниюОписание
host.buffer_sizeint1024Ёмкость внутреннего управляющего почтового ящика
host.worker_countint16Параллельные воркеры диспетчера
supervisor:
host:
buffer_size: 2048
worker_count: 32

См.: Супервизия

Воркеры и очереди для каждого `process.host` настраиваются в самой записи (`workers`, `queue_size`, `local_queue_size`), а не в этой глобальной секции. См. тип записи [Process Host](system/process-host.md).

Кэширование Lua VM и вычисление выражений.

ПолеТипПо умолчаниюОписание
proto_cache_sizeint60000Кэш скомпилированных прототипов
main_cache_sizeint10000Кэш main-чанков
cache.enabledboolfalseСохранять скомпилированный байткод/typecheck-кэш на диск
cache.dirstring(системный каталог кэша)Путь к каталогу кэша
cache.modestringread_writeРежим кэша: read_write, read_only, write_only
type_system.enabledboolfalseВключить статическую проверку типов
type_system.strictboolfalseСчитать предупреждения типов ошибками
lua:
proto_cache_size: 60000
cache:
enabled: true
dir: .cache/lua
type_system:
enabled: true

См.: Обзор Lua

Кэширование поиска по реестру. Используется внутренне для поиска записей.

ПолеТипПо умолчаниюОписание
query_cache_sizeint1000Кэш результатов запросов
regex_cache_sizeint100Кэш скомпилированных регулярок
finder:
query_cache_size: 2000

Распределённая трассировка и экспорт метрик через OTLP.

ПолеТипПо умолчаниюОписание
enabledboolfalseВключить OTEL
endpointstringlocalhost:4318Эндпоинт OTLP
protocolstringhttp/protobufПротокол: grpc, http/protobuf
service_namestringwippy-runtimeИдентификатор сервиса
service_versionstringТег версии сервиса
insecurebooltrueРазрешить незашифрованное OTLP-соединение
sample_ratefloat1.0Частота семплирования (0.0-1.0)
propagatorsstring[][tracecontext, baggage]Пропагаторы контекста
traces_enabledbooltrueЭкспортировать трейсы
metrics_enabledboolfalseЭкспортировать метрики
http.enabledbooltrueТрассировать HTTP-запросы
http.extract_headersbooltrueИзвлекать trace-контекст из входящих заголовков
http.inject_headersbooltrueВнедрять trace-контекст в исходящие заголовки
process.enabledbooltrueТрассировать жизненный цикл процессов
process.trace_lifecyclebooltrueВыпускать спаны для spawn/terminate
interceptor.enabledbooltrueТрассировать вызовы функций
interceptor.orderint100Приоритет перехватчика
queue.enabledbooltrueТрассировать публикацию/получение в очередях
temporal.enabledboolfalseТрассировать Temporal-воркфлоу
otel:
enabled: true
endpoint: "http://jaeger:4318"
traces_enabled: true
process:
trace_lifecycle: true

Стандартные переменные окружения OTEL (OTEL_EXPORTER_OTLP_ENDPOINT, OTEL_SERVICE_NAME, OTEL_TRACES_SAMPLER_ARG, OTEL_PROPAGATORS, OTEL_SDK_DISABLED) переопределяют соответствующие поля.

См.: Наблюдаемость

Корректное завершение работы.

ПолеТипПо умолчаниюОписание
timeoutduration30sМаксимальное ожидание остановки компонентов
shutdown:
timeout: 60s

Буфер сбора внутренних метрик.

ПолеТипПо умолчаниюОписание
buffer.sizeint10000Размер буфера метрик
interceptor.enabledboolfalseАвтоматически отслеживать вызовы функций
metrics:
buffer:
size: 20000
interceptor:
enabled: true

См.: Модуль Metrics, Наблюдаемость

Эндпоинт метрик Prometheus.

ПолеТипПо умолчаниюОписание
enabledboolfalseЗапустить сервер метрик
addressstringlocalhost:9090Адрес прослушивания
prometheus:
enabled: true
address: "0.0.0.0:9090"

Открывает эндпоинт /metrics для Prometheus.

См.: Наблюдаемость

Многонодовая кластеризация: gossip-обнаружение участников и ограниченное ядро консенсуса Raft. Архитектуру и операционную модель см. в Руководстве по кластеру; этот раздел — справочник по ключам конфигурации.

ПолеТипПо умолчаниюОписание
enabledboolfalseВключить кластеризацию
namestringhostnameИмя ноды; должно быть уникальным в кластере
failure_domainstringМетка зоны/стойки; рекламируется через gossip, чтобы voters распределялись по доменам

SWIM gossip через memberlist. Используется для обнаружения нод, обнаружения сбоев и распространения метаданных.

ПолеТипПо умолчаниюОписание
membership.bind_addrstring0.0.0.0Адрес привязки gossip
membership.bind_portint7946Порт gossip (TCP+UDP)
membership.advertise_addrstringАдрес, используемый пирами для достижения этой ноды (NAT/k8s)
membership.join_addrsstringSeed-адреса через запятую (host:port)
membership.secret_keystringКлюч шифрования gossip в base64 (встроенный)
membership.secret_filestringПуть к файлу с ключом шифрования gossip

TCP-меш, переносящий relay- и Raft-трафик между нодами. Raft работает по этому мешу (мультиплексирование через yamux); отдельного Raft-порта нет.

ПолеТипПо умолчаниюОписание
internode.bind_addrstring0.0.0.0Адрес привязки меша
internode.bind_portint0Порт меша (0 = авто: 7950-7959, затем эфемерный)
internode.auto_portbooltrueОпределить фактический порт при запуске, зафиксировать и объявить через gossip

Ограниченный Raft. Состояние Raft по умолчанию долговечно на ФС, хранится под raft.data_dir (по умолчанию ~/.wippy/store); перезапущенная нода всё равно переприсоединяется к кворуму от пиров. Записи store.kv.raft реплицируются через него. Bootstrap управляется gossip (по образцу Consul/Nomad bootstrap_expect).

ПолеТипПо умолчаниюОписание
raft.data_dirstring~/.wippy/storeКаталог для долговечного на ФС состояния Raft и долговечных снимков CRDT (под <data_dir>/_sys/). Бездисковый только когда путь не разрешается (нет домашнего каталога и ничего не задано)
raft.enabledbooltrueЗапускать Raft-ноду; false делает эту ноду только gossip-клиентом
raft.rolestringserverserver запускает Raft-ноду; client — только gossip
raft.eligiblebooltrueМожет ли эта нода быть выбрана voter
raft.priorityint100Приоритет выбора voter (меньше — предпочтительнее)
raft.bootstrap_expectint1Начальный размер кворума: 0=присоединиться к существующему, 1=одна нода, N=ждать N eligible пиров и сформировать кворум
raft.max_votersint5Максимум voters (должно быть нечётным); лишние eligible-ноды становятся standby
raft.max_standbysint4Невотирующие члены, готовые к повышению; ноды за пределами voters+standbys не являются членами Raft
raft.reconcile_debounceduration2sОкно агрегации после gossip-события перед запуском reconciler voters
raft.reconcile_timeoutduration2sОграничение на один проход reconcile
raft.heartbeat_timeoutduration3sОжидание follower в простое перед началом выборов
raft.election_timeoutduration3sТаймаут выборов кандидата (не меньше heartbeat)
raft.commit_timeoutduration500msРитм heartbeat лидера в простое
raft.snapshot_thresholduint648192Записей лога с последнего снимка перед созданием нового
raft.snapshot_intervalduration2mИнтервал проверки снимков
raft.snapshot_retainint3Хранить снимков
raft.trailing_logsuint6410240Записей лога, оставляемых после снимка
raft.max_append_entriesint16Максимум записей в одном AppendEntries RPC
raft.leader_probe_intervalduration3sПериод проверки доступности лидера глобального реестра
raft.leader_probe_graceint3Последовательных неудач проверки до признания лидера недоступным

Одна нода (разработка) — кластеризация включена, нода сразу bootstrap-ит себя:

cluster:
enabled: true
name: dev
raft:
bootstrap_expect: 1

Трёхнодовый voting-кластер — каждая нода перечисляет остальные как seed и ждёт все три перед формированием кворума:

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
raft:
bootstrap_expect: 3
max_voters: 5

Только gossip-клиент — присоединяется к кластеру для именования/обмена сообщениями, но никогда не запускает Raft:

cluster:
enabled: true
name: edge-7
membership:
join_addrs: "node-1:7946,node-2:7946"
raft:
role: client

Сервер Language Server Protocol для интеграции с редакторами.

ПолеТипПо умолчаниюОписание
enabledboolfalseЗапустить TCP-сервер
addressstring:7777Адрес прослушивания TCP
http_enabledboolfalseВключить HTTP-транспорт
http_addressstring:7778Адрес прослушивания HTTP
http_pathstring/lspПуть HTTP-эндпоинта
http_allow_originstring*Разрешённый CORS-источник
max_message_bytesint8388608Максимальный размер входящего сообщения
lsp:
enabled: true
address: ":7777"
http_enabled: true

См.: LSP

Менеджер оверлейных сетей (драйверы SOCKS5, I2P, Tailscale).

ПолеТипПо умолчаниюОписание
state_dirstring.wippy/netКаталог хранения состояния драйверов
default_networkstringID сети по умолчанию, применяемый когда в записях не указан network
network_service:
state_dir: /var/lib/wippy/net
default_network: app:tailscale

См.: Сетевые оверлеи

Настройка общего пула HTTP-клиентов, используемого HTTP-диспетчированными функциями и исходящими запросами.

ПолеТипПо умолчаниюОписание
dispatcher.http.timeoutduration0 (нет)Таймаут на запрос
dispatcher.http.max_idle_connsint0 (stdlib)Максимум простаивающих соединений по всем хостам
dispatcher.http.max_idle_per_hostint0 (stdlib)Максимум простаивающих соединений на хост
dispatcher.http.idle_conn_timeoutduration0 (stdlib)Таймаут простаивающего соединения
dispatcher.http.max_clientsint0 (без ограничений)Максимум различных клиентов в пуле
dispatcher:
http:
timeout: 30s
max_idle_per_host: 32

Клиент реестра модулей, используемый wippy install/update.

ПолеТипПо умолчаниюОписание
registry_urlstringhttps://hub.wippy.aiЭндпоинт реестра
modules:
registry_url: https://internal-registry.example.com

Нативные Go-плагины, загружаемые при старте (только Unix).

ПолеТипПо умолчаниюОписание
enabledbooltrueЗагружать расширения
pathsstring[]Пути к файлам плагинов (относительно каталога конфигурации)
extensions:
enabled: true
paths:
- ./extensions/myplugin.so
ПеременнаяОписание
GOMEMLIMITЛимит памяти (переопределяет флаг --memory-limit)