На сервере 1gb Docker Engine использует containerd-снапшоттер (driver-type: io.containerd.snapshotter.v1), а не классический overlay2. cAdvisor (проверено на v0.49.2 и свежей v0.52.1, с --docker_only и через --containerd/--containerd-namespace=moby) не может определить read-write layer контейнеров — падает с «failed to identify the read-write layer ID», метрики только по корневому cgroup, без разбивки по контейнерам. Открытая проблема совместимости, флагами не решается. Убран сервис cadvisor, job в prometheus.yml, панели «топ контейнеров» в host.json (Prometheus иначе резолвит cadvisor:8080 в никуда — Grafana показывала бы «No data» вечно). node-exporter метрики хоста (CPU/RAM/ диск/сеть) при этом покрывает полностью, без изменений. Правка конфигурации мониторинга, без изменения пользовательского поведения — версия не бампается.
19 KiB
Изменения
Формат основан на Keep a Changelog, проект придерживается семантического версионирования.
0.0.9 — 2026-07-28
Метрики CPU/RAM/диска хоста в Grafana; дефолтные подвкладки конференций и пользователей в админке.
Добавлено
- Мониторинг железа:
node-exporter(CPU/RAM/диск/сеть/load average хоста) — профиль composemonitoring, без публикации портов наружу. Новый дашборд Grafana «Хост и контейнеры». Три новых алерта Prometheus:HostMemoryLow,HostDiskLow,HostCpuHigh(пороги — под сервер1gb: 8 ГБ RAM, 4 CPU, 50 ГБ диска).cAdvisor(разбивка по контейнерам) сознательно не включён — несовместим с containerd-снапшоттером Docker Engine на1gb, см.docs/deploy/monitoring.md.
Изменено
- Админка, вкладка «Конференции»: вкладка «Все» перенесена в конец списка фильтров (после «Завершённые»), по умолчанию открываются «Запланированные».
- Админка, вкладка «Пользователи»: по умолчанию открываются «Активные» (было «Все»).
0.0.8 — 2026-07-27
Админка: несколько mail-доменов для регистрации, фильтр и поиск по команде в списке пользователей, исправлен баг сохранения настроек.
Исправлено
- Сохранение любой настройки инстанса блокировалось ошибкой «уровень AI
недоступен», даже если AI-модуль (транскрибация/суммаризация) выключен и
пользователь уровень не трогал — фронт отправлял в
PUT /admin/settingsвесь набор полей целиком, включая уже сохранённыйai_level. Теперь доступность уровня проверяется только при его фактической смене; фронт отправляет в запросе лишь реально изменённые поля.
Добавлено
- «Эталон mail-домена» в настройках инстанса поддерживает несколько доменов вместо одного — регистрация проходит с email с любого домена из списка. Старое значение из БД (один домен) читается без миграции и переписывается в новый формат при первом же сохранении.
- В списке пользователей админки — вкладки «Активные»/«Заблокированные»/ «Все» перед полем поиска.
- Поиск по пользователям учитывает и название команды — пользователи без команды по-прежнему остаются в общей выдаче.
0.0.7 — 2026-07-27
Настройки устройств: выбор аудиовывода и компактная шторка на мобильном.
Добавлено
- Выбор устройства аудиовывода (динамики/наушники/Bluetooth-гарнитура) в «Настройках устройств» рядом с микрофоном и камерой. Выбор переживает перезаход в комнату. Список показывается только там, где браузер умеет им управлять (Android Chrome и другие Chromium на десктопе/мобильном); в iOS Safari поддержки нет вовсе — вместо списка короткая подсказка, что переключение звука там на стороне системы.
- На мобильной ширине «Настройки устройств» открываются компактной шторкой снизу вместо модалки по центру экрана — закрывается свайпом вниз, тапом вне панели или Escape. На десктопе поведение не изменилось.
Примечания по эксплуатации
- Управлять маршрутизацией звука (принудительно включить громкую связь или
перекинуть звук на Bluetooth) из браузера нельзя в принципе — это делает
ОС, веб-страница может только выбрать устройство вывода там, где браузер
это позволяет (
setSinkId).
0.0.6 — 2026-07-27
Управление фокусом основного окна конференции: участника можно закрепить, а без закрепления окно само следует за говорящим. Плюс общий футер на всех страницах сервиса.
Добавлено
- Закрепление участника в основном окне — кнопка-булавка на плитке. Закреплённый участник держит фокус, даже когда говорят другие; повторное нажатие снимает закрепление, как и выход закреплённого из комнаты. Закреплённая плитка помечена рамкой и подсвеченной булавкой; на тач-устройствах булавка видна без наведения.
- Общий футер на всех страницах, кроме комнаты конференции: версия инстанса и копирайт со ссылкой на автора.
Изменения
- Основное окно конференции следует за активным говорящим, а не удерживает выбранного один раз участника. Фокус не переключается на короткие реплики (удержание 1.2 с) и не уводится с идущей демонстрации экрана. Среди нескольких одновременно говорящих крупно показывается тот, у кого включена камера. Мини-плеер (Document PiP) работает как раньше.
- Демонстрация экрана по-прежнему главнее всего: она перебивает и закрепление, а после её завершения фокус возвращается на закреплённого участника.
- Футер админки заменён общим компонентом; в брендовой панели экранов входа строка копирайта с захардкоженным годом убрана — год теперь берётся текущий.
Исправлено
- Календарь: «г.» после года убрана и из подписей дней в самой сетке (видны как всплывающая подсказка и в accessibility-дереве) — в недельном и месячном виде. В 0.0.4 это было исправлено только для подписи периода.
0.0.5 — 2026-07-27
Контактный адрес инстанса: настраиваемый адрес для ответов на письма
(уходят от no-reply@) и кнопка проверки почтовой конфигурации из
админки.
Добавлено
- Настройка «Контактный адрес» в админке (вкладка «Настройки») — email
подставляется в заголовок
Reply-Toписем подтверждения регистрации, приглашений на конференции и саммари; при выключенной настройкеReply-Toне проставляется, поведение как раньше. - Кнопка «Отправить тестовое письмо» — синхронная проверка почтовой конфигурации без регистрации фиктивного пользователя. Получатель по умолчанию — email текущего администратора, можно указать другой. Результат виден сразу: успех либо текст ошибки транспорта (сервер недоступен/получатель отклонён), без логина и пароля SMTP в ответе.
0.0.4 — 2026-07-26
Календарь конференций: перестроен в раскладку «календарь во всю ширину плюс модальные окна» — карточки событий разгружены, подробности вынесены во всплывающее окно.
Изменения
- Форма создания и редактирования конференции больше не занимает постоянную
колонку справа, а открывается в модальном окне — по кнопке «Новая
конференция», по карандашику на карточке события или из информационного
окна. Добавлен общий хук
useModalDismiss(закрытие по Escape и возврат фокуса на элемент, из которого окно открыли). - Блок календаря занимает всю ширину страницы.
- Карточка события в сетке содержит только название (обрезается многоточием и больше не вылезает за границы ячейки) и — у организатора — кнопку редактирования. Время, номер и статус переехали в информационное окно.
- Клик по карточке события всегда открывает информационное окно, в том числе для своих конференций: редактирование стало отдельным действием.
- Информационное окно вхождения дополнено статус-бейджем и кнопкой «Редактировать» для организатора.
Исправления
- Подпись периода в недельном и месячном виде больше не содержит «г.»
(форматирование через
Intl.DateTimeFormatвместо локали FullCalendar).
0.0.3 — 2026-07-26
Мобильная версия: адаптивная вёрстка для узких экранов на ключевых экранах сервиса, найденная и поправленная по итогам ручного прохода по мобильному интерфейсу.
Исправления
- Вход/регистрация (
AuthLayout): заголовок «Ваша инфраструктура» вылезал за край брендовой панели на узких экранах — кегль теперь адаптивно уменьшается (clamp()) вместо обрезки. - Комната конференции: топбар и тулбар не помещались на мобильной ширине (тулбар с 8 кнопками физически шире экрана, крайние кнопки были обрезаны без возможности до них докрутить). На мобильном тулбар сокращён до микрофона/камеры/устройств/чата/выхода (демонстрация экрана, полноэкранный режим и мини-окно скрыты — редко нужны с телефона), в топбаре скрыты название конференции и строка статуса, а чип «№ … / Пригласить» оставлен — с телефона он нужнее.
- Админка: заголовок и 4 вкладки раздела не помещались в ширину (вкладки переносятся в 2 ряда, поясняющий текст под заголовком скрыт на мобильном); таблицы «Конференции» и «Пользователи» обрезались вбок — на мобильном в них остаются только ключевые колонки, название конференции стало кнопкой, открывающей то же окно редактирования, что и раньше (туда же добавлена кнопка удаления — на мобильном столбец действий скрыт).
- Подключение к конференции (
/join): кнопка «Ввести другую ссылку или номер» на экране завершённой конференции вылезала за карточку на узких экранах (единственная кнопка на этом флоу без формы-обёртки, задающей ей ширину, а.btnдержитwhite-space: nowrap).
0.0.2 — 2026-07-26
Релиз воспроизводимого боевого развёртывания: конфигурация деплоя перенесена в репозиторий как источник истины, устранён инцидент безопасности, добавлена пошаговая инструкция для девопсов.
Безопасность
postgresиredisсняты с публикации на0.0.0.0и привязаны к127.0.0.1(docker писал DNAT в обходufw, порты были открыты в интернет).- Порты
backend,livekit-signaling,prometheus,grafana,llmтакже переведены на loopback — наружу остаются только80/443/7881(+ UDP54000-54100). - Для
redisвключена обязательная аутентификация (--requirepass); пароль проброшен во всех потребителей (backend, worker, exporter, livekit, egress).
Развёртывание и инфраструктура
nginx/coturn/livekit: TLS на 443, http→https редирект, ACME-webroot; конфиги вынесены в*.templateи рендерятся черезdeploy/render-templates.sh(envsubst). Секреты — только из.env, обязательны (${VAR:?}), без небезопасных дефолтов.--env-file .envдобавлен во все вызовыdocker compose(без него compose не подхватывал корневой.envи брал dev-дефолты — корень бага «конференции не работают у других» иWARN: LIVEKIT_API_KEY not set).- Мониторинг развязан от опционального LLM:
job=llm/алертLlmDownзакомментированы для профилей безllm/llm-gpu. install.sh: fail-fast валидация — установка останавливается с понятной ошибкой, если на боевом домене остались dev-плейсхолдеры (example.com,ws://localhost,devkeyи т.п.), вместо тихого подъёма нерабочего прода.install.sh: флаг--monitoring(Grafana/Prometheus раньше не поднимались ни в одном пресете)..env.exampleпокрывает все параметры деплоя; дефолтные профили —media,monitoring.
Исправления
nginx:/openapi.jsonбольше не перехватывается SPA-фолбэком, а отдаётся схемой backend.- Предупреждение в
.env.example:LIVEKIT_PUBLIC_URLв HTTPS-проде обязан бытьwss://.
Документация
- Добавлено
docs/deploy/DEPLOYMENT.md— полное руководство от голой Ubuntu 24 до рабочегоhttps://<домен>: SSL,.env, профили, траблшутинг, доступ к мониторингу через ssh-туннель, описание панелей, runbook включения транскрибации/суммаризации. Ссылки добавлены вREADME.md. docs/deploy/install.md: задокументирован флаг--monitoring.
Примечания по эксплуатации
- На боевом сервере исправлен certbot deploy-hook (
nginx -s reload→restart): без этого после автопродления сертификата nginx продолжал бы отдавать старый. - TURN-раздача клиентам (
rtc.turn_servers+ TURN/TLS на 443) остаётся опциональной — кросс-сетевое медиа проверено вживую и работает без неё; нужна только для экстремального NAT (CGNAT/жёсткий корпоративный firewall).
0.0.1
Первоначальная версия VidConf.