diff --git a/.env.example b/.env.example index 5357ad7..92a0334 100644 --- a/.env.example +++ b/.env.example @@ -122,7 +122,7 @@ SMTP_TIMEOUT_S=30 # --- Версия инстанса (релиз v0.0.1) --- # install.sh копирует значение из корневого файла VERSION при каждой # установке/обновлении — руками менять не нужно. -VIDCONF_VERSION=0.0.21 +VIDCONF_VERSION=0.0.22 # --- Профили compose. Дефолт ниже (`media,monitoring`) — только для ручного # `docker compose up` БЕЗ install.sh: медиа (LiveKit+coturn) + мониторинг, diff --git a/CHANGELOG.md b/CHANGELOG.md index 0002fb8..76de26b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,32 @@ Формат основан на [Keep a Changelog](https://keepachangelog.com/ru/1.1.0/), проект придерживается [семантического версионирования](https://semver.org/lang/ru/). +## [0.0.22] — 2026-08-02 + +TURN over TLS (5349) — для клиентов из сетей, где наружу открыт только 443. + +### Добавлено +- coturn слушает TLS на `5349` (сертификат Let's Encrypt, обновляется + автоматически). Включается одним ключом `TURN_TLS_HOST` в `.env` (домен + сертификата, НЕ IP) — пусто оставляет прежнее поведение без единого следа + в рендеренных конфигах. +- LiveKit объявляет клиентам запись `protocol: tls` в `rtc.turn_servers` + (последней в списке, как самый дорогой фолбэк) — без анонса включённый + TLS был бы бесполезен: именно так уже случалось с обычным TURN до 0.0.14 + (сервис работал healthy, но не обслужил ни одной аллокации). +- Новый init-контейнер `coturn-certs-init`: копирует fullchain/privkey из + `/etc/letsencrypt` в отдельный volume под правами `644` — coturn + (`nobody:nogroup`, без root-фазы в entrypoint) не может прочитать + оригинальный ключ (`root`, `0600`), а права на хосте ослаблять нельзя. +- Deploy-hook certbot дополнительно перекопирует сертификат и перезапускает + `coturn` при продлении — без этого TLS-TURN тихо остановился бы + обслуживать новые TLS-хендшейки примерно через 60 дней. + +### Не сделано +- TURN over `443` — недостижимо без SNI-мультиплексора: порт уже занят + nginx (Docker port-publish), а coturn слушает в `network_mode: host` и не + может разделить с ним один и тот же сокет. + ## [0.0.21] — 2026-08-02 Рычаги нагрузки медиа в админке: потолок качества публикации и лимит плиток. diff --git a/VERSION b/VERSION index 236c7ad..fe059cc 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.0.21 +0.0.22 \ No newline at end of file diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 09eb8c3..f4feda6 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -89,7 +89,7 @@ services: MEDIA_ROOT: ${MEDIA_ROOT:-/app/media} # Версия инстанса (релиз v0.0.1) — install.sh копирует значение # из файла VERSION (корень репозитория) в .env; отдаётся в GET /api/health. - VIDCONF_VERSION: ${VIDCONF_VERSION:-0.0.21} + VIDCONF_VERSION: ${VIDCONF_VERSION:-0.0.22} # Число процессов uvicorn (см. backend/Dockerfile). Дефолт 2 рассчитан # на 4-ядерный сервер, где ядра делятся с LiveKit. Поднимая значение, # проверьте бюджет соединений с БД: каждый воркер держит свой пул