В конфиг LiveKit добавлен блок `webhook`: адрес
`http://app:8080/api/v1/livekit/webhook` внутри compose-сети и ключ подписи.
Установщик передаёт ключ в рендер livekit.yaml. Так голосовые состояния
синхронизируются с SFU без опроса (AGENT.md 7.14).
- install.sh: --tls-terminated-by-proxy (ссылки https/wss без своего 80/443),
--turn-relay-host/--turn-relay-port/--turn-relay-tls-port, общий TURN_SECRET
для coturn (use-auth-secret) и LiveKit
- livekit.yaml.tpl: rtc.turn_servers с внешним релеем (udp + tls)
- секрет вычисляется один раз и сохраняется в .env
- убраны недопустимые поля (audio.min_level, audio.smooth_intervals,
video.dynacast, video.disable_simulcast) — из-за них контейнер livekit
циклически перезапускался
- набор кодеков задаётся через room.enabled_codecs: VP8 на lite/standard,
VP8+VP9+H.264+AV1 на plus/pro
- keys: {} — ключи передаются через LIVEKIT_KEYS (секрет не попадает в файл)
- smoke.sh: ветка --skip-tls больше не проверяет HTTPS, бэкап с расширением
.age больше не помечается как незашифрованный
- render_template: значения передаются через окружение (envsubst), а не
подставляются в variadic-аргументы — многострочные значения больше не
ломают разбор, неполный список не уводит bash в бесконечный цикл
- export "$pair": bash сам разбирает KEY=value (было export "${pair}")
- шаблоны переведены на ${VAR}-синтаксис, добавлен compose.test.yaml.tpl
для тестового режима установщика (--skip-tls без публикации портов)
- dry-run не требует root и работает вне Linux (проверка ОС пропускается)
- install.sh: учитываются --livekit-*-порты и --turn-*-порты в livekit.yaml,
исправлено экранирование апострофа в итоговой сводке
- scripts/debug-install.sh: трассировка установщика в контейнере