Задача
Мне нужен был свой сервис видеоконференций: надёжный, защищённый, без подписок и без чужих лимитов на время и число участников, с запасом по масштабированию. И не просто «видео работает» — конференции должны создаваться автоматически через API, а не руками в чужом личном кабинете: чтобы ссылку на встречу можно было завести прямо в CRM, отправить в рассылку по почте и в телеграм, и чтобы записи потом хранились и управлялись так же программно, а не выгружались вручную из чужого облака.
Готовые облачные сервисы решают половину задачи — саму видеосвязь. Вторую половину — управление через API, автоматизацию и интеграцию с остальной инфраструктурой — из них выжать намного сложнее, либо это стоит отдельных денег сверх обычного тарифа.
Что перебрал, прежде чем осесть на своём
Перед тем как разворачивать что-то своё, я сначала посмотрел на готовые сервисы — благо их достаточно.
- Zoom — самый узнаваемый вариант, но в бесплатном тарифе встреча ограничена по времени, а часть функций (запись, полная история, расширенное управление) закрыта платной подпиской. Данные при этом обрабатываются на серверах провайдера — своей инфраструктуры не остаётся;
- Яндекс Телемост — бесплатен и без лимита по времени для базовых функций, но полностью привязан к экосистеме одного провайдера: настроить серверную архитектуру под свои нужды или управлять конференциями через открытый API — нельзя, только в рамках того, что предлагает сам сервис;
- у обоих вариантов — общее ограничение: это чужая инфраструктура. Автоматизация, интеграция с CRM, гибкое управление записями — либо недоступны вовсе, либо превращаются в надстройку поверх чужого закрытого API.
Главное преимущество Jitsi Meet
Jitsi Meet — открытая (open source) платформа видеоконференций. Ключевое отличие от Zoom и Яндекс.Телемоста — полная независимость: собственный сервер разворачивается на своей инфраструктуре, без обязательной регистрации и без привязки к экосистеме одного провайдера. Это даёт максимальную конфиденциальность и технологическую свободу — сервер настраивается под задачу, а не подстраивается под правила чужого сервиса.
- Полная бесплатность. В отличие от Zoom, у Jitsi нет жёстких лимитов на время конференции в базовой версии и ограничений по числу участников для «бесплатных» пользователей — в разумных пределах мощности собственного сервера;
- Отсутствие платных подписок. Демонстрация экрана, чат, запись встречи — весь функционал доступен сразу, без оформления премиум-аккаунта и без разблокировки функций за отдельную плату.
Сравнение с Яндекс.Телемост и Zoom
- Против Яндекс.Телемоста: Jitsi не привязывает к экосистеме одного провайдера — это технологическая независимость и свобода настраивать серверную архитектуру под конкретные задачи бизнеса, а не под то, что предусмотрел один вендор;
- Против Zoom: в Jitsi нет платных тарифов с блокировкой функций. И если Zoom (в платных версиях) обрабатывает данные на корпоративных серверах провайдера, то Jitsi позволяет хранить и обрабатывать данные локально, на собственном сервере.
Решение: свой видеосервер на Jitsi
Jitsi Meet строится из трёх частей: сервер сигнализации (Prosody/XMPP), оркестратор конференций (Jicofo) и видеомост (JVB), который сводит потоки участников. Всё разворачивается на собственном сервере — получается личный видеосервис без чужого облака и без ограничений вендора.
Сервер я поднял на уже имеющемся VPS — отдельного железа под видеосервис не потребовалось. Ключевой нюанс коробочной установки: по умолчанию Jitsi открыт всем — любой, кто знает или подберёт имя комнаты, может в неё зайти. Для защищённого сервиса это неприемлемо, поэтому доступ я полностью перевёл на токены.
Управление конференциями через API
Главная ценность решения — не в самой видеосвязи (она у любого сервиса приватна, пока ссылку никому не передают), а в том, что конференциями можно управлять программно:
- конференция создаётся автоматически через API — без захода в чей-то личный кабинет и без ручного клика «создать встречу»;
- ссылка на встречу заводится прямо в CRM как часть карточки сделки или клиента — и оттуда же уходит в рассылку по email и в телеграм, без ручного копирования;
- записи встреч доступны и управляются через тот же API — их можно прикрепить к той же карточке в CRM, выгрузить или удалить программно, а не искать в чужом облачном хранилище.
Доступ по токенам
Схема справа показывает путь ссылки от создания конференции до входа в комнату. Механика в двух словах:
- сервер сигнализации я перевёл в режим токен-авторизации — без подписанного токена нельзя ни зайти в комнату, ни создать новую;
- при создании конференции через API сам сервис генерирует одноразовый JWT-токен: в нём зашиты имя комнаты, срок жизни ссылки и роль участника (обычный гость или модератор — тот, кто вправе управлять встречей);
- комната — одноразовая: у каждой встречи своё уникальное имя, комнаты никогда не переиспользуются, поэтому «просроченная» ссылка ведёт в пустоту, даже если кто-то её сохранил.
Отдельно я заметил нюанс, который легко упустить: сама токен-проверка стоит на уровне подключения к видеосвязи, а вот посадочная веб-страница сервиса по умолчанию открыта всем — зайти на неё и увидеть форму «ввести имя комнаты» может кто угодно, токен для этого не нужен. Поэтому доступ я закрыл ещё и на уровне веб-сервера: без токена в ссылке страница комнаты вообще не отдаётся. Двойная проверка — и на входе на сайт, и на входе в саму видеосвязь.
Встречи записываются автоматически
Сервис умеет не только пускать по токену, но и сам записывать встречу — на стороне сервера, средствами компонента-рекордера, входящего в стек Jitsi. Запись стартует и останавливается вместе со встречей и уходит в хранилище на том же сервере — без сторонних сервисов записи и без ограничений на длительность или количество сохранённых видео, характерных для облачных тарифов.
Результат
В итоге я получил видеосервис уровня «свой Zoom», полностью под контролем: конференции создаются и управляются через API, инфраструктура своя, а ограничения — только те, что задал сам себе, а не тарифным планом стороннего вендора.
Стек
Вся связка — на одном VPS, без дополнительного облака и без затрат на видеоинфраструктуру сверх аренды сервера.
Вопросы и ответы
Чем свой Jitsi лучше готового Zoom или Телемоста?
Не «лучше» вообще, а лучше для конкретной задачи: когда конференциями нужно управлять программно — создавать через API, интегрировать с CRM, автоматически рассылать ссылки и работать с записями. У облачных сервисов такого уровня контроля через открытый API обычно нет.
Разве приватность не одинаковая у всех сервисов?
Да, если ссылку никому не передавать — встреча приватна и в Zoom, и в Телемосте, и в Jitsi. Разница не в приватности, а в управлении: у своего сервера можно программно создавать комнаты, выдавать одноразовые токены и работать с записями — то, что в чужом облаке недоступно или сильно ограничено.
Что мешает просто переслать ссылку третьему лицу?
Токен привязан к конкретной одноразовой комнате и живёт ограниченное время. Даже если ссылку переслали, она перестаёт работать по истечении срока, а комната повторно ни для какой другой встречи не используется.
Насколько это дороже облачного видеосервиса?
Дешевле: конференции идут на сервере, который и так арендуется под другие задачи, без отдельной подписки на видеосервис. Дополнительная плата — только если нагрузка вырастет настолько, что понадобится отдельная машина под видеомост.
А если участников станет много одновременно?
Видеомост (JVB) масштабируется горизонтально — при росте нагрузки добавляются дополнительные инстансы моста.
Пошагово
- Событие в CRM или на сайте инициирует запрос к API — нужна конференция.
- API создаёт одноразовую комнату и подписывает JWT-токен на неё.
- Ссылка с токеном автоматически уходит по email и в телеграм — вход только по ней.
- Сервер проверяет токен на входе на страницу и на входе в саму видеосвязь.
- Встреча идёт и автоматически записывается; по окончании комната больше не используется, запись доступна через API.