Jitsi Meet: различия между версиями
Нет описания правки |
Нет описания правки |
||
Строка 1: | Строка 1: | ||
Jitsi Meet — веб-приложение на базе технологии WebRTC. Для сигналинга использует XMPP через BOSH с использованием собственного [https://xmpp.org/extensions/xep-0340.html XEP]. | Jitsi Meet — веб-приложение на базе технологии WebRTC. Для сигналинга использует XMPP через BOSH с использованием собственного [https://xmpp.org/extensions/xep-0340.html XEP]. | ||
В системах на базе Альт оно расположено в пакете {{pkg|jitsi-meet-web}} | В системах на базе Альт оно расположено в пакете {{pkg|jitsi-meet-web}}. Для ведущих мобильных платформ ([https://itunes.apple.com/us/app/jitsi-meet/id1165103905 iOS], [https://play.google.com/store/apps/details?id=org.jitsi.meet Google Play], [https://f-droid.org/en/packages/org.jitsi.meet/ F-Droid]) доступны приложения на React Native. | ||
Jicofo — XMPP-компонент, модератор видеоконференций. Клиенты договариваются о связи, заходя в общую XMPP-комнату с ним, и обмениваются там XMPP-сообщениями. Имеет HTTP API {{path|/about/health}} для опроса о состоянии сервиса. | Jicofo — XMPP-компонент, модератор видеоконференций. Клиенты договариваются о связи, заходя в общую XMPP-комнату с ним, и обмениваются там XMPP-сообщениями. Имеет HTTP API {{path|/about/health}} для опроса о состоянии сервиса. | ||
Строка 17: | Строка 17: | ||
=== Minimal Viable Product === | === Minimal Viable Product === | ||
Вам потребуются пакеты {{pkg|prosody}}, {{pkg|jitsi-meet-prosody}}, {{pkg|jitsi-meet-web}}, {{pkg|jicofo}}, {{pkg|jitsi-videobridge}}. | Вам потребуются пакеты {{pkg|prosody}}, {{pkg|jitsi-meet-prosody}}, {{pkg|jitsi-meet-web}}, {{pkg|jitsi-meet-web-config}}, {{pkg|jicofo}}, {{pkg|jitsi-videobridge}}. | ||
Для размещения нужны: | Для размещения нужны: | ||
* jitsi-videobridge: хост с доступными портами 10000/udp, 4443/tcp и хорошей пропускной способностью (рекомендуется минимум 100Mbps симметрично) | * jitsi-videobridge: хост с доступными портами 10000/udp, 4443/tcp и хорошей пропускной способностью (рекомендуется минимум 100Mbps симметрично) | ||
Строка 26: | Строка 26: | ||
Установите пакеты: | Установите пакеты: | ||
{{cmd|apt-get install prosody jitsi-meet-prosody jitsi-meet-web jicofo jitsi-videobridge}} | {{cmd|apt-get install prosody jitsi-meet-prosody jitsi-meet-web jitsi-meet-web-config jicofo jitsi-videobridge}} | ||
Теоретически компоненты могут размещаться на разных машинах; на практике мы не рекомендуем устанавливать {{pkg|prosody}} и {{pkg|jicofo}} на разные машины — это может привести к низкой производительности сервиса и большим колебаниям задержки связи. | Теоретически компоненты могут размещаться на разных машинах; на практике мы не рекомендуем устанавливать {{pkg|prosody}} и {{pkg|jicofo}} на разные машины — это может привести к низкой производительности сервиса и большим колебаниям задержки связи. | ||
При настройке будем предполагать, что в качестве базового доменного имени выбрано {{term|$DOMAIN}}. | При настройке будем предполагать, что в качестве базового доменного имени выбрано {{term|$DOMAIN}}. | ||
На всех используемых машинах убедитесь, что команда <source lang="shell">ping $(hostname)</source> успешно срабатывает: уходят запросы и приходят ответы. | На всех используемых машинах убедитесь, что команда <source lang="shell">ping "$(hostname)"</source> успешно срабатывает: уходят запросы и приходят ответы. | ||
==== Настройка XMPP-сервера ==== | ==== Настройка XMPP-сервера ==== | ||
Строка 254: | Строка 254: | ||
==== Настройка web-приложения Jitsi Meet ==== | ==== Настройка web-приложения Jitsi Meet ==== | ||
В | В пакете {{pkg|jitsi-meet-web-config}} есть примеры конфигурации для веб-клиента (*-config.js) и веб-сервера. Мы рекомендуем при настройке веб-сервера за основу взять пример оттуда. | ||
<div class="toccolours mw-collapsible mw-collapsed"> | <div class="toccolours mw-collapsible mw-collapsed"> | ||
Приведём ниже подробный разбор этого примера: | Приведём ниже подробный разбор этого примера: | ||
Строка 270: | Строка 270: | ||
ssi_types application/x-javascript application/javascript; | ssi_types application/x-javascript application/javascript; | ||
</pre> | </pre> | ||
В системе Jitsi Meet нет динамической вебсерверной части, поэтому мы прибегаем к <abbr title="Server-Side Includes">SSI</abbr>. | |||
Риска в использовании SSI нет, потому что пользователь не может заставить веб-сервер отдавать произвольные данные. | |||
Помимо конференций вида https://jitsi-meet.example.com/ConferenceName, Jitsi Meet также поддерживает URL-адреса конференций вида https://jitsi-meet.example.com/Subdomain/ConferenceName, где для разных значений Subdomain используются разные настройки и виртуалхосты на XMPP-сервере. | Помимо конференций вида https://jitsi-meet.example.com/ConferenceName, Jitsi Meet также поддерживает URL-адреса конференций вида https://jitsi-meet.example.com/Subdomain/ConferenceName, где для разных значений Subdomain используются разные настройки и виртуалхосты на XMPP-сервере. | ||
SSI нужны как минимум для динамической подстановки этих значений в {{term|config.js}}. | [https://ru.wikipedia.org/wiki/SSI_(%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5) SSI] нужны как минимум для динамической подстановки этих значений в {{term|config.js}}. | ||
<pre> | <pre> | ||
index index.html index.htm; | index index.html index.htm; | ||
Строка 282: | Строка 285: | ||
location = /config.js { | location = /config.js { | ||
alias /etc/jitsi/meet/ | alias /etc/jitsi/meet/$DOMAIN-config.js; | ||
} | } | ||
</pre> | |||
Содержит элементы конфигурации веб-приложения. Его нужно поправить по необходимости, скопировав на место: | |||
{{cmd| | |||
cp /usr/share/jitsi-meet-web-config/config.js /etc/jitsi/meet/$DOMAIN-config.js | |||
}} | |||
<pre> | |||
location = /external_api.js { | location = /external_api.js { | ||
alias /usr/share/jitsi-meet/libs/external_api.min.js; | alias /usr/share/jitsi-meet/libs/external_api.min.js; | ||
Строка 295: | Строка 304: | ||
alias /usr/share/jitsi-meet/$1/$2; | alias /usr/share/jitsi-meet/$1/$2; | ||
} | } | ||
</pre> | |||
Ниже идёт настройка проксирования BOSH. | |||
Связь веб-клиента и XMPP-сервера можно организовывать и по вебсокетам, но на июнь 2020 поддержка вебсокетов в Jitsi Meet доступна только в тестовом режиме. | |||
Проброс HTTP до XMPP-сервера здесь полезен хотя бы потому, что можно ограничиться настройкой TLS только на веб-сервере. | |||
Если XMPP-сервер находится не на той же машине, что и веб-сервер, localhost в директиве proxy_pass нужно соответствующим образом заменить. | |||
<pre> | |||
# BOSH | # BOSH | ||
location = /http-bind { | location = /http-bind { | ||
Строка 305: | Строка 319: | ||
# xmpp websockets | # xmpp websockets | ||
location = /xmpp-websocket { | location = /xmpp-websocket { | ||
proxy_pass http:// | proxy_pass http://localhost:5280/xmpp-websocket?prefix=$prefix&$args; | ||
proxy_http_version 1.1; | proxy_http_version 1.1; | ||
proxy_set_header Upgrade $http_upgrade; | proxy_set_header Upgrade $http_upgrade; | ||
Строка 312: | Строка 326: | ||
tcp_nodelay on; | tcp_nodelay on; | ||
} | } | ||
</pre> | </pre> | ||
Строка 319: | Строка 331: | ||
</div> | </div> | ||
Не забудьте выписать TLS-сертификат для веб-сервера. | |||
Чтобы проверить, всё ли в порядке, зайдите на {{term|https://$DOMAIN}} и присоединитесь к произвольной конференции, а затем 2 | Поправьте {{path|/etc/jitsi/meet/$DOMAIN-config.js}} в соответствии с настройками серверной части: | ||
<source lang="javascript"> | |||
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://alpha-jitsi.murbly.net/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', | |||
[...] | |||
} | |||
</source> | |||
Веб-интерфейс Jitsi Meet выкачивает этот скрипт и меняет поведение в зависимости от значений, там указанных. | |||
Некоторые полезные настройки: | |||
* <tt>fileRecordingsEnabled</tt>: булев тип; если <tt>true</tt> — включает в интерфейсе кнопку "начать запись". | |||
* <tt>liveStreamingEnabled</tt>: булев тип; включает в интерфейсе кнопку "начать трансляцию в YouTube". | |||
* <tt>noticeMessage</tt>: строка; позволяет отображать указанное MOTD в каждой конференции, например, в случае планируемых работ по обслуживанию. | |||
* <tt>p2p.enabled</tt>: булев тип; если включен — при разговорах тет-а-тет JVB не задействуется (но может потребоваться задействование STUN/TURN). | |||
* <tt></tt> | |||
* <tt></tt> | |||
* <tt></tt> | |||
Чтобы проверить, всё ли в порядке, зайдите на {{term|https://$DOMAIN}} и присоединитесь к произвольной конференции, а затем 1-2 раза продублируйте вкладку веб-браузера. | |||
Трёх (в случае выключенного p2p — двух) анонимных участников достаточно, чтобы начать обмен медиапотоками; если увидите три изображения с камеры — система готова к использованию. | Трёх (в случае выключенного p2p — двух) анонимных участников достаточно, чтобы начать обмен медиапотоками; если увидите три изображения с камеры — система готова к использованию. | ||
=== Подключение SIP-шлюза jigasi === | === Подключение SIP-шлюза jigasi === | ||
<!-- У меня нет опыта подключения этой штуки; на нашей площадке sip-телефонов нет. См. документацию апстрима --> | |||
=== Подключение рекордера jibri === | === Подключение рекордера jibri === | ||
Строка 334: | Строка 404: | ||
В комплекте с Jitsi идут модули для расширения функциональности XMPP-сервера prosody, написанные на Lua; они считаются частью продукта Jitsi Meet. Без этих модулей или эквивалентных им система ВКС работать не будет. | В комплекте с Jitsi идут модули для расширения функциональности XMPP-сервера prosody, написанные на Lua; они считаются частью продукта Jitsi Meet. Без этих модулей или эквивалентных им система ВКС работать не будет. | ||
В теории, ничего не мешает написать и поддерживать эти модули для вашего XMPP-сервера; одно время проект Jitsi использовал XMPP-сервер {{term|openfire}}. | В теории, ничего не мешает написать и поддерживать эти модули для вашего XMPP-сервера; одно время проект Jitsi использовал XMPP-сервер {{term|openfire}}. | ||
== Ссылки == | |||
https://jitsi.github.io/handbook |
Версия от 16:50, 20 июня 2020
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.
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
- Шаблон:Caution обратите внимание: веб-сервер должен поддерживать HTTPS, иначе браузеры откажутся поддерживать на нём WebRTC. Лучше всего сначала выписать SSL-сертификат, а потом продолжать настройку веб-сервера.
- 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)"
успешно срабатывает: уходят запросы и приходят ответы.
Настройка XMPP-сервера
В файл /etc/prosody/$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"
Сгенерируйте сертификаты для виртуалхостов $DOMAIN и auth.$DOMAIN:
prosodyctl cert generate $DOMAIN prosodyctl cert generate auth.$DOMAIN
Позже их нужно будет зарегистрировать в системе, на которой установлен 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-certs
Настройка 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 укажите:
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).
Аккаунт jvb@auth.$DOMAIN тоже нужно завести на XMPP-сервере:
prosodyctl register jvb auth.$DOMAIN "[yyy-jvb]"
Если JVB-машина отделена от клиентов при помощи NAT, то потребуется донастройка: подробнее здесь.
Запустите JVB:
systemctl start jitsi-videobridge
Если всё сделано правильно и между JVB и jicofo есть связь, jicofo на healthcheck-запрос будет отдавать HTTP-код 200.
Настройка web-приложения Jitsi Meet
В пакете jitsi-meet-web-config есть примеры конфигурации для веб-клиента (*-config.js) и веб-сервера. Мы рекомендуем при настройке веб-сервера за основу взять пример оттуда.
Приведём ниже подробный разбор этого примера:
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; }
Не забудьте выписать 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://alpha-jitsi.murbly.net/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).
Чтобы проверить, всё ли в порядке, зайдите на https://$DOMAIN и присоединитесь к произвольной конференции, а затем 1-2 раза продублируйте вкладку веб-браузера. Трёх (в случае выключенного p2p — двух) анонимных участников достаточно, чтобы начать обмен медиапотоками; если увидите три изображения с камеры — система готова к использованию.
Подключение SIP-шлюза jigasi
Подключение рекордера jibri
FAQ
Можно ли использовать не prosody, а другой XMPP-сервер?
Краткий ответ: нет.
В комплекте с Jitsi идут модули для расширения функциональности XMPP-сервера prosody, написанные на Lua; они считаются частью продукта Jitsi Meet. Без этих модулей или эквивалентных им система ВКС работать не будет. В теории, ничего не мешает написать и поддерживать эти модули для вашего XMPP-сервера; одно время проект Jitsi использовал XMPP-сервер openfire.