MAATRIX / Блог / Jitsi Meet на Ubuntu 24.04: пошаговая установка

Jitsi Meet на Ubuntu 24.04: пошаговая установка

MAATRIX

Zoom режут по лимиту в 40 минут на бесплатном тарифе, а корпоративные VPN-политики иногда блокируют сторонние сервисы конференций целиком. Jitsi Meet решает обе проблемы: это open-source платформа для видеозвонков, которая работает прямо в браузере — участникам не нужно ничего устанавливать, а вам не нужно платить за место в чужом сервисе. Разворачиваем свой инстанс на Ubuntu 24.04 с нуля — от установки до первого звонка.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Что такое Jitsi Meet и зачем его хостить самому

Jitsi Meet — это набор из нескольких компонентов, которые вместе дают видеоконференцию с чатом, демонстрацией экрана и записью:

  • Jicofo (Jitsi Conference Focus) — управляет конференциями, решает, кто с кем соединяется.
  • Jitsi Videobridge (JVB) — селективный маршрутизатор медиапотоков (SFU), через него идёт вся аудио- и видеотрафик.
  • Prosody — XMPP-сервер, обеспечивает сигналинг между участниками.
  • jitsi-meet-web — веб-интерфейс на React, то, что видит пользователь в браузере.

Готовый deb-репозиторий Jitsi ставит всё это одним пакетом jitsi-meet с автоматической настройкой связей между компонентами — руками собирать конфиги JVB↔Prosody не придётся.

Зачемself-hosted вариант, если есть meet.jit.si (публичный сервер самих разработчиков)? Три причины: контроль над данными (конференция не проходит через чужую инфраструктуру), отсутствие лимитов и throttling на пиковой нагрузке публичного сервера, и возможность встроить свой брендинг и авторизацию. Для команды из 5-20 человек, которая проводит созвоны каждый день, отдельный сервер окупается уже тем, что не приходится зависеть от чужой доступности.

Требования к серверу и подготовка

Jitsi не capризен к диску и процессору — узкое место всегда сеть, потому что видеотрафик идёт через JVB на сервере, а не напрямую между участниками (кроме P2P-режима для звонков 1-на-1).

Минимальные и рекомендуемые параметры:

ПараметрМинимум (до 10 участников)Рекомендуется (до 35-50)
CPU2 vCPU4 vCPU
RAM2 GB4-8 GB
Диск20 GB SSD40 GB SSD
Канал10 Мбит/с50-100 Мбит/с
ОСUbuntu 24.04 LTSUbuntu 24.04 LTS

Ориентир по трафику: одна видео-сессия в среднем качестве — это примерно 2-3 Мбит/с на участника в пике (входящий + исходящий суммарно через JVB). Это грубая оценка, реальная нагрузка зависит от разрешения, битрейта и того, сколько участников включили камеру одновременно — на слабом канале лучше сразу закладывать запас.

Перед установкой понадобится:

  1. Домен (или поддомен), указывающий A-записью на IP сервера — Jitsi настраивается на конкретное доменное имя, IP без домена не подойдёт из-за требований Let's Encrypt.
  2. Открытые порты: 80/tcp и 443/tcp (веб и SSL), 10000/udp (медиапоток JVB), опционально 4443/tcp как резервный канал, если UDP заблокирован у клиента.
  3. Свежая Ubuntu 24.04 с обновлёнными пакетами.

Если домен ещё не привязан к серверу, сначала разберитесь с DNS — это отдельная тема, разобранная в статье про настройку домена и DNS с нуля на Ubuntu 24.04.

Обновляем систему и ставим базовые зависимости:

apt update && apt upgrade -y
apt install -y curl gnupg2 apt-transport-https

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Установка Jitsi Meet из официального репозитория

Jitsi Meet ставится не из стандартных репозиториев Ubuntu, а из собственного APT-репозитория проекта — так гарантируется актуальная версия и правильная связка компонентов.

Добавляем ключ и репозиторий:

curl -sL https://download.jitsi.org/jitsi-key.gpg.key | gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/' \
  | tee /etc/apt/sources.list.d/jitsi-stable.list
apt update

Ubuntu 24.04 идёт с Java по умолчанию не всегда самой свежей версии, которую ожидает Jicofo — на практике репозиторий Jitsi сам подтягивает нужный OpenJDK как зависимость пакета, руками ставить Java обычно не требуется.

