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

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

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

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

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 приводят к ошибке запуска. Некорректная явная конфигурация никогда не вызывает скрытый переход к незашифрованному соединению.

См. также