В данной инструкции мы сделаем небольшой обзор по развертыванию сервиса проведения конференцсвязи Jitsi на Linux Ubuntu / Debian.
Подготовка сервера
Установка системы видеоконференцсвязи
Настройка SSL
Аутентификация пользователей
Оптимизация для работы от 100 пользователей
Предварительная настройка
Прежде чем приступить к установке Jitsi, выполним работы по подготовке системы.
Белый IP-адрес
Для работы Jitsi необходимо наличие статического белого IP-адреса.
Через NAT данный сервис не работает, поэтому либо мы настраиваем видеоконференцию только внутри локальной сети, либо отдаем внешний адрес серверу.
Правила брандмауэра
Для корректной работы сервера видеоконференции нам нужно открыть следующие порты:
- TCP/80 — для получения и обновления бесплатных сертификатов от Let’s Encrypt.
- TCP/443 — для доступа клиентов к coturn.
- UDP/10000-20000 — для отправки/получения аудио/видео пакетов в JVB.
- TCP/4443 — для приема и передачи шифрованного трафика вызова.
Вводим команды:
iptables -I INPUT -p tcp —match multiport —dports 80,443 -j ACCEPT
iptables -I INPUT -p udp —dport 10000:20000 -j ACCEPT
iptables -I INPUT -p tcp —dport 4443 -j ACCEPT
Также нам может потребоваться открыть дополнительные порты:
- TCP/5222 — если есть дополнительный JVB или дополнительный Jibri на отдельной машине.
- TCP/5349 — для coturn, если установить порт для turn в /etc/prosody/conf.d/<домен>.cfg.lua.
- UDP/3478 — для coturn, если установить порт для turn в /etc/prosody/conf.d/<домен>.cfg.lua.
- TCP/8080 — если вам нужен доступ к Colibri REST API.
- TCP/8888 — для доступа к Jicofo REST API.
Выполняем:
iptables -I INPUT -p tcp —dport 5222 -j ACCEPT
iptables -I INPUT -p tcp —dport 5349 -j ACCEPT
iptables -I INPUT -p udp —dport 3478 -j ACCEPT
iptables -I INPUT -p tcp —dport 8080 -j ACCEPT
iptables -I INPUT -p tcp —dport 8888 -j ACCEPT
Для сохранения правил используем netfilter-persistent:
apt install iptables-persistent
netfilter-persistent save
Настройка репозиториев
В стандартных хранилищах пакетов Ubuntu нет Jitsi и необходимых для нее компонентов. Выполним необходимые настройки.
1. Добавляем репозиторий universe:
apt update
apt install software-properties-common gnupg2 curl
apt-add-repository universe
Если мы получим сообщение:
‘universe’ distribution component is already enabled for all sources.
… значит он уже есть в нашей системе. Идем дальше.
2. Также добавим репозиторий packages.prosody.im и установим его ключ:
curl -fsSL https://prosody.im/files/prosody-debian-packages.key | gpg —dearmor -o /usr/share/keyrings/prosody-debian-packages.gpg
echo «deb [signed-by=/usr/share/keyrings/prosody-debian-packages.gpg] http://packages.prosody.im/debian $(lsb_release -sc) main» > /etc/apt/sources.list.d/prosody.list
3. Установим теперь репозиторий и gpg-ключ для самого jitsi:
curl -fsSL https://download.jitsi.org/jitsi-key.gpg.key | sh -c ‘gpg —dearmor > /usr/share/keyrings/jitsi-keyring.gpg’
echo ‘deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/’ > /etc/apt/sources.list.d/jitsi-stable.list
Обновим кэш apt:
apt update
Настройка закончена.
Имя сервера
Для установки jitsi важно задать имя сервера, а также обеспечить его разрешение в локальный адрес. Для получения бесплатного сертификата от Let’s Encrypt данное имя также должно разрешаться из Интернет и вести на наш сервер по портам 80 и 443.
Выполняем команду:
hostnamectl set-hostname jitsi.dmosk.ru
* где jitsi.dmosk.ru — имя нашего сервера.
Открываем файл:
vi /etc/hosts
Добавляем строку с внешним адресом и именем сервера, например:
1.2.3.4 jitsi.dmosk.ru
Мы готовы приступить к установке сервиса видеосвязи.
Установка jitsi
Мы готовы к установке программного обеспечения из настроенных репозиториев. Для начала установим socat:
apt install socat
* socat — инструмент для переадресации запросов к сокетам c хостовой машины на клиентскую. Данный пакет рекомендуется установить до установки jitsi.
Теперь устанавливаем сам jitsi:
apt install jitsi-meet
В ходе установки система задаст несколько вопросов.
Указываем имя нашего сервера (его мы задавали при подготовке сервера):
* где jitsi.dmosk.ru — то имя, которое мы задали серверу и указали в файле hosts.
Теперь установщик предложит создать самоподписанный сертификат или использовать уже имеющийся. В нашем примере мы дадим ответ для создания сертификата:
Готово. Jitsi установлен.
Для запуска первой конференции переходим по ссылке https://jitsi.dmosk.ru, где jitsi.dmosk.ru — имя нашего сервера. Откроется веб-интерфейс (браузер отобразит ошибку безопасности из-за самоподписанного сертификата — игнорируем) и мы можем сразу перейти к созданию конференции, кликнув по Создать конференцию:
Настройка SSL
Для корректной работы сервера нужен правильный сертификат. Его можно купить или получить бесплатно от Let’s Encrypt. Рассмотрим оба варианта.
1. Бесплатный от Let’s Encrypt
В процессе установки jitsi, если мы выбрали использование сертификата Let’s Encrypt, он будет автоматически получен.
Но если при установки сертификат не был получени или мы ранее использовали свой сертификат, в Jitsi есть готовый скрипт для получения сертификата от Let’s Encrypt — запускаем его:
/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
Система потребует ввести адрес электронной почты:
Enter your email and press [ENTER]: master@dmosk.ru
После нажатия ENTER будет выполнена проверка имени хоста, который мы указали при установке (он должен вести на наш сервер по портам 80 и 443). Если проверка пройдена, мы увидим сообщение об успешном получении сертификата и путь до файлов fullchain.pem и privkey.pem.
Сертификат установлен.
2. Использование своего сертификата
Предположим, мы купили сертификат и поместили его по путям /etc/jitsi/meet/jitsi.dmosk.ru.crt (открытый ключ) и /etc/jitsi/meet/jitsi.dmosk.ru.key (закрытый).
Открываем конфигурационный файл nginx:
vi /etc/nginx/sites-enabled/$(hostname).conf
* где $(hostname) должен вернуть jitsi.dmosk.ru — имя, которое мы задали серверу.
Находим директивы ssl_certificate и ssl_certificate_key. Для них задаем правильные пути до сертификатов:
ssl_certificate /etc/jitsi/meet/jitsi.dmosk.ru.crt;
ssl_certificate_key /etc/jitsi/meet/jitsi.dmosk.ru.key;
После проверяем корректность конфигурационного файла и перезапускаем nginx:
nginx -t && nginx -s reload
Сертификат установлен.
Настройка аутентификации
По умолчанию после установки Jitsi пользователи могут заходить в систему и создавать комнаты для беседы без проверки подлинности. Для того, чтобы наша система требовала ввода логина и пароля, меняем настройку нашего сервера.
В первую очередь, откроем на редактирование конфигурационный файл компонента Prosody XMPP:
vi /etc/prosody/conf.avail/$(hostname).cfg.lua
Находим группу опций VirtualHost «<имя сервера>» и приводим к виду опции:
VirtualHost «jitsi.dmosk.ru»
— authentication = «jitsi-anonymous» — do not delete me
authentication = «internal_hashed»
…
* мы закомментировали строку с jitsi-anonymous, чтобы запретить анонимные соединения и добавили authentication = «internal_hashed», чтобы требовать аутентификацию по логину и паролю.
Также в самый низ данного файла добавим:
…
VirtualHost «guest.jitsi.dmosk.ru»
authentication = «anonymous»
c2s_require_encryption = false
* в данном примере мы определяем хост guest.jitsi.dmosk.ru для анонимных запросов. Они нужны для возможности гостевого подключения к созданным конференциям. Важно отметить, что данное имя узла является внутренним и его нам не нужно добавлять в систему NS для его разрешения в IP-адрес.
Теперь откроем файл:
vi /etc/jitsi/meet/$(hostname)-config.js
Найдем строки:
hosts: {
// XMPP domain.
domain: ‘jitsi.dmosk.ru’
* где jitsi.dmosk.ru — имя нашего узла.
Добавим ниже строку с опцией anonymousdomain:
hosts: {
// XMPP domain.
domain: ‘jitsi.dmosk.ru’
anonymousdomain: ‘guest.jitsi.dmosk.ru’,
* данной строкой мы передаем серверу инструкцию, на каком хосте выполнять аутентификацию для анонимных пользователей.
Создаем файл:
vi /etc/jitsi/jicofo/sip-communicator.properties
org.jitsi.jicofo.auth.URL=XMPP:jitsi.dmosk.ru
* где jitsi.dmosk.ru — имя нашего узла.
Перезапускаем службы:
systemctl restart jitsi-videobridge2 prosody jicofo
Создаем учетную запись для модератора (пользователя, под которым можно авторизоваться, чтобы создать комнату):
prosodyctl register admin $(hostname)
* в данном примере мы создаем пользователя admin.
После ввода команды система попросит ввести пароль для создаваемого пользователя. Придумываем и дважды его вводим.
Пробуем создать конференцию — мы должны увидеть сообщение, требующее дождаться модератора. Говорим, что мы и есть модератор:
Появится окно для ввода логина и пароля. Вводим данные для созданной учетной записи:
Мы должны получить права модератора и комната будет создана.
Оптимизация для большого числа участников
С системными настройками по умолчанию рекомендуется использовать Jitsi для 100 пользователей и меньше. Если число участников будет превышать, рекомендуется увеличить параметры:
- DefaultLimitNOFILE — лимит на количество открытых файлов.
- DefaultLimitNPROC — лимит на количество открытых процессов.
- DefaultTasksMax — максимальное число разрешенных процессов.
Открываем файл:
vi /etc/systemd/system.conf
Приводим к виду вышеописанные опции:
DefaultLimitNOFILE=65000
DefaultLimitNPROC=65000
DefaultTasksMax=65000
Применяем настройки:
systemctl daemon-reexec
Проверить применение можно командой:
systemctl show —property DefaultLimitNOFILE