Запускаем установку:

apt install -y jitsi-meet

В процессе установки появится текстовый мастер с двумя вопросами:

  1. Hostname — вводите ваш домен (например, meet.example.com), тот самый, что указывает на IP сервера.
  2. SSL-сертификат — выбирайте пункт "Let's Encrypt certificates (Recommended)", он же автоматически настроит и обновление сертификата через certbot.

Если на этапе Let's Encrypt мастер попросит email — укажите реальный, на него будут приходить уведомления об истечении сертификата (хотя обновление настроено автоматически, email — запасной канал оповещения при сбое).

После завершения установки Jitsi уже поднят и слушает 80/443. Проверить статус сервисов:

systemctl status prosody jicofo jitsi-videobridge2 nginx

Все четыре должны быть в состоянии active (running).

Firewall и сетевые порты

Открываем нужные порты в UFW — без этого JVB не сможет принимать медиапоток и звонки будут «зависать» на этапе подключения:

ufw allow 80/tcp
ufw allow 443/tcp
ufw allow 10000/udp
ufw allow 4443/tcp    # резервный TCP-канал для медиа, если UDP недоступен клиенту
ufw enable
ufw status

Порт 10000/udp — это то, через что реально идёт видео и звук. Если он закрыт на файрволе облачного провайдера (не только на сервере, но и в security group/панели управления), участники будут видеть друг друга в списке, но без картинки и звука. Если у вас на сервере уже настроен UFW под другие сервисы — общий подход к базовой настройке фаервола разобран в статье про UFW на Ubuntu 24.04.

Отдельный нюанс — NAT и облачные провайдеры. Если сервер стоит за NAT с проброшенным портом (не характерно для обычной аренды VPS с белым IP, но встречается в некоторых конфигурациях), JVB нужно явно сообщить его публичный и приватный адрес в /etc/jitsi/videobridge/sip-communicator.properties:

org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=10.0.0.5
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=203.0.113.10

При аренде VPS с публичным IP «в лоб» (без NAT) эта настройка не нужна — параметр можно не трогать.

Проверка первого звонка

Открываем в браузере https://ваш-домен — должна открыться главная страница Jitsi с полем для названия комнаты. Вводите любое имя (например, test-call) и жмите Enter — вы попадаете в комнату как первый и единственный участник.

Для полноценной проверки нужен второй участник:

  • Откройте ссылку на ту же комнату с другого устройства (телефон, другой браузер, попросите коллегу).
  • Проверьте видео и звук в обе стороны.
  • Проверьте демонстрацию экрана (значок в нижней панели).
  • Проверьте текстовый чат сбоку.

Если видео не идёт, но аудио и чат работают — почти всегда это порт 10000/udp, закрытый где-то на пути (файрвол облака, роутер клиента с жёсткой блокировкой UDP). В таком случае Jitsi должен автоматически переключиться на резервный TCP-канал 4443, если он открыт — иногда с заметной задержкой на переключение.

Полезная диагностика прямо в звонке: значок статистики соединения (обычно три точки → "Manage video quality" или клик по имени участника → "Connection info") показывает используемый транспорт, битрейт и потери пакетов — по этим цифрам понятно, где узкое место.

Базовая настройка: авторизация и ограничение создания комнат

По умолчанию любой человек с ссылкой на ваш домен может создать новую комнату — для публичного демо это нормально, но для рабочего сервера обычно нужна авторизация хотя бы на создание комнат (зайти в уже созданную комнату можно и без пароля, если так настроено).

Включаем авторизацию через внутренний список пользователей (secure domain):

prosodyctl register admin ваш-домен.com пароль_админа

Затем в /etc/prosody/conf.avail/ваш-домен.com.cfg.lua меняем метод аутентификации виртуального хоста конференций с anonymous на internal_plain:

VirtualHost "ваш-домен.com"
    authentication = "internal_plain"

И в /etc/jitsi/meet/ваш-домен.com-config.js указываем, что аутентификация обязательна для создания комнаты:

// в секции config
  hosts: {
      // ...
  },

Проще и надёжнее — прогнать официальный скрипт, который сам расставит нужные настройки авторизации:

/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh   # уже выполнено мастером

(этот конкретный скрипт — только для сертификата; для secure domain в актуальных версиях Jitsi достаточно вручную поправить два файла выше и перезапустить сервисы).

