Конфигурация
Wippy настраивается через файлы .wippy.yaml. Все параметры имеют разумные значения по умолчанию.
Любое значение ниже можно переопределить при запуске с помощью wippy run --set section.path=value (можно указывать несколько раз, имеет приоритет над файлом). Чтобы переопределить отдельные записи реестра, а не эти секции конфигурации, используйте секцию override: или флаг -o — см. Переопределение записей.
Композиция конфигурации {#config-composition}
--config можно повторять; файлы компонуются слева направо по одной и той же схеме:
wippy run --config .wippy.yaml --config .wippy.local.yaml
- Более поздние файлы переопределяют совпадающие значения и сохраняют всё остальное.
- Каждый явно указанный файл должен существовать. Без
--configстандартный.wippy.yamlнеобязателен. - Первый файл задаёт директорию, относительно которой разрешаются относительные пути.
- Имена файлов не несут зарезервированного смысла; кроме файла по умолчанию ничего не обнаруживается автоматически.
Конфигурация применяется по порядку: композиция файлов, затем выбор --profile, затем переопределения --set. Для приложений, запускаемых из pack-файлов, упакованные значения по умолчанию среды выполнения лежат ниже всего перечисленного (см. Публикация значений по умолчанию среды выполнения).
Профили {#profiles}
Файл конфигурации может объявлять именованные оверлеи в секции profiles:. Тело каждого профиля повторяет обычные секции конфигурации; выбор через --profile <name> накладывает эти значения на объединённую базовую конфигурацию:
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можно повторять; профили компонуются слева направо, после композиции файлов и перед--set. Неизвестное имя — ошибка.- Значения объединяются по каждому листу (последняя запись выигрывает). Сама секция
profiles:вырезается из итоговой конфигурации. - Секция
disableподдерживает операции над списками внутри профилей —namespaces.add,namespaces.remove,entries.add,entries.remove— так что профиль может корректировать базовый список вместо его замены. - Ссылки
${name}интерполируются из объединённой секцииvars:. Ссылки на переменные окружения ОС внутри vars профилей не допускаются; используйте${env:NAME}в базовой конфигурации, разрешаемый при загрузке файла.
wippy run, test и pack принимают --profile; run list, install, update, lint и registry также принимают его для профилей рабочего пространства (вместе с --set). Приложения могут поставлять профили внутри pack-файлов — см. Публикация профилей.
Logger
Управляет кодировщиком zap-логгера. CLI-флаги (-v, -c, -s) переопределяют уровень/вывод; единственная опция, управляемая через yaml, — это кодировка.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
encoding |
string | console | Кодировщик: console (человекочитаемый) или json (структурированный) |
logger:
encoding: json
Log Manager
Управляет маршрутизацией логов среды выполнения. Вывод в консоль настраивается через флаги CLI (-v, -c, -s).
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
propagate_downstream |
bool | true | Передавать логи в консоль/файл |
stream_to_events |
bool | false | Публиковать логи в шину событий для программного доступа |
min_level |
int | 0 (-1 при -v) |
Минимальный уровень: -1=debug, 0=info, 1=warn, 2=error. CLI записывает этот ключ из своих флагов после чтения файла, поэтому значение из файла игнорируется; меняйте его через --set logmanager.min_level=<n> |
logmanager:
propagate_downstream: true
stream_to_events: false
См.: Модуль Logger
Profiler
HTTP-сервер Go pprof для профилирования CPU и памяти. Включается флагом -p или через конфиг.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled |
bool | false | Запустить сервер профилировщика |
address |
string | localhost:6060 | Адрес прослушивания |
read_timeout |
duration | 15s | Таймаут чтения HTTP |
write_timeout |
duration | 15s | Таймаут записи HTTP |
idle_timeout |
duration | 60s | Таймаут keep-alive |
profiler:
enabled: true
address: "localhost:6060"
Доступен по адресу http://localhost:6060/debug/pprof/
Security
Глобальное поведение безопасности. Отдельные политики определяются как записи security.policy.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
strict_mode |
bool | true | Запрещать доступ при неполном контексте безопасности |
security:
strict_mode: false
См.: Система безопасности, Модуль Security
Registry
Хранилище записей и история версий. Реестр содержит все конфигурационные записи.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enable_history |
bool | true | Отслеживать версии записей |
history_type |
string | memory | Хранилище: memory, sqlite, postgres, nil |
history_path |
string | .wippy/registry.db | Путь к файлу SQLite (используется при history_type: sqlite) |
history_dsn |
string | DSN Postgres (используется при history_type: postgres) |
|
history_schema |
string | Имя схемы Postgres (используется при history_type: postgres) |
|
event_wait_timeout |
duration | 30s | Ожидание подтверждения от слушателя на каждую операцию при применении изменений реестра |
dispatch_internal_kinds |
string[] | [registry.entry, ns.dependency, ns.requirement, ns.definition] |
Типы записей, обрабатываемые внутренне, а не рассылаемые слушателям компонентов |
dependency_resolve_timeout |
duration | 0 (нет) | Ограничение на разрешение зависимостей |
dependency_download_timeout |
duration | 0 (нет) | Ограничение на каждую загрузку модуля и запрос URL для загрузки |
dependency_lock_path |
string | найденный wippy.lock |
Файл блокировки, который читает и пишет обработчик зависимостей |
dependency_vendor_dir |
string | <каталог lock>/<directories.modules>/vendor |
Каталог со скачанными паками модулей |
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
См.: Концепция реестра, Модуль Registry
Artifact
Корень вывода для материализованных артефактов времени сборки.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
materialization_root |
string | родительский каталог vendor-каталога зависимостей | Принадлежащий приложению корень, под которым каждый формат артефакта пишет своё поддерево |
artifact:
materialization_root: build/wippy
Workspace
Локальные замены модулей, ключом служит org/module. Значения — каталоги; относительные пути разрешаются относительно каталога первого файла --config, а null отключает замену, унаследованную из более раннего слоя конфигурации или профиля.
workspace:
replacements:
acme/http: ../local-http
acme/sql: null
Замены никогда не записываются в wippy.lock. См. Локальная разработка с заменами.
Relay
Маршрутизация сообщений между процессами на разных нодах.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
node_name |
string | производный ID для экземпляра | Идентификатор ноды этого реле (по умолчанию: UUIDv5 от machine-id/hostname + рабочий каталог; переопределяется через WIPPY_NODE_ID / WIPPY_RELAY_NODE_NAME) |
relay:
node_name: worker-1
См.: Модель процессов
Supervisor
Управление жизненным циклом сервисов. Контролирует внутренний управляющий почтовый ящик супервизора, используемый для диспетчеризации событий жизненного цикла.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
host.buffer_size |
int | 1024 | Ёмкость внутреннего управляющего почтового ящика |
host.worker_count |
int | 16 | Параллельные воркеры диспетчера |
supervisor:
host:
buffer_size: 2048
worker_count: 32
См.: Супервизия
Lua Runtime
Кэширование Lua VM и вычисление выражений.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
cache.enabled |
bool | type_system.enabled |
Сохранять скомпилированный байткод/typecheck-кэш на диск; следует за type_system.enabled, если не задано явно |
cache.dir |
string | .wippy/cache/lua |
Путь к каталогу кэша (относительно каталога конфигурации/рабочего каталога) |
cache.mode |
string | readwrite |
Режим кэша: readwrite (по умолчанию), readonly, off; неизвестные значения трактуются как readwrite |
cache.compile.enabled |
bool | true | Сохранять скомпилированный байткод (при cache.enabled) |
cache.typecheck.enabled |
bool | true | Сохранять результаты проверки типов (при cache.enabled) |
cache.max_bytes |
int | 1073741824 | Верхняя граница размера дискового кэша в байтах |
cache.max_entries |
int | 20000 | Максимальное число записей в кэше |
cache.prune_interval |
int | 256 | Число записей между проходами очистки кэша |
type_system.enabled |
bool | false | Включить статическую проверку типов |
type_system.strict |
bool | false | Считать предупреждения типов ошибками |
invalidation_wait_timeout |
duration | registry.event_wait_timeout (30s) |
Ожидание подтверждения инвалидации кода после изменения записи |
eval.max_steps |
int | 10000 | Бюджет шагов планировщика по умолчанию для запуска eval; отрицательные значения отклоняются |
eval.cache_size |
int | 256 | Число записей кэша скомпилированных программ для вычисляемого исходника |
eval.cache_ttl |
duration | 0 (без истечения) | Время жизни скомпилированной программы в кэше |
lua:
cache:
enabled: true
dir: .cache/lua
type_system:
enabled: true
См.: Обзор Lua
Scheduler
Разделение ядер для среды исполнения WASM. Когда включено, reserved_cores CPU отводятся под выполнение WASM, а остальные обслуживают планировщик акторов; некорректное разделение (например, зарезервированных ядер больше, чем доступно) логируется и игнорируется.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
wasm_isolation.enabled |
bool | false | Разделять ядра между WASM и работой акторов |
wasm_isolation.reserved_cores |
int | 1 | Ядер, зарезервированных под выполнение WASM |
scheduler:
wasm_isolation:
enabled: true
reserved_cores: 2
Finder
Кэширование поиска по реестру. Используется внутренне для поиска записей.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
query_cache_size |
int | 1000 | Кэш результатов запросов |
regex_cache_size |
int | 100 | Кэш скомпилированных регулярок |
finder:
query_cache_size: 2000
OpenTelemetry
Распределённая трассировка и экспорт метрик через OTLP.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled |
bool | false | Включить OTEL |
endpoint |
string | localhost:4318 | Эндпоинт OTLP |
protocol |
string | http/protobuf | Протокол: grpc, http/protobuf |
service_name |
string | wippy-runtime | Идентификатор сервиса |
service_version |
string | Тег версии сервиса | |
insecure |
bool | true | Разрешить незашифрованное OTLP-соединение |
sample_rate |
float | 1.0 | Частота семплирования (0.0-1.0) |
propagators |
string[] | [tracecontext, baggage] |
Пропагаторы контекста |
traces_enabled |
bool | true | Экспортировать трейсы |
metrics_enabled |
bool | false | Экспортировать метрики |
http.enabled |
bool | true | Трассировать HTTP-запросы |
http.extract_headers |
bool | true | Извлекать trace-контекст из входящих заголовков |
http.inject_headers |
bool | true | Внедрять trace-контекст в исходящие заголовки |
process.enabled |
bool | true | Трассировать жизненный цикл процессов |
process.trace_lifecycle |
bool | true | Выпускать спаны для spawn/terminate |
interceptor.enabled |
bool | true | Трассировать вызовы функций |
interceptor.order |
int | 100 | Приоритет перехватчика |
queue.enabled |
bool | true | Трассировать публикацию/получение в очередях |
temporal.enabled |
bool | false | Трассировать Temporal-воркфлоу |
otel:
enabled: true
endpoint: "http://jaeger:4318"
traces_enabled: true
process:
trace_lifecycle: true
Стандартные переменные окружения OTEL (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) переопределяют соответствующие поля.
См.: Наблюдаемость
Shutdown
Корректное завершение работы.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
timeout |
duration | 30s | Максимальное ожидание остановки компонентов |
shutdown:
timeout: 60s
Metrics
Буфер сбора внутренних метрик.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
buffer.size |
int | 10000 | Размер буфера метрик |
interceptor.enabled |
bool | true | Автоматически отслеживать вызовы функций |
metrics:
buffer:
size: 20000
interceptor:
enabled: true
См.: Модуль Metrics, Наблюдаемость
Prometheus
Эндпоинт метрик Prometheus.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled |
bool | false | Запустить сервер метрик |
address |
string | Адрес прослушивания; должен быть задан явно при enabled: true, иначе сервер метрик не запускается |
|
max_cardinality |
int | 1024 | Число различных наборов меток, удерживаемых для метрики (LRU); 0 или меньше означает значение по умолчанию |
prometheus:
enabled: true
address: "0.0.0.0:9090"
Открывает эндпоинт /metrics для Prometheus, а также /livez.
См.: Наблюдаемость
Cluster
Многонодовая кластеризация: gossip-обнаружение участников и ограниченное ядро консенсуса Raft. Архитектуру и операционную модель см. в Руководстве по кластеру; этот раздел — справочник по ключам конфигурации.
Верхний уровень
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled |
bool | false | Включить кластеризацию |
name |
string | hostname | Имя ноды; должно быть уникальным в кластере |
failure_domain |
string | Метка зоны/стойки; рекламируется через gossip, чтобы voters распределялись по доменам | |
kv_crdt_tombstone_retention |
duration | 0 | Возраст, после которого tombstone-записи удалений store.kv.crdt утилизируются; 0 отключает сборку по возрасту |
kv_crdt_tombstone_gc_alive_peers |
bool | false | Использовать текущий состав живых участников как множество подтверждений tombstone |
Membership (gossip)
SWIM gossip через memberlist. Используется для обнаружения нод, обнаружения сбоев и распространения метаданных.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
membership.bind_addr |
string | 0.0.0.0 | Адрес привязки gossip |
membership.bind_port |
int | 7946 | Порт gossip (TCP+UDP) |
membership.advertise_addr |
string | Адрес, используемый пирами для достижения этой ноды (NAT/k8s) | |
membership.join_addrs |
string | Seed-адреса через запятую (host:port) |
|
membership.secret_key |
string | Ключ шифрования gossip в base64 (встроенный) | |
membership.secret_file |
string | Путь к файлу с ключом шифрования gossip | |
membership.gossip_interval |
duration | 500ms | Период распространения gossip |
membership.push_pull_interval |
duration | 5s | Период полной синхронизации состояния |
membership.dead_node_reclaim_time |
duration | 30s | Когда имя/адрес мёртвой ноды могут быть переиспользованы |
membership.probe_interval |
duration | 1s | Цикл проб обнаружения сбоев |
membership.probe_timeout |
duration | 200ms | Ожидание ack на одну пробу |
membership.tcp_timeout |
duration | 1s | Таймаут резервной TCP-пробы |
membership.suspicion_mult |
int | 3 | Множитель таймаута подозрения |
Gossip-секрет обязателен. Задайте membership.secret_key или membership.secret_file (при обоих побеждает файл); без того и другого компонент кластера не стартует. Значение кодируется в base64.
Четыре ключа проб наследуют значения memberlist по умолчанию для локальной сети, если не заданы; повышайте их для каналов с высокой задержкой (например, probe_interval: 2s, probe_timeout: 500ms, suspicion_mult: 5).
Internode (транспорт)
TCP-меш, переносящий relay- и Raft-трафик между нодами. Raft работает по этому мешу через internode request/reply; отдельного Raft-порта нет.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
internode.bind_addr |
string | 0.0.0.0 | Адрес привязки меша |
internode.bind_port |
int | 0 | Порт меша (0 = авто: 7950-7959, затем эфемерный) |
internode.auto_port |
bool | true | Определить фактический порт при запуске, зафиксировать и объявить через gossip |
internode.advertise_addr |
string | Дополнительный relay-эндпоинт (IP или DNS-имя), публикуемый для обновлённых пиров — для достижимости за NAT или балансировщиком | |
internode.advertise_port |
int | 0 | Порт для advertise_addr (0 = порт привязки; требует advertise_addr) |
internode.identity_key |
string | Приватный ключ ed25519 в base64, идентифицирующий эту ноду (встроенный) | |
internode.identity_key_file |
string | Путь к файлу с этим ключом | |
internode.trusted_peer_keys |
map | Публичный ключ ed25519 в base64 на каждое имя ноды, включая эту |
advertise_addr/advertise_port публикуют дополнительный эндпоинт в метаданных ноды, при этом эндпоинт привязки продолжает объявляться без изменений — кластеры со смешанными версиями сохраняют связность во время rolling-обновления.
Идентичность internode обязательна всегда, когда включена кластеризация. identity_key и identity_key_file взаимоисключающи, и один из них должен присутствовать; значение декодируется (стандартный или raw base64) либо в 32-байтный seed ed25519, либо в 64-байтный приватный ключ ed25519. trusted_peer_keys сопоставляет каждому имени ноды её 32-байтный публичный ключ ed25519 и должен содержать запись для локального cluster.name, значение которой совпадает с локальной идентичностью, — иначе запуск завершается ошибкой. См. Руководство по кластеру.
Raft (консенсус)
Ограниченный Raft. Состояние Raft по умолчанию долговечно на ФС, хранится под raft.data_dir (по умолчанию ~/.wippy/store); перезапущенная нода всё равно переприсоединяется к кворуму от пиров. Записи store.kv.raft реплицируются через него. Bootstrap управляется gossip (по образцу Consul/Nomad bootstrap_expect).
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
raft.data_dir |
string | ~/.wippy/store |
Каталог для долговечного на ФС состояния Raft и долговечных снимков CRDT (под <data_dir>/_sys/). Бездисковый только когда путь не разрешается (нет домашнего каталога и ничего не задано) |
raft.enabled |
bool | true | Запускать Raft-ноду; false делает эту ноду только gossip-клиентом |
raft.role |
string | server | server запускает Raft-ноду; client — только gossip |
raft.eligible |
bool | true | Может ли эта нода быть выбрана voter |
raft.priority |
int | 100 | Приоритет выбора voter (меньше — предпочтительнее) |
raft.bootstrap_expect |
int | 1 | Начальный размер кворума: 0=присоединиться к существующему, 1=одна нода, N=ждать N eligible пиров и сформировать кворум |
raft.max_voters |
int | 5 | Максимум voters (должно быть нечётным); лишние eligible-ноды становятся standby |
raft.max_standbys |
int | 4 | Невотирующие члены, готовые к повышению; ноды за пределами voters+standbys не являются членами Raft |
raft.reconcile_debounce |
duration | 2s | Окно агрегации после gossip-события перед запуском reconciler voters |
raft.reconcile_timeout |
duration | 2s | Ограничение на один проход reconcile |
raft.heartbeat_timeout |
duration | 3s | Ожидание follower в простое перед началом выборов |
raft.election_timeout |
duration | 3s | Таймаут выборов кандидата (не меньше heartbeat) |
raft.commit_timeout |
duration | 500ms | Ритм heartbeat лидера в простое |
raft.snapshot_threshold |
uint64 | 8192 | Записей лога с последнего снимка перед созданием нового |
raft.snapshot_interval |
duration | 2m | Интервал проверки снимков |
raft.snapshot_retain |
int | 3 | Хранить снимков |
raft.trailing_logs |
uint64 | 10240 | Записей лога, оставляемых после снимка |
raft.max_append_entries |
int | 16 | Максимум записей в одном AppendEntries RPC |
raft.leader_probe_interval |
duration | 3s | Период проверки доступности лидера глобального реестра |
raft.leader_probe_grace |
int | 3 | Последовательных неудач проверки до признания лидера недоступным |
raft.registry_backend |
string | kv | Реализация кластерного реестра имён: kv (общее пространство ключей kv) или fsm (выделенный Raft FSM) |
raft.global_dissem_tombstone_retention |
duration | 0 | Как долго кэш распространения глобальных имён хранит tombstone-записи удалений |
Одна нода (разработка) — кластеризация включена, нода сразу bootstrap-ит себя:
cluster:
enabled: true
name: dev
membership:
secret_key: "d2lwcHktZG9jcy1nb3NzaXAtc2VjcmV0LTMyYnl0ZXM="
internode:
identity_key: "d2lwcHktZG9jcy1kZXYtbm9kZS1leGFtcGxlc2VlZCE="
trusted_peer_keys:
dev: "rNqImcjOzef28dzvma80mSrCW1px5LBAc5TbaYqAgm0="
raft:
bootstrap_expect: 1
Трёхнодовый voting-кластер — каждая нода перечисляет остальные как seed и ждёт все три перед формированием кворума. Каждая нода несёт одну и ту же карту trusted_peer_keys и собственный приватный ключ:
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-клиент — присоединяется к кластеру для именования/обмена сообщениями, но никогда не запускает Raft. Ему тоже нужна собственная идентичность, и он должен присутствовать в доверенной карте каждой ноды:
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 для интеграции с редакторами.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled |
bool | false | Запустить TCP-сервер |
address |
string | :7777 | Адрес прослушивания TCP |
http_enabled |
bool | false | Включить HTTP-транспорт |
http_address |
string | :7778 | Адрес прослушивания HTTP |
http_path |
string | /lsp | Путь HTTP-эндпоинта |
http_allow_origin |
string | * | Разрешённый CORS-источник |
max_message_bytes |
int | 8388608 | Максимальный размер входящего сообщения |
lsp:
enabled: true
address: ":7777"
http_enabled: true
См.: LSP
Сетевой сервис
Менеджер оверлейных сетей (драйверы SOCKS5, I2P, Tailscale).
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
state_dir |
string | .wippy/net | Каталог хранения состояния драйверов |
default_network |
string | ID сети по умолчанию, применяемый когда в записях не указан network |
network_service:
state_dir: /var/lib/wippy/net
default_network: app:tailscale
См.: Сетевые оверлеи
HTTP Dispatcher
Настройка общего пула HTTP-клиентов, используемого HTTP-диспетчированными функциями и исходящими запросами.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
dispatcher.http.timeout |
duration | 0 (нет) | Таймаут на запрос |
dispatcher.http.max_idle_conns |
int | 0 (stdlib) | Максимум простаивающих соединений по всем хостам |
dispatcher.http.max_idle_per_host |
int | 0 (stdlib) | Максимум простаивающих соединений на хост |
dispatcher.http.idle_conn_timeout |
duration | 0 (stdlib) | Таймаут простаивающего соединения |
dispatcher.http.max_clients |
int | 0 (без ограничений) | Максимум различных клиентов в пуле |
dispatcher:
http:
timeout: 30s
max_idle_per_host: 32
Модули
Клиент реестра модулей, используемый wippy install/update.
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
registry_url |
string | https://hub.wippy.ai | Эндпоинт реестра |
modules:
registry_url: https://internal-registry.example.com
Расширения
Нативные Go-плагины, загружаемые при старте (только Unix).
| Поле | Тип | По умолчанию | Описание |
|---|---|---|---|
enabled |
bool | true | Загружать расширения |
paths |
string[] | Пути к файлам плагинов (относительно каталога конфигурации) |
extensions:
enabled: true
paths:
- ./extensions/myplugin.so
Переменные окружения
| Переменная | Описание |
|---|---|
GOMEMLIMIT |
Лимит памяти (переопределяет флаг --memory-limit) |
TLS между узлами
Включите взаимный TLS для TCP-mesh между узлами через cluster.internode.tls. Он также защищает передаваемый по этой mesh трафик relay и Raft. Добавьте в существующую конфигурацию кластера:
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 отключён. При enabled: true обязательны все три непустых пути: PEM-сертификат, соответствующий закрытый ключ и PEM-набор CA для проверки сертификатов сервера и клиента. Минимальная версия — TLS 1.2. Настройте совместимые сертификаты и доверенные корни на всех соединяющихся узлах. Идентификатор ed25519 и карта доверенных ключей узлов по-прежнему обязательны.
Неизвестные настройки TLS, неверные типы, отсутствующие или некорректные учётные данные, некорректные наборы CA и пути без enabled: true приводят к ошибке запуска. Некорректная явная конфигурация никогда не вызывает скрытый переход к незашифрованному соединению.
См. также
- Справочник CLI — параметры командной строки
- Руководство по кластеру — архитектура и операции кластеризации
- Типы записей — все типы записей
- Наблюдаемость — логирование, метрики, трассировка