Jitsi Meet
| Компоненты Jitsi | |
|---|---|
| Jitsi Meet | Веб-приложение на базе технологии WebRTC. Для сигналинга использует XMPP через BOSH с использованием собственного XEP.
В системах на базе Альт оно расположено в пакете jitsi-meet-web. Для ведущих мобильных платформ (iOS, Google Play, F-Droid) доступны приложения на React Native. |
| Jicofo | XMPP-компонент, модератор видеоконференций. Клиенты договариваются о связи, заходя в общую XMPP-комнату с ним, и обмениваются там XMPP-сообщениями. Имеет HTTP API /about/health для опроса о состоянии сервиса. |
| Jitsi Videobridge | Ключевой компонент системы, SFU. Он передаёт видео и аудио между участниками, осуществляя роль посредника, терминирует RTP/RTCP, определяет доступные рамки битрейта в обе стороны на конкретного клиента. Имеет свой внутренний HTTP API для мониторинга (/colibri/debug).
Это SFU, не MCU — он не занимается транскодингом и поэтому потребляет относительно мало CPU. К системе ВКС Jitsi можно подключить несколько видеобриджей — тогда каждой новой конференции будет поставлен в соответствие один из них. |
| Jigasi | Шлюз для участия в Jitsi-конференциях через SIP-телефонию. |
| Jibri | Appliance для записи конференции. Использует Selenium с Chromium внутри (и тянет за собой зависимости на Xorg, icewm, модуль ядра snd-aloop). Ведёт себя как ничего не передающий участник записываемой конференции, но Jicofo и клиенты его держат на особом положении: не отображают в списке участников и т. п. Также, как и JVB, Jigasi, заходит по отдельному аккаунту в специальную XMPP-комнату для рекордеров. Их можно (и нужно!) воткнуть несколько, если планируется вести запись нескольких конференций одновременно. |
Как развернуть?
Minimal Viable Product
Вам потребуются пакеты prosody, jitsi-meet-prosody, jitsi-meet-web, jitsi-meet-web-config, jicofo, jitsi-videobridge. Для размещения нужны:
- jitsi-videobridge: хост с доступными портами 10000/udp, 4443/tcp и хорошей пропускной способностью (рекомендуется минимум 100Mbps симметрично);
- веб-сервер: хост с доступным портом 443/tcp. Веб-сервер должен поддерживать HTTPS;
- xmpp-сервер: хост с доступным портом 5280/tcp для работы XMPP-over-HTTP (BOSH).
Установите пакеты:
# apt-get install prosody jitsi-meet-prosody jitsi-meet-web jitsi-meet-web-config jicofo jitsi-videobridge
Теоретически компоненты могут размещаться на разных машинах; на практике мы не рекомендуем устанавливать prosody и jicofo на разные машины — это может привести к низкой производительности сервиса и большим колебаниям задержки связи.
При настройке будем предполагать, что в качестве базового доменного имени выбрано $DOMAIN.
На всех используемых машинах убедитесь, что команда
ping "$(hostname)"
успешно срабатывает: уходят запросы и приходят ответы.
Конфигурация Jitsi Meet ALT 11.x
Установите имя хоста системы на доменное имя, которое будет использоваться для Jitsi:
# hostnamectl set-hostname jitsi2
Установите локальное сопоставление имени хоста сервера с IP-адресом 127.0.0.1, для этого допишите в файл /etc/hosts строку:
127.0.0.1 jitsi2.test.alt jitsi2
Настройка XMPP-сервера (prosody)
В конфигурационный файл /etc/prosody/prosody.cfg.lua внесите следующие изменения:
plugin_paths = { "/usr/share/jitsi-meet/prosody-plugins/" }
pidfile = "/run/prosody/prosody.pid";
interfaces = { "127.0.0.1" }
modules_enabled = {
"roster";
"saslauth";
"disco";
"external_services";
"reservations";
"version";
"uptime";
"time";
"ping";
"pep";
"posix";
"admin_shell";
"tls";
};
-- disallow_s2s = true;
log = {
"*syslog";
}
-- VirtualHost "example.com"
------ Additional config files ------
-- For organizational purposes you may prefer to add VirtualHost and
-- Component definitions in their own config files. This line includes
-- all config files in /etc/prosody/conf.d/
Include "conf.d/*.cfg.lua"
-- Разрешить незашифрованные соединения для тестов
c2s_require_encryption = false
allow_unencrypted_plain_auth = true
Создайте конфигурационный файл Prosody для домена (например, /etc/prosody/conf.d/jitsi2.test.alt.cfg.lua) со следующим содержимым:
VirtualHost "jitsi2.test.alt"
authentication = "anonymous"
modules_enabled = {
"bosh";
"ping";
"pubsub";
"websocket";
}
c2s_require_encryption = false
allow_unencrypted_plain_auth = true
VirtualHost "auth.jitsi2.test.alt"
authentication = "internal_plain"
modules_enabled = {
"bosh";
}
c2s_require_encryption = false
allow_unencrypted_plain_auth = true
sasl_backend = "internal_plain"
sasl_mechanisms = {"PLAIN"}
Component "conference.jitsi2.test.alt" "muc"
storage = "memory"
modules_enabled = {
"ping";
"muc_mam";
}
restrict_room_creation = true
muc_room_default_public_jids = true
admins = { "focus@auth.jitsi2.test.alt" } -- Add focus as admin
Component "internal.auth.jitsi2.test.alt" "muc"
storage = "memory"
admins = { "focus@auth.jitsi2.test.alt" } -- Add focus as admin
-- Additional global settings
consider_component_secure = true
consider_bosh_secure = true
c2s_require_encryption = false
admins = { "focus@auth.jitsi2.test.alt" } -- Add focus as admin
unlimited_jids = {
"focus@auth.jitsi2.test.alt",
"jvb@auth.jitsi2.test.alt",
}
Component "focus.jitsi2.test.alt" "client_proxy"
target_address = "focus@auth.jitsi2.test.alt"
Сгенерируйте сертификаты для виртуальных хостов jitsi2.test.alt и auth.jitsi2.test.alt:
# prosodyctl cert generate jitsi2.test.alt
# prosodyctl cert generate auth.jitsi2.test.alt
Зарегистрируйте сертификаты в системе, как доверенные (сертификаты нужно регистрировать там, где устанавливается Jicofo):
# ln -s /var/lib/prosody/jitsi2.test.alt.crt /etc/pki/ca-trust/source/anchors/
# ln -s /var/lib/prosody/auth.jitsi2.test.alt.crt /etc/pki/ca-trust/source/anchors/
# update-ca-trust
Зарегистрируйте пользователя focus (аккаунт focus@auth.jitsi2.test.alt):
# prosodyctl register focus auth.jitsi2.test.alt secret2
где secret2 — достаточно длинный пароль.
Пропишите прокси для пользователя focus:
# prosodyctl mod_roster_command subscribe focus.jitsi2.test.alt focus@auth.jitsi2.test.alt
Добавьте службу prosody в автозапуск и запустите её:
# systemctl enable --now prosody
Настройка Jicofo
Jicofo подключается к XMPP-серверу и как внешний XMPP-компонент, и как пользовательский аккаунт с JID focus@auth.jitsi2.test.alt.
В файле /etc/jitsi/jicofo/config укажите:
# Jitsi Conference Focus settings
JICOFO_AUTH_DOMAIN=auth.jitsi2.test.alt
JICOFO_AUTH_USER=focus
JICOFO_AUTH_PASSWORD=secret2
JAVA_SYS_PROPS="-Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc/jitsi
-Dnet.java.sip.communicator.SC_HOME_DIR_NAME=jicofo
-Dnet.java.sip.communicator.SC_LOG_DIR_LOCATION=/var/log/jitsi
-Djava.util.logging.config.file=/etc/jitsi/jicofo/logging.properties
-Dconfig.file=/etc/jitsi/jicofo/jicofo.conf"
где в строке JICOFO_AUTH_PASSWORD=secret2 укажите пароль пользователя focus.
В файле /etc/jitsi/jicofo/jicofo.conf укажите:
jicofo {
xmpp {
client {
xmpp-domain = "jitsi2.test.alt"
domain = "auth.jitsi2.test.alt"
username = "focus"
password = "secret2"
use-tls = false
disable-certificate-verification = true
client-proxy = "focus.jitsi2.test.alt"
}
}
bridge {
brewery-jid = "JvbBrewery@internal.auth.jitsi2.test.alt"
}
health {
enabled = true
}
}
Добавьте службу jicofo в автозапуск и запустите её:
# systemctl enable --now jicofo
Проверьте подключение jicifo к XMPP-серверу:
# curl -i localhost:8888/about/health
HTTP/1.1 500 Internal Server Error
Date: Tue, 30 Dec 2025 10:18:51 GMT
Content-Type: application/json
Content-Length: 56
No operational bridges available (total bridge count: 0)
500 и сообщением No operational bridges available. Если в ответе сообщение об ошибке иного рода — следует проверить настройки и связь между prosody и jicofo.
Настройка Jitsi-videobridge
Заведите на XMPP-сервере аккаунт jvb@auth.jitsi2.test.alt:
# prosodyctl register jvb auth.jitsi2.test.alt secret3
Замените содержимое файла /etc/jitsi/videobridge/config на следующее:
# Jitsi Videobridge settings
# extra options to pass to the JVB daemon
JVB_OPTS="--apis=,"
# adds java system props that are passed to jvb (default are for home and logging config file)
JAVA_SYS_PROPS="-Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc/jitsi
-Dnet.java.sip.communicator.SC_HOME_DIR_NAME=videobridge
-Dnet.java.sip.communicator.SC_LOG_DIR_LOCATION=/var/log/jitsi
-Djava.util.logging.config.file=/etc/jitsi/videobridge/logging.properties
-Dconfig.file=/etc/jitsi/videobridge/jvb.conf"
В файле /etc/jitsi/videobridge/jvb.conf укажите:
videobridge {
health {
require-valid-address = false
}
http-servers {
private {
port = 8083
tls-port = -1
host = 127.0.0.1
}
}
stats {
enabled = true
transports = [
{ type = "muc" }
]
}
apis {
rest {
enabled = true
}
xmpp-client {
configs {
shard {
hostname = "localhost"
domain = "auth.jitsi2.test.alt"
username = "jvb"
password = "secret3"
muc_jids = "JvbBrewery@internal.auth.jitsi2.test.alt"
muc_nickname = "jvb-mid-123"
disable_certificate_verification = true
security_mode = "disabled"
}
}
}
}
}
password = "secret3" укажите пароль пользователя jvb.
Очистите содержимое файла /etc/jitsi/videobridge/sip-communicator.properties:
# true > /etc/jitsi/videobridge/sip-communicator.properties
Добавьте службу jitsi-videobridge в автозапуск и запустите её:
# systemctl enable --now jitsi-videobridge
Проверьте, подключается ли jicofo к jitsi-videobridge:
# curl -i localhost:8888/about/health
HTTP/1.1 200 OK
Date: Tue, 30 Dec 2025 10:33:18 GMT
Content-Length: 0
Если всё сделано правильно, jicofo на healthcheck-запрос будет отдавать HTTP-код 200.
Настройка веб-приложения Jitsi Meet
Получение SSL/TLS-сертификата
Для работы Jitsi Meet требуется валидный SSL-сертификат.
Создание самоподписанного сертификата:
- создайте корневой ключ:
# openssl genrsa -out rootCA.key 2048
- создайте корневой сертификат:
# openssl req -x509 -new -key rootCA.key -days 10000 \
-out rootCA.crt -subj "/C=RU/ST=Russia/L=Moscow/CN=SuperPlat CA Root"
- сгенерируйте ключ:
# openssl genrsa -out jitsi2.test.alt.key 2048
- создайте запрос на сертификат (обязательно укажите домен):
# openssl req -new -key jitsi2.test.alt.key -out jitsi2.test.alt.csr \
-subj "/C=RU/L=Moscow/CN=jitsi2.test.alt"
- подпишите запрос на сертификат корневым сертификатом:
# openssl x509 -req -in jitsi2.test.alt.csr -CA rootCA.crt -CAkey rootCA.key \
-CAcreateserial -out jitsi2.test.alt.crt -days 5000
Signature ok
subject=C = RU, CN = jitsi2.test.alt
Getting CA Private Key
Положите ключ и сертификат в каталог /etc/jitsi/meet/:
# cp jitsi2.test.alt.crt /etc/jitsi/meet/
# cp jitsi2.test.alt.key /etc/jitsi/meet/
Настройка конфигурации клиента
В пакете jitsi-meet-web-config есть примеры конфигурации для веб-клиента (*-config.js) и веб-сервера.
Создайте файл /etc/jitsi/meet/jitsi2.test.alt-config.js на основе /usr/share/jitsi-meet-web-config/config.js:
# cp /usr/share/jitsi-meet-web-config/config.js /etc/jitsi/meet/jitsi2.test.alt-config.js
Отредактируйте файл /etc/jitsi/meet/jitsi2.test.alt-config.js в соответствии с настройками серверной части:
[...]
var config = {
// Connection
//
hosts: {
// XMPP domain.
domain: 'jitsi2.test.alt',
muc: 'conference.jitsi2.test.alt'
},
bosh: '//jitsi2.test.alt/http-bind',
[...]
Настройка веб-сервера Apache2
Установите пакеты:
# apt-get install apache2 apache2-mod_ssl
Пример конфигурации для веб-сервера Apache2 можно взять в файле /usr/share/doc/jitsi-meet-web-config-9258/jitsi-meet/jitsi-meet.example-apache
Создайте конфигурационный файл /etc/httpd2/conf/sites-available/jitsi2.test.alt.conf на основе /usr/share/doc/jitsi-meet-web-config-9258/jitsi-meet/jitsi-meet.example-apache:
# cp /usr/share/doc/jitsi-meet-web-config-9258/jitsi-meet/jitsi-meet.example-apache /etc/httpd2/conf/sites-available/jitsi2.test.alt.conf
Внесите изменения в файл /etc/httpd2/conf/sites-available/jitsi2.test.alt.conf (изменить имя, указать сертификат):
<VirtualHost *:80>
ServerName jitsi2.test.alt
Redirect permanent / https://jitsi2.test.alt/
</VirtualHost>
<VirtualHost *:443>
ServerName jitsi2.test.alt
# enable HTTP/2, if available
Protocols h2 http/1.1
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/jitsi/meet/jitsi2.test.alt.crt
SSLCertificateKeyFile /etc/jitsi/meet/jitsi2.test.alt.key
SSLProtocol all -SSLv2 -SSLv3 -TLSv1 -TLSv1.1
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
Header always set Strict-Transport-Security "max-age=31536000"
DocumentRoot "/usr/share/jitsi-meet"
<Directory "/usr/share/jitsi-meet">
Options Indexes MultiViews Includes FollowSymLinks
AddOutputFilter Includes html
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorDocument 404 /static/404.html
Alias "/config.js" "/etc/jitsi/meet/jitsi2.test.alt-config.js"
<Location /config.js>
Require all granted
</Location>
Alias "/external_api.js" "/usr/share/jitsi-meet/libs/external_api.min.js"
<Location /external_api.js>
Require all granted
</Location>
ProxyPreserveHost on
ProxyPass /http-bind http://localhost:5280/http-bind/
ProxyPassReverse /http-bind http://localhost:5280/http-bind/
ProxyPass /xmpp-websocket ws://localhost:5280/xmpp-websocket
ProxyPassReverse /xmpp-websocket ws://localhost:5280/xmpp-websocket
ProxyPass /colibri-ws/default-id ws://localhost:9090/colibri-ws/default-id
ProxyPassReverse /colibri-ws/default-id ws://localhost:9090/colibri-ws/default-id
RewriteEngine on
RewriteRule ^/([a-zA-Z0-9]+)$ /index.html
</VirtualHost>
Включите модули SSL и прокси:
# for mod in rewrite ssl headers proxy proxy_http; do a2enmod $mod; done
# a2enport https
Запустите веб-сервер Apache2 и добавьте его в автозагрузку, выполнив команду:
# systemctl enable --now httpd2
# a2dissite 000-default
# service httpd2 condreload
Конфигурация Jitsi Meet ALT 10.x
Настройка XMPP-сервера
Создайте дополнительную директорию для конфигурации XMPP-сервера:
# mkdir /etc/prosody/conf.d/
В файл /etc/prosody/conf.d/$DOMAIN.cfg.lua напишите:
plugin_paths = { "/usr/share/jitsi-meet/prosody-plugins/" }
-- domain mapper options, must at least have domain base set to use the mapper
muc_mapper_domain_base = "$DOMAIN";
cross_domain_bosh = false;
consider_bosh_secure = true;
VirtualHost "$DOMAIN"
authentication = "anonymous"
--app_id="example_app_id"
--app_secret="example_app_secret"
-- Assign this host a certificate for TLS, otherwise it would use the one
-- set in the global section (if any).
-- Note that old-style SSL on port 5223 only supports one certificate, and will always
-- use the global one.
ssl = {
key = "/etc/prosody/certs/$DOMAIN.key";
certificate = "/etc/prosody/certs/$DOMAIN.crt";
}
speakerstats_component = "speakerstats.$DOMAIN"
conference_duration_component = "conferenceduration.$DOMAIN"
-- we need bosh
modules_enabled = {
"bosh";
"pubsub";
"ping"; -- Enable mod_ping
"speakerstats";
"turncredentials";
"conference_duration";
}
c2s_require_encryption = false
Component "conference.$DOMAIN" "muc"
storage = "memory"
modules_enabled = {
"muc_meeting_id";
"muc_domain_mapper";
-- "token_verification";
}
admins = { "focus@auth.$DOMAIN" }
muc_room_locking = false
muc_room_default_public_jids = true
VirtualHost "auth.$DOMAIN"
ssl = {
key = "/etc/prosody/certs/auth.$DOMAIN.key";
certificate = "/etc/prosody/certs/auth.$DOMAIN.crt";
}
authentication = "internal_plain"
-- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.$DOMAIN" "muc"
storage = "memory"
modules_enabled = {
"ping";
}
admins = { "focus@auth.$DOMAIN", "jvb@auth.$DOMAIN" }
muc_room_locking = false
muc_room_default_public_jids = true
Component "focus.$DOMAIN"
component_secret = "xxx" -- достаточно длинный пароль, он же JICOFO_SECRET
Component "speakerstats.$DOMAIN" "speakerstats_component"
muc_component = "conference.$DOMAIN"
Component "conferenceduration.$DOMAIN" "conference_duration_component"
muc_component = "conference.$DOMAIN"
В файл /etc/prosody/prosody.cfg.lua добавьте:
Include "conf.d/*.cfg.lua"
Другими словами, нужно предусмотреть:
- VirtualHost для самих пользователей (здесь: собственно $DOMAIN)
- MUC для пользователей-участников конференции (здесь: conference.$DOMAIN)
- VirtualHost для служебных аккаунтов focus@, jvb@, jibri@, ... (здесь: auth.$DOMAIN)
- MUC для взаимодействия микросервисов, сидящих под этими аккаунтами (здесь: internal.auth.$DOMAIN)
- слот для XMPP-компонента focus (здесь: focus.$DOMAIN)
...а также подключить к ним соответствующие модули, и для двух из них (speakerstats, conference_duration) предусмотреть внутренние XMPP-компоненты.
Сгенерируйте сертификаты для виртуалхостов $DOMAIN и auth.$DOMAIN:
prosodyctl cert generate $DOMAIN prosodyctl cert generate auth.$DOMAIN
В выводе данных команд будет указано, куда записаны сгенерированные файлы (например, в /var/lib/prosody). Их нужно скопировать в /etc/prosody/certs.
Позже их нужно будет зарегистрировать в системе, на которой установлен Jicofo, как доверенные:
ln -s /etc/prosody/certs/$DOMAIN.crt /etc/pki/ca-trust/source/anchors/ ln -s /etc/prosody/certs/auth.$DOMAIN.crt /etc/pki/ca-trust/source/anchors/ update-ca-trust
Запустите prosody:
systemctl start prosody
Настройка Jicofo
Jicofo подключается к XMPP-серверу и как внешний XMPP-компонент, и как юзер-аккаунт с JID focus@auth.$DOMAIN
В /etc/jitsi/jicofo/config укажите:
# Jitsi Conference Focus settings
# sets the host name of the XMPP server
JICOFO_HOST=localhost
# sets the XMPP domain (default: none)
JICOFO_HOSTNAME=$DOMAIN
# sets the secret used to authenticate as an XMPP component
JICOFO_SECRET=xxx
# overrides the prefix for the XMPP component domain. Default: "focus"
#JICOFO_FOCUS_SUBDOMAIN=focus
# sets the port to use for the XMPP component connection
JICOFO_PORT=5347
# sets the XMPP domain name to use for XMPP user logins
JICOFO_AUTH_DOMAIN=auth.$DOMAIN
# sets the username to use for XMPP user logins
JICOFO_AUTH_USER=focus
# sets the password to use for XMPP user logins
JICOFO_AUTH_PASSWORD="[yyy]"
# extra options to pass to the jicofo daemon
JICOFO_OPTS="${JICOFO_FOCUS_SUBDOMAIN:+ --subdomain=$JICOFO_FOCUS_SUBDOMAIN}"
# adds java system props that are passed to jicofo (default are for home and logging config file)
JAVA_SYS_PROPS="-Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc/jitsi -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=jicofo -Dnet.java.sip.communicator.SC_LOG_DIR_LOCATION=/var/log/jitsi -Djava.util.logging.config.file=/etc/jitsi/jicofo/logging.properties"
"[yyy]" — достаточно длинный пароль для аккаунта focus@auth.$DOMAIN, который нужно завести на машине с prosody:
prosodyctl register focus auth.$DOMAIN "[yyy]"
В /etc/jitsi/jicofo/sip-communicator.properties укажите:
org.jitsi.jicofo.health.ENABLE_HEALTH_CHECKS=true org.jitsi.jicofo.BRIDGE_MUC=JvbBrewery@internal.auth.$DOMAIN
Запустите jicofo:
systemctl start jicofo
Убедитесь, что он подключается к XMPP-серверу:
curl -i localhost:8888/about/health
Так как пока что ни одного Jitsi Videobridge к серверу не подключено, jicofo ответит кодом ответа 500 и сообщением No operational bridges available. Если в ответе сообщение об ошибке иного рода — проверьте настройки и связь между prosody и jicofo.
Настройка Jitsi Videobridge (JVB)
В /etc/jitsi/videobridge/config укажите:
# Jitsi Videobridge settings
# extra options to pass to the JVB daemon
JVB_OPTS="--apis=,"
# adds java system props that are passed to jvb (default are for home and logging config file)
JAVA_SYS_PROPS="-Dnet.java.sip.communicator.SC_HOME_DIR_LOCATION=/etc/jitsi -Dnet.java.sip.communicator.SC_HOME_DIR_NAME=videobridge -Dnet.java.sip.communicator.SC_LOG_DIR_LOCATION=/var/log/jitsi -Djava.util.logging.config.file=/etc/jitsi/videobridge/logging.properties -Dconfig.file=/etc/jitsi/videobridge/application.conf"
Если в файле config есть другие настройки, рекомендуем их убрать — и способ передачи этих настроек, и сами некоторые эти настройки являются устаревшими.
В качестве файлов конфигурации используются /etc/jitsi/videobridge/{application.conf,sip-communicator.properties}.
В файле /etc/jitsi/videobridge/application.conf укажите:
videobridge {
stats {
enabled = true
transports = [
{ type = "muc" }
]
}
apis {
xmpp-client {
configs {
shard {
hostname = "localhost"
domain = "auth.$DOMAIN"
username = "jvb"
password = "[yyy-jvb]"
muc_jids = "JvbBrewery@internal.auth.$DOMAIN"
# The muc_nickname must be unique across all instances
muc_nickname = "jvb-mid-123"
}
}
}
}
}
Вместо слова shard можно использовать любой идентификатор (оно идентифицирует подключение к xmpp-серверу и jicofo).
Нужно исправить значения в файле /etc/jitsi/videobridge/sip-communicator.properties чтобы они соответствовали аналогичным параметрам из /etc/jitsi/videobridge/application.conf
Аккаунт jvb@auth.$DOMAIN тоже нужно завести на XMPP-сервере:
prosodyctl register jvb auth.$DOMAIN "[yyy-jvb]"
Если JVB-машина отделена от клиентов при помощи NAT, то потребуется донастройка: подробнее здесь.
Запустите JVB:
systemctl start jitsi-videobridge
Если всё сделано правильно и между JVB и jicofo есть связь, jicofo на healthcheck-запрос будет отдавать HTTP-код 200.
Если по тем или иным причинам поддержка health check больше не нужна, из /etc/jitsi/jicofo/sip-communicator.properties свойство org.jitsi.jicofo.health.ENABLE_HEALTH_CHECKS можно убрать.
Настройка web-приложения Jitsi Meet
В пакете jitsi-meet-web-config есть примеры конфигурации для веб-клиента (*-config.js) и веб-сервера(*.example.apache, *.example). Мы рекомендуем при настройке веб-сервера за основу взять пример оттуда.
Приведём ниже подробный разбор этого примера:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name $DOMAIN;
root /usr/share/jitsi-meet;
# ssi on with javascript for multidomain variables in config.js
ssi on;
ssi_types application/x-javascript application/javascript;
В системе Jitsi Meet нет динамической вебсерверной части, поэтому мы прибегаем к SSI. Риска в использовании SSI нет, потому что пользователь не может заставить веб-сервер отдавать произвольные данные.
Помимо конференций вида https://jitsi-meet.example.com/ConferenceName, Jitsi Meet также поддерживает URL-адреса конференций вида https://jitsi-meet.example.com/Subdomain/ConferenceName, где для разных значений Subdomain используются разные настройки и виртуалхосты на XMPP-сервере. SSI нужны как минимум для динамической подстановки этих значений в config.js.
index index.html index.htm;
error_page 404 /static/404.html;
gzip on;
gzip_types text/plain text/css application/javascript application/json;
gzip_vary on;
location = /config.js {
alias /etc/jitsi/meet/$DOMAIN-config.js;
}
Содержит элементы конфигурации веб-приложения. Его нужно поправить по необходимости, скопировав на место: cp /usr/share/jitsi-meet-web-config/config.js /etc/jitsi/meet/$DOMAIN-config.js
location = /external_api.js {
alias /usr/share/jitsi-meet/libs/external_api.min.js;
}
#ensure all static content can always be found first
location ~ ^/(libs|css|static|images|fonts|lang|sounds|connection_optimization|.well-known)/(.*)$
{
add_header 'Access-Control-Allow-Origin' '*';
alias /usr/share/jitsi-meet/$1/$2;
}
Ниже идёт настройка проксирования BOSH. Связь веб-клиента и XMPP-сервера можно организовывать и по вебсокетам, но на июнь 2020 поддержка вебсокетов в Jitsi Meet доступна только в тестовом режиме. Проброс HTTP до XMPP-сервера здесь полезен хотя бы потому, что можно ограничиться настройкой TLS только на веб-сервере. Если XMPP-сервер находится не на той же машине, что и веб-сервер, localhost в директиве proxy_pass нужно соответствующим образом заменить.
# BOSH
location = /http-bind {
proxy_pass http://localhost:5280/http-bind;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $http_host;
}
# xmpp websockets
location = /xmpp-websocket {
proxy_pass http://localhost:5280/xmpp-websocket?prefix=$prefix&$args;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
tcp_nodelay on;
}
Файлы конфигурации в /etc/nginx/sites-available.d и /etc/nginx/sites-enabled.d нужно назвать $DOMAIN.conf
Не забудьте выписать TLS-сертификат для веб-сервера.
Поправьте /etc/jitsi/meet/$DOMAIN-config.js в соответствии с настройками серверной части:
var config = {
// Connection
//
hosts: {
// XMPP domain.
domain: '$DOMAIN', // Главный VirtualHost на XMPP-сервере
// When using authentication, domain for guest users.
// anonymousdomain: 'guest.$DOMAIN', // Если на главном включена аутентификация: VirtualHost для анонимного доступа
// Domain for authenticated users. Defaults to <domain>.
// authdomain: '$DOMAIN',
// Call control component (Jigasi).
// call_control: 'callcontrol.$DOMAIN',
// Focus component domain. Defaults to focus.<domain>.
// focus: 'focus.$DOMAIN',
// XMPP MUC domain. FIXME: use XEP-0030 to discover it.
muc: 'conference.<!--# echo var="subdomain" default="" -->$DOMAIN'
},
// BOSH URL. FIXME: use XEP-0156 to discover it.
bosh: '//$DOMAIN/http-bind',
// Websocket URL
// websocket: 'wss://$DOMAIN/xmpp-websocket',
// The name of client node advertised in XEP-0115 'c' stanza
clientNode: 'http://jitsi.org/jitsimeet',
// The real JID of focus participant - can be overridden here
// focusUserJid: 'focus@auth.$DOMAIN',
[...]
}
Веб-интерфейс Jitsi Meet выкачивает этот скрипт и меняет поведение в зависимости от значений, там указанных.
Некоторые полезные настройки:
- fileRecordingsEnabled: булев тип; если true — включает в интерфейсе кнопку "начать запись".
- liveStreamingEnabled: булев тип; включает в интерфейсе кнопку "начать трансляцию в YouTube".
- noticeMessage: строка; позволяет отображать указанное MOTD в каждой конференции, например, в случае планируемых работ по обслуживанию.
- p2p.enabled: булев тип; если включен — при разговорах тет-а-тет JVB не задействуется (но может потребоваться задействование STUN/TURN).
- disableThirdPartyRequests: булев тип; если включено — Jitsi не будет делать запросов к сторонним серверам.
- Например, обычно Jitsi берёт аватарки с gravatar.com по e-mail участника, если тот в веб-интерфейсе его указал.
Чтобы проверить, всё ли в порядке, зайдите на https://$DOMAIN и присоединитесь к произвольной конференции, а затем 1-2 раза продублируйте вкладку веб-браузера. Трёх (в случае выключенного p2p — двух) анонимных участников достаточно, чтобы начать обмен медиапотоками; если увидите три изображения с камеры — система готова к использованию.
Подключение SIP-шлюза jigasi
Подключение рекордера jibri
FAQ
Можно ли использовать не prosody, а другой XMPP-сервер?
Краткий ответ: нет.
В комплекте с Jitsi идут модули для расширения функциональности XMPP-сервера prosody, написанные на Lua; они считаются частью продукта Jitsi Meet. Без этих модулей или эквивалентных им система ВКС работать не будет. В теории, ничего не мешает написать и поддерживать эти модули для вашего XMPP-сервера; одно время проект Jitsi использовал XMPP-сервер openfire.
Кто может подключиться к созданной конференции?
В приведённой инструкции описана конфигурация, подобная https://meet.jit.si, где, зная URL конференции, в неё может зайти любой желающий. Конференция создаётся, когда в неё заходит первый участник, и существует до выхода последнего. Предотвратить случайных посетителей можно, выбрав достаточно длинный URL на главной странице веб-портала; генератор по умолчанию с этим справляется.
Если система Jitsi Meet развёрнута на ваших собственных ресурсах, вы можете предотвратить неавторизованное создание новых конференций, чтобы сторонние люди не могли перенагрузить систему. Более подробное описание процедуры даёт апстрим.