После правок конфигов — обязательный рестарт:

systemctl restart prosody jicofo jitsi-videobridge2

Теперь при попытке зайти в несуществующую комнату Jitsi запросит логин/пароль у того, кто хочет её создать — уже существующие участники подключаются свободно по ссылке.

Обслуживание: обновления, логи, бэкап конфигов

Jitsi обновляется как обычный APT-пакет:

apt update && apt upgrade jitsi-meet jicofo jitsi-videobridge2 prosody

Перед крупным обновлением стоит проверять changelog проекта — иногда мажорные версии меняют формат конфигов, и после апгрейда полезно свериться, не добавились ли новые обязательные параметры.

Логи компонентов, если что-то не так:

journalctl -u jicofo -f
journalctl -u jitsi-videobridge2 -f
tail -f /var/log/prosody/prosody.log

Что стоит бэкапить регулярно (это конфиги, не база данных — Jitsi по умолчанию не хранит историю чатов или записи на сервере без отдельной настройки Jibri):

/etc/jitsi/
/etc/prosody/
/etc/nginx/sites-available/ваш-домен.com.conf

Простой скрипт для архивации перед изменениями:

#!/bin/bash
DATE=$(date +%Y%m%d)
tar -czf /root/jitsi-backup-$DATE.tar.gz /etc/jitsi /etc/prosody /etc/nginx/sites-available/

Продление сертификата Let's Encrypt настраивается автоматически на этапе установки через cron/systemd timer certbot — проверить, что таймер активен, можно командой systemctl list-timers | grep certbot. Если сертификат когда-то не обновился, разбор типичных причин — в статье «SSL-сертификат не обновился».

Веб-часть Jitsi отдаётся через встроенный nginx, который ставится вместе с пакетом — если у вас на сервере уже крутятся другие сайты за отдельным reverse-proxy, стоит свериться с общими принципами настройки в статье про nginx как reverse proxy на Ubuntu 24.04, чтобы не столкнуться с конфликтом на 443-м порту.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США, Франция и РФ. Оплата картой РФ и по СБП.

Арендовать сервер

Нужны сами нейросети для контента?

Генерируйте изображения, видео и озвучку нейросетями на falapi.io — десятки моделей в одном окне. Оплата картой РФ и по СБП.

Частые вопросы

Сколько человек выдержит один сервер на 4 vCPU / 8 GB RAM?

Ориентировочно 30-50 участников в одной конференции при среднем качестве видео — но это очень грубая оценка: реальная цифра зависит от того, сколько участников одновременно включают камеру, разрешения потоков и качества сети у самих участников. Для больших вебинаров (сотни зрителей с одним спикером) нужна отдельная схема с YouTube Live/streaming или incrementальным масштабированием JVB.

Можно ли записывать звонки?

Да, через отдельный компонент Jibri, который рендерит конференцию и сохраняет видео или стримит на YouTube/RTMP. Jibri разворачивается отдельно (желательно на отдельном сервере или контейнере) и не входит в базовую установку пакета jitsi-meet — это отдельная, более тяжёлая настройка.

Нужен ли мощный сервер для 5-10 постоянных пользователей?

Нет, 2 vCPU / 2-4 GB RAM хватает с запасом. Основной ресурс, который стоит закладывать заранее — это именно сетевой канал, а не CPU.

Работает ли Jitsi без домена, только по IP?

Технически прикрутить самоподписанный сертификат к IP можно, но браузеры и сама медиасигнализация Jitsi рассчитаны на доменное имя с валидным SSL — без него часть функций (доступ к камере/микрофону через HTTPS) браузер просто заблокирует. Домен обязателен.

Чем Jitsi отличается от аналогов вроде BigBlueButton?

Jitsi проще в установке и легче по ресурсам, но BigBlueButton заточен под обучение (доска, опросы, брейкаут-комнаты из коробки). Если нужны именно звонки и скриншеринг без образовательных фич — Jitsi достаточно и разворачивается быстрее.

Что делать, если видео тормозит у части участников?

Проверить исходящий канал сервера в момент созвона (iftop или мониторинг трафика), а также попросить проблемного участника переключиться на аудио-режим или закрыть видео — Jitsi поддерживает адаптивное качество, но при перегруженном канале сервера деградация всё равно ощутима.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →