[Настройка Linux, Системное администрирование, IT-инфраструктура, *nix, Видеоконференцсвязь] Свой сервер видеоконференций Jitsi. Часть 1
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Это первая статья, в которой я расскажу, как поднять свой собственный сервер видеоконференций Jitsi-meet. Я планирую выпустить три статьи на эту тему:
- Свой сервер видеоконференций Jitsi.
Jitsi и все необходимые службы работают на одном сервере + сервис Jibri (для записи видеоконференций на отдельном сервере).
- Свой высоконагруженный сервис видеоконференций Jitsi.
Jitsi и все необходимые зависимые службы работают на разных серверах для получения высокой производительности.
- Свой мессенджер Matrix-synapse в связке с Jitsi-meet.
Настройка Matrix на своем сервере и объединение с Jitsi для видеозвонков.
В данной статье я расскажу, как поднять собственный сервер видеоконференций jitsi-meet. Для нормального функционирования мне пришлось собирать информацию по крупицам, общаться с разработчиками данной утилиты, перечитать всю документацию и облазить кучу форумов. Тут я собрал все в один мануал на русском.
В моем случае схема была немного другой, потому что у меня сервер Jitsi и Jibri находятся за NAT, в качестве которого стоит сервер с debian 9 и на котором есть внешний и внутренний IP. Сервисы Jitsi и Jibri также можно разместить на одном сервере, но тогда на него будет большая нагрузка и, следовательно, серверу надо дать больше ресурсов. Ниже я дам мануал, который составил, собирая свою службу (на три сервера), но каждый может преобразовать его под себя в зависимости от верований и убеждений, ну и возможностей конечно.
Итак, подготовительный этап прост и известен каждому, кто «умеет в linux». А если не знаком, то в этих ваших интернетах полно инструкций по развёртыванию linux-системы. Мы же поднимем с вами три debian 9 сервера (можно использовать другой дистрибутив, просто адаптировав мануал).
Рекомендуемые системные требования:
SPL
Для сервера с Jitsi-meet:
4 ядра с ≥ 2.0ГГц и 4 RAM
Для сервера с Jibri:
4 ядра с ≥ 2.0ГГц и 4 RAM
Для сервера с Jitsi и Jibri:
8 ядер с ≥ 2.0ГГц и 8 RAM
Ну, и, естественно, интернет с большой пропускной способностью.
Производительность с разными вариациями характеристик сервера можно посмотреть тут.
Еще одно немаловажное требование — большинство команд надо делать от привилегированного пользователя, поэтому на сервере (на каждом сервере) сразу получим root-права.
# sudo -i
или
# su - root
Сразу хочу отметить тот факт, что сервер под Jibri должен быть без GUI (графического интерфейса) иначе Jibri, который имеет свой xorg, будет конфликтовать и откажется работать (долгие танцы с бубном помогут уладить их конфликт, но зачем все усложнять!?).
NAT-сервер
SPL
Если мы будем использовать NAT-сервер, тогда нам нужно настроить на нем безопасность и перенаправление, а для этого мы обратимся к iptables (хотя тут опять-таки дело вкуса). Создаем скрипт, которым настроим iptables:
# touch iptables_rules.sh
Дальше открываем файл, вставляем и корректируем под свои значения:
iptables_rules.sh
SPL
#! /bin/bash
IPT="iptables"
## Внешний интерфейс
WAN=ens224
WAN_IP=ВАШ_внешний_IP
## Внутренний интерфейс
LAN1=ens192
LAN1_IP=ВАШ_внутренний_IP
LAN1_IP_RANGE=192.168.0.0/24
LAN2=IP_Jitsi
## Очищаем все цепочки перед применением новых правил
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
## Блокируем весь трафик, который не соответствует ни одному из правил
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
## Разрешаем весь трафик в локалхост и локальной сети
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i $LAN1 -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
$IPT -A OUTPUT -o $LAN1 -j ACCEPT
## Этот блок разрешает icmp-запросы (пинговать сервер) (опционально)
$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
## Открываем доступ в интернет самому серверу
$IPT -A OUTPUT -o $WAN -j ACCEPT
#$IPT -A INPUT -i $WAN -j ACCEPT
## Разрешаем все установленные соединения и дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
## Защита от наиболее распространенных сетевых атак. (опционально)
## Отбрасываем все пакеты без статуса (опционально)
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
## Блокируем нулевые пакеты (опционально)
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
## Закрываемся от syn-flood атак (опционально)
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
## Запрет доступа с определенных IP (опционально)
#$IPT -A INPUT -s ipaddres -j REJECT
## Разрешаем доступ в интернет из локальной сети
$IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT
## Запрещаем доступ из интернета в локальную сеть (опционально)
#$IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT
## Чтобы в локальной сети был интернет включаем nat
$IPT -t nat -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE -j MASQUERADE
##Должен быть включен ip forwarding
## Разрешаем ssh (порт 22 - это порт по умолчанию для ssh соединения, если вы его меняли, то обязательно значение 22 надо заменить своим, иначе будет потерян доступ к серверу)
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
## Перенаправление трафика на сервер JITSI
$IPT -A FORWARD -i $WAN -d $LAN2 -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A FORWARD -i $WAN -d $LAN2 -p tcp -m tcp --dport 443 -j ACCEPT
$IPT -A FORWARD -i $WAN -d $LAN2 -p udp -m udp --dport 10000 -j ACCEPT
$IPT -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j DNAT --to $LAN2
$IPT -t nat -A PREROUTING -i $WAN -p tcp --dport 443 -j DNAT --to $LAN2
$IPT -t nat -A PREROUTING -i $WAN -p udp --dport 10000 -j DNAT --to $LAN2
$IPT -t nat -A POSTROUTING -j MASQUERADE
Сохраняем и закрываем файл.
После этого надо сделать файл исполняемым и запустить:
# chmod +x iptables_rules.sh
# ./iptables_rules.sh
Правила мы установили, однако после перезагрузки сервера они пропадут. Для того, чтобы применить их перманентно, выполним следующее:
# iptables-save > /etc/iptables-conf/iptables_rules.ipv4
Откроем файл и вставим в конец файла правило для восстановления настроек:
# vim /etc/network/interfaces
post-up /sbin/iptables-restore < /etc/iptables-conf/iptables_rules.ipv4
Ну, и, естественно, надо разрешить пересылку пакетов, открываем файл:
# vim /etc/sysctl.conf
Находим строку и раскомментируем (если стоит «0», то меняем на «1»)
net.ipv4.ip_forward = 1
Применяем правила:
# sysctl -p
Настраиваем сервер Jitsi
SPL
Первый сервер готов, и мы переходим ко второму серверу — Jitsi.
Тут опять надо разрешить пересылку пакетов — открываем файл:
# vim /etc/sysctl.conf
Находим строку и раскомментируем (если стоит «0», то меняем на «1»)
net.ipv4.ip_forward = 1
Применяем правила:
# sysctl -p
Установим необходимые утилиты:
# apt-get update
# apt-get install ufw iftop htop wget net-tools vim –y
Далее настроим ufw (нам нет нужды прописывать похожие правила как на предыдущем сервере, а достаточно просто открыть некоторые порты):
# ufw allow 22
# ufw allow 80/tcp
# ufw allow 443/tcp
# ufw allow 10000/udp
# ufw enable
Будет запрошено подтверждение, вводим «y» (порт 22 — это порт по умолчанию для ssh соединения, если вы его меняли, то обязательно значение 22 надо заменить своим, иначе будет потерян доступ к серверу).
Далее необходимо настроить имя хоста:
# hostnamectl set-hostname jitsi.mydnsname.com
Стоит отметить, что для полноценного использования Jitsi-meet необходимо доменное имя и белый IP, к которому привязано имя.
Переходим к установке.
# echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list
# wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | apt-key add -
# apt-get install -y apt-transport-https
# apt-get update
Если у вас еще не установлен веб-сервер, то самое время это сделать. Выберите сами apache2 или nginx, и go:
# apt-get -y install nginx (apache2)
# apt-get -y install jitsi-meet
В процессе установки будет запрошен IP сервера или его dns имя. Если сервер должен работать с мобильными приложениями, то должно быть dns имя и ssl сертификат. Далее утилита спросит про сертификат ( первый вариант применим для автоматического подписания сертификата, при условии что IP адрес белый и есть dns-имя, второй – если уже есть сертификат, но тогда надо будет еще указать пути, где лежат сертификаты). Важное замечание: для подключения андроид устройств нужно добавить третий сертификат и прописать к нему путь в apache/nginx.
По завершению установки мы перейдем к настройке.
Как уже и говорил, надо добавить еще один ssl-сертификат для устройств android. Для этого мы в конфигурацию добавим путь к этому сертификату (скажу сразу, что у вас пути могут отличаться, если вы делали это другим способом). Открываем файл конфигурации (apache2 или nginx):
Apache2:
SPL
# vim /etc/apache2/saites-avalieble/example.org.conf
Добавляем строку (внимательно смотрим пути и подставляем свои значения):
SSLCertificateChainFile /etc/ssl/example.org/SectigoRSADomainValidationSecureServerCA.crt
Должно получиться так:
SSLProtocol TLSv1 TLSv1.1 TLSv1.2
SSLEngine on
SSLProxyEngine on
SSLCertificateFile /etc/ssl/jitsi.dnsname.com/jitsi.dnsname.com.crt
SSLCertificateChainFile /etc/ssl/jitsi.dnsname.com/SectigoRSADomainValidationSecureServerCA.crt
SSLCertificateKeyFile /etc/ssl/jitsi.dnsname.com/jitsi.dnsname.com.key
SSLCipherSuite "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED"
SSLHonorCipherOrder on
Header set Strict-Transport-Security "max-age=31536000"
Сохраняем и закрываем файл.
Nginx:
SPL
# vim /etc/nginx/sites-available/jitsi.dnsname.com.conf
# Mozilla Guideline v5.4, nginx 1.17.7, OpenSSL 1.1.1d, intermediate configuration
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # TLSv1.3;
ssl_ciphers 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;
ssl_prefer_server_ciphers off;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m; # about 40000 sessions
ssl_session_tickets off;
add_header Strict-Transport-Security "max-age=63072000" always;
ssl_certificate /etc/ssl/jitsi.dnsname.com/fullchain.pem;
ssl_certificate_key /etc/ssl/jitsi.dnsname.com/privkey.pem;
root /usr/share/jitsi-meet;
Сохраняем и закрываем файл.
Для nginx мы не указываем отдельный сертификат, а объединяем два сертификата в один:
# cat /etc/ssl/jitsi.dnsname.com/jitsi.dnsname.com.crt /etc/ssl/jitsi.dnsname.com/SectigoRSADomainValidationSecureServerCA.crt >> /etc/ssl/jitsi.dnsname.com/fullchain.pem
Проверить цепочку сертификатов можно тут.
Далее настраиваем систему. Добавляем туда следующее (отметим, что в локальный адрес прописываем адрес сервера Jitsi, а в публичный — белый IP, у нас это IP адрес первого сервера):
# vim /etc/jitsi/videobridge/sip-communicator.properties
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>
Комментируем следующую строку:
org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES
Далее для поддержания конференции на большое количество людей (более 100) добавляем следующие строки в файл:
# vim /etc/systemd/system.conf
system.conf
SPL
DefaultLimitNOFILE=65000
DefaultLimitNPROC=65000
DefaultTasksMax=65000
Сохраняем и закрываем файл.
Далее:
# apt-get -y install jigasi
# systemctl daemon-reload
# systemctl restart jitsi
# cat /proc/`cat /var/run/jitsi-videobridge/jitsi-videobridge.pid`/limits
Настраиваем сервер Jibri
SPL
Теперь нам осталось только поднять сервер с Jibri. Это опционально и нужно только для того, чтобы иметь возможность транслировать конференцию или вести запись конференции.
Jibri можно поставить рядом с Jitsi на одном сервере, но тогда на сервер будет идти бОльшая нагрузка. Мы сделаем это на отдельном сервере, но практически те же самые шаги надо предпринять, чтобы поднять Jibri рядом с Jitsi.
И так, приступим.
Тут опять надо разрешить пересылку пакетов, открываем файл:
# vim /etc/sysctl.conf
Находим строку и раскомментируем (если стоит «0», то меняем на «1»)
net.ipv4.ip_forward = 1
Применяем правила:
# sysctl -p
На следующем шаге нам необходимо убедиться, что модуль обратной связи доступен и работает:
# echo "snd-aloop" >> /etc/modules
# modprobe snd-aloop
# lsmod | grep snd_aloop
Далее установим стабильную версию Google Chrome:
# curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
# echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list
# apt-get -y update
# apt-get -y install google-chrome-stable
Создадим директорию и пропишем политики:
# mkdir -p /etc/opt/chrome/policies/managed
# echo '{ "CommandLineFlagSecurityWarningsEnabled": false }' >> /etc/opt/chrome/policies/managed/managed_policies.json
Скачаем и установим chromedriver:
# CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
# wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/
# unzip ~/chromedriver_linux64.zip -d ~/
# rm ~/chromedriver_linux64.zip
# mv -f ~/chromedriver /usr/local/bin/chromedriver
# chown root:root /usr/local/bin/chromedriver
# chmod 0755 /usr/local/bin/chromedriver
Установим зависимости и необходимые пакеты:
# apt-get install ffmpeg curl alsa-utils icewm xdotool xserver-xorg-input-void xserver-xorg-video-dummy
Теперь устанавливаем Jibri:
Если установка на сервер Jitsi
SPL
# apt-get install -y jibri
Установка на отдельный сервер
SPL
# wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add -
# sh -c "echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list"
# apt-get update
# apt-get install -y jibri
Далее необходимо добавить Jibri в группы пользователей:
# usermod -aG adm,audio,video,plugdev jibri
Для работы Jibri необходима Java 8:
# wget -O - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
# add-apt-repository https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/
# apt-get update
# apt-get install -y adoptopenjdk-8-hotspot
Нужно настроить Java 8 по умолчанию для Jibri. Для этого открываем файл и заменяем слово «java» на полный путь:
# vim /opt/jitsi/jibri/launch.sh
/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java
Для хранения видео нам надо отвести на сервере специальную директорию. Для этого мы создадим отдельную директорию (по желанию можно создать другую директорию, ее надо будет указать в конфигурации):
# mkdir /srv/recordings
Дадим Jibri права на нее и сделаем владельцем:
# chown jibri:jibri /srv/recordings
Далее мы настроим Jitsi-сервер для того, чтобы он знал о существовании Jibri и дадим все необходимые настройки и разрешения. Если сервис Jibri на отдельном сервере, тогда переходим на сервер Jitsi.
Начнем с конфигурации Prosody. Открываем файл и вставляем в конец файла с подстановкой своих значений:
# vim /etc/prosody/conf.avail/jitsi.dnsname.com.cfg.lua
jitsi.dnsname.com.cfg.lua
SPL
-- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.jitsi.dnsname.com" "muc"
modules_enabled = {
"ping";
}
storage = "memory"
muc_room_cache_size = 1000
VirtualHost "recorder.jitsi.dnsname.com"
modules_enabled = {
"ping";
}
authentication = "internal_plain"
Теперь создадим учетные записи для пользователей «jibri» и «recorder» (пароли, которые мы тут установим, понадобятся нам далее):
# prosodyctl register jibri auth.jitsi.dnsname.com PAsswDJibRI
# prosodyctl register recorder recorder.jitsi.dnsname.com PaSSwdReCORD
Следующим нашим действием станет прописывание конфигурации Jicofo. Откроем и добавим в файл следующие строки:
# vim /etc/jitsi/jicofo/sip-communicator.properties
jicofo/sim-communicator-properties
SPL
org.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.jitsi.dnsname.com
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90
Далее настроим Jitsi-meet. Добавим/раскомментируем строки в файле:
# vim /etc/jitsi/meet/jitsi.dnsname.com-config.js
config.js
SPL
fileRecordingsEnabled: true,
liveStreamingEnabled: true,
hiddenDomain: 'recorder.jitsi.dnsname.com',
Хочу обратить внимание, что следующий шаг необходимо выполнить только в том случае, когда сервис Jibri находится на отдельном сервере.
Ранее мы уже установили на сервере Jitsi ufw и открыли порты 22, 80, 443. Сейчас нам надо открыть еще порт 5222, для этого:
# ufw allow 5222/tcp
Теперь вернемся на сервер Jibri и добавим в файл jibri.conf следующую конфигурацию (не забываем подставлять свои значения, тут же нам надо указать и пароли для «jibri» и «recorder»):
# vim /etc/jitsi/jibri/jibri.conf
jibri.conf
SPL
jibri {
// A unique identifier for this Jibri
// TODO: eventually this will be required with no default
id = ""
// Whether or not Jibri should return to idle state after handling
// (successfully or unsuccessfully) a request. A value of 'true'
// here means that a Jibri will NOT return back to the IDLE state
// and will need to be restarted in order to be used again.
single-use-mode = false
api {
http {
external-api-port = 2222
internal-api-port = 3333
}
xmpp {
// See example_xmpp_envs.conf for an example of what is expected here
environments = [
{
name = "prod environment"
xmpp-server-hosts = ["jitsi.dnsname.com"]
xmpp-domain = "jitsi.dnsname.com"
control-muc {
domain = "internal.auth.jitsi.dnsname.com"
room-name = "JibriBrewery"
nickname = "jibri-nickname"
}
control-login {
domain = "auth.jitsi.dnsname.com"
username = "jibri"
password = "PAsswDJibRI"
}
call-login {
domain = "recorder.jitsi.dnsname.com"
username = "recorder"
password = "PaSSwdReCORD"
}
strip-from-room-domain = "conference."
usage-timeout = 0
trust-all-xmpp-certs = true
}]
}
}
recording {
recordings-directory = "/srv/recordings"
# TODO: make this an optional param and remove the default
finalize-script = "/path/to/finalize_recording.sh"
}
streaming {
// A list of regex patterns for allowed RTMP URLs. The RTMP URL used
// when starting a stream must match at least one of the patterns in
// this list.
rtmp-allow-list = [
// By default, all services are allowed
".*"
]
}
chrome {
// The flags which will be passed to chromium when launching
flags = [
"--use-fake-ui-for-media-stream",
"--start-maximized",
"--kiosk",
"--enabled",
"--disable-infobars",
"--autoplay-policy=no-user-gesture-required"
]
}
stats {
enable-stats-d = true
}
webhook {
// A list of subscribers interested in receiving webhook events
subscribers = []
}
jwt-info {
// The path to a .pem file which will be used to sign JWT tokens used in webhook
// requests. If not set, no JWT will be added to webhook requests.
# signing-key-path = "/path/to/key.pem"
// The kid to use as part of the JWT
# kid = "key-id"
// The issuer of the JWT
# issuer = "issuer"
// The audience of the JWT
# audience = "audience"
// The TTL of each generated JWT. Can't be less than 10 minutes.
# ttl = 1 hour
}
call-status-checks {
// If all clients have their audio and video muted and if Jibri does not
// detect any data stream (audio or video) comming in, it will stop
// recording after NO_MEDIA_TIMEOUT expires.
no-media-timeout = 30 seconds
// If all clients have their audio and video muted, Jibri consideres this
// as an empty call and stops the recording after ALL_MUTED_TIMEOUT expires.
all-muted-timeout = 10 minutes
// When detecting if a call is empty, Jibri takes into consideration for how
// long the call has been empty already. If it has been empty for more than
// DEFAULT_CALL_EMPTY_TIMEOUT, it will consider it empty and stop the recording.
default-call-empty-timeout = 30 seconds
}
}
Теперь нам осталось только перезапустить систему. Для этого введем следующие две команды: первую на сервере Jitsi, а вторую — на Jibri соответственно (если оба сервиса стоят на одном сервере, то обе команды ввести на одном сервере):
# systemctl restart jitsi-videobridge2 prosody jicofo
# systemctl enable --now jibri
Вот и готово. Теперь можно перейти в браузере на jitsi.dnsname.com запустить конференцию и включить ее запись. Видеофайлы можно найти на сервере Jibri в директории /srv/recordings. Забрать их с сервера можно множеством способов, я оставлю это на ваш полет фантазии, подскажу лишь несколько:
1. Настроить проброс портов (если сервер Jibri вы поставили за NAT), затем подключиться к серверу, например через WinSCP, и стянуть файл себе. То же самое можно сделать, только без проброса портов, если Jibri не за NAT и имеет внешний IP.
2. С помощью утилиты scp.
Сообщество Jitsi. Тут же взял мануал для Jibri.
Благодарю за внимание!
Благодарю Алексея Байко, Дарью Гулькович и Владислава Гедвило за внесенные правки.
===========
Источник:
habr.com
===========
Похожие новости:
- [Настройка Linux, Open source, Софт, Планшеты] Китайцы создали альтернативу Android и iOS на Ubuntu для смартфонов и планшетов
- [Настройка Linux, Сетевые технологии] Сетевая подсистема в ОС
- [IT-инфраструктура, CRM-системы, Софт] CRM — это не…
- [Системное администрирование, Серверная оптимизация, Хранение данных, Хранилища данных] Тестируем СХД OceanStor Dorado V6: Hyper и Smart
- [Системное администрирование, IT-инфраструктура, DevOps, Микросервисы] Пишем фильтры WASM для Envoy и деплоим их с Istio (перевод)
- [IT-инфраструктура, Администрирование баз данных, Big Data, Софт] Вот это скорость! Как мы подружили наш UBA-модуль с ClickHouse и что из этого вышло
- [Информационная безопасность, Open source, Системное администрирование, Системное программирование] Защита ядра Linux из ARM Trustzone: как усилить Linux Kernel Runtime Guard и предотвращать последствия zero-day
- [Программирование, *nix, C] Спецификация D-Bus. Часть 1 (перевод)
- [Настройка Linux] Насколько маленьким может быть ядро linux?
- [IT-инфраструктура, DevOps, Микросервисы, Kubernetes] Онлайн-интенсив «Service mesh» 19—21 марта
Теги для поиска: #_nastrojka_linux (Настройка Linux), #_sistemnoe_administrirovanie (Системное администрирование), #_itinfrastruktura (IT-инфраструктура), #_*nix, #_videokonferentssvjaz (Видеоконференцсвязь), #_jitsi, #_jibri, #_iptables, #_nginx, #_apache2, #_nastrojka_linux (
Настройка Linux
), #_sistemnoe_administrirovanie (
Системное администрирование
), #_itinfrastruktura (
IT-инфраструктура
), #_*nix, #_videokonferentssvjaz (
Видеоконференцсвязь
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:30
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Это первая статья, в которой я расскажу, как поднять свой собственный сервер видеоконференций Jitsi-meet. Я планирую выпустить три статьи на эту тему:
В данной статье я расскажу, как поднять собственный сервер видеоконференций jitsi-meet. Для нормального функционирования мне пришлось собирать информацию по крупицам, общаться с разработчиками данной утилиты, перечитать всю документацию и облазить кучу форумов. Тут я собрал все в один мануал на русском. В моем случае схема была немного другой, потому что у меня сервер Jitsi и Jibri находятся за NAT, в качестве которого стоит сервер с debian 9 и на котором есть внешний и внутренний IP. Сервисы Jitsi и Jibri также можно разместить на одном сервере, но тогда на него будет большая нагрузка и, следовательно, серверу надо дать больше ресурсов. Ниже я дам мануал, который составил, собирая свою службу (на три сервера), но каждый может преобразовать его под себя в зависимости от верований и убеждений, ну и возможностей конечно. Итак, подготовительный этап прост и известен каждому, кто «умеет в linux». А если не знаком, то в этих ваших интернетах полно инструкций по развёртыванию linux-системы. Мы же поднимем с вами три debian 9 сервера (можно использовать другой дистрибутив, просто адаптировав мануал). Рекомендуемые системные требования:SPLДля сервера с Jitsi-meet:
4 ядра с ≥ 2.0ГГц и 4 RAM Для сервера с Jibri: 4 ядра с ≥ 2.0ГГц и 4 RAM Для сервера с Jitsi и Jibri: 8 ядер с ≥ 2.0ГГц и 8 RAM Ну, и, естественно, интернет с большой пропускной способностью. Производительность с разными вариациями характеристик сервера можно посмотреть тут. Еще одно немаловажное требование — большинство команд надо делать от привилегированного пользователя, поэтому на сервере (на каждом сервере) сразу получим root-права. # sudo -i
или # su - root
Сразу хочу отметить тот факт, что сервер под Jibri должен быть без GUI (графического интерфейса) иначе Jibri, который имеет свой xorg, будет конфликтовать и откажется работать (долгие танцы с бубном помогут уладить их конфликт, но зачем все усложнять!?). NAT-серверSPLЕсли мы будем использовать NAT-сервер, тогда нам нужно настроить на нем безопасность и перенаправление, а для этого мы обратимся к iptables (хотя тут опять-таки дело вкуса). Создаем скрипт, которым настроим iptables:
# touch iptables_rules.sh
Дальше открываем файл, вставляем и корректируем под свои значения: iptables_rules.shSPL#! /bin/bash
IPT="iptables" ## Внешний интерфейс WAN=ens224 WAN_IP=ВАШ_внешний_IP ## Внутренний интерфейс LAN1=ens192 LAN1_IP=ВАШ_внутренний_IP LAN1_IP_RANGE=192.168.0.0/24 LAN2=IP_Jitsi ## Очищаем все цепочки перед применением новых правил $IPT -F $IPT -F -t nat $IPT -F -t mangle $IPT -X $IPT -t nat -X $IPT -t mangle -X ## Блокируем весь трафик, который не соответствует ни одному из правил $IPT -P INPUT DROP $IPT -P OUTPUT DROP $IPT -P FORWARD DROP ## Разрешаем весь трафик в локалхост и локальной сети $IPT -A INPUT -i lo -j ACCEPT $IPT -A INPUT -i $LAN1 -j ACCEPT $IPT -A OUTPUT -o lo -j ACCEPT $IPT -A OUTPUT -o $LAN1 -j ACCEPT ## Этот блок разрешает icmp-запросы (пинговать сервер) (опционально) $IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT $IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT $IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT $IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT ## Открываем доступ в интернет самому серверу $IPT -A OUTPUT -o $WAN -j ACCEPT #$IPT -A INPUT -i $WAN -j ACCEPT ## Разрешаем все установленные соединения и дочерние от них $IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT $IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT ## Защита от наиболее распространенных сетевых атак. (опционально) ## Отбрасываем все пакеты без статуса (опционально) $IPT -A INPUT -m state --state INVALID -j DROP $IPT -A FORWARD -m state --state INVALID -j DROP ## Блокируем нулевые пакеты (опционально) $IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP ## Закрываемся от syn-flood атак (опционально) $IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP $IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP ## Запрет доступа с определенных IP (опционально) #$IPT -A INPUT -s ipaddres -j REJECT ## Разрешаем доступ в интернет из локальной сети $IPT -A FORWARD -i $LAN1 -o $WAN -j ACCEPT ## Запрещаем доступ из интернета в локальную сеть (опционально) #$IPT -A FORWARD -i $WAN -o $LAN1 -j REJECT ## Чтобы в локальной сети был интернет включаем nat $IPT -t nat -A POSTROUTING -o $WAN -s $LAN1_IP_RANGE -j MASQUERADE ##Должен быть включен ip forwarding ## Разрешаем ssh (порт 22 - это порт по умолчанию для ssh соединения, если вы его меняли, то обязательно значение 22 надо заменить своим, иначе будет потерян доступ к серверу) $IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT ## Перенаправление трафика на сервер JITSI $IPT -A FORWARD -i $WAN -d $LAN2 -p tcp -m tcp --dport 80 -j ACCEPT $IPT -A FORWARD -i $WAN -d $LAN2 -p tcp -m tcp --dport 443 -j ACCEPT $IPT -A FORWARD -i $WAN -d $LAN2 -p udp -m udp --dport 10000 -j ACCEPT $IPT -t nat -A PREROUTING -i $WAN -p tcp --dport 80 -j DNAT --to $LAN2 $IPT -t nat -A PREROUTING -i $WAN -p tcp --dport 443 -j DNAT --to $LAN2 $IPT -t nat -A PREROUTING -i $WAN -p udp --dport 10000 -j DNAT --to $LAN2 $IPT -t nat -A POSTROUTING -j MASQUERADE Сохраняем и закрываем файл. После этого надо сделать файл исполняемым и запустить: # chmod +x iptables_rules.sh
# ./iptables_rules.sh Правила мы установили, однако после перезагрузки сервера они пропадут. Для того, чтобы применить их перманентно, выполним следующее: # iptables-save > /etc/iptables-conf/iptables_rules.ipv4
Откроем файл и вставим в конец файла правило для восстановления настроек: # vim /etc/network/interfaces
post-up /sbin/iptables-restore < /etc/iptables-conf/iptables_rules.ipv4
Ну, и, естественно, надо разрешить пересылку пакетов, открываем файл: # vim /etc/sysctl.conf
Находим строку и раскомментируем (если стоит «0», то меняем на «1») net.ipv4.ip_forward = 1
Применяем правила: # sysctl -p
Настраиваем сервер JitsiSPLПервый сервер готов, и мы переходим ко второму серверу — Jitsi.
Тут опять надо разрешить пересылку пакетов — открываем файл: # vim /etc/sysctl.conf
Находим строку и раскомментируем (если стоит «0», то меняем на «1») net.ipv4.ip_forward = 1
Применяем правила: # sysctl -p
Установим необходимые утилиты: # apt-get update
# apt-get install ufw iftop htop wget net-tools vim –y Далее настроим ufw (нам нет нужды прописывать похожие правила как на предыдущем сервере, а достаточно просто открыть некоторые порты): # ufw allow 22
# ufw allow 80/tcp # ufw allow 443/tcp # ufw allow 10000/udp # ufw enable Будет запрошено подтверждение, вводим «y» (порт 22 — это порт по умолчанию для ssh соединения, если вы его меняли, то обязательно значение 22 надо заменить своим, иначе будет потерян доступ к серверу). Далее необходимо настроить имя хоста: # hostnamectl set-hostname jitsi.mydnsname.com
Стоит отметить, что для полноценного использования Jitsi-meet необходимо доменное имя и белый IP, к которому привязано имя. Переходим к установке. # echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list
# wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | apt-key add - # apt-get install -y apt-transport-https
# apt-get update Если у вас еще не установлен веб-сервер, то самое время это сделать. Выберите сами apache2 или nginx, и go: # apt-get -y install nginx (apache2)
# apt-get -y install jitsi-meet В процессе установки будет запрошен IP сервера или его dns имя. Если сервер должен работать с мобильными приложениями, то должно быть dns имя и ssl сертификат. Далее утилита спросит про сертификат ( первый вариант применим для автоматического подписания сертификата, при условии что IP адрес белый и есть dns-имя, второй – если уже есть сертификат, но тогда надо будет еще указать пути, где лежат сертификаты). Важное замечание: для подключения андроид устройств нужно добавить третий сертификат и прописать к нему путь в apache/nginx. По завершению установки мы перейдем к настройке. Как уже и говорил, надо добавить еще один ssl-сертификат для устройств android. Для этого мы в конфигурацию добавим путь к этому сертификату (скажу сразу, что у вас пути могут отличаться, если вы делали это другим способом). Открываем файл конфигурации (apache2 или nginx): Apache2:SPL# vim /etc/apache2/saites-avalieble/example.org.conf
Добавляем строку (внимательно смотрим пути и подставляем свои значения): SSLCertificateChainFile /etc/ssl/example.org/SectigoRSADomainValidationSecureServerCA.crt
Должно получиться так: SSLProtocol TLSv1 TLSv1.1 TLSv1.2
SSLEngine on SSLProxyEngine on SSLCertificateFile /etc/ssl/jitsi.dnsname.com/jitsi.dnsname.com.crt SSLCertificateChainFile /etc/ssl/jitsi.dnsname.com/SectigoRSADomainValidationSecureServerCA.crt SSLCertificateKeyFile /etc/ssl/jitsi.dnsname.com/jitsi.dnsname.com.key SSLCipherSuite "EECDH+ECDSA+AESGCM:EECDH+aRSA+AESGCM:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA256:EECDH+ECDSA+SHA384:EECDH+ECDSA+SHA256:EECDH+aRSA+SHA384:EDH+aRSA+AESGCM:EDH+aRSA+SHA256:EDH+aRSA:EECDH:!aNULL:!eNULL:!MEDIUM:!LOW:!3DES:!MD5:!EXP:!PSK:!SRP:!DSS:!RC4:!SEED" SSLHonorCipherOrder on Header set Strict-Transport-Security "max-age=31536000" Сохраняем и закрываем файл. Nginx:SPL# vim /etc/nginx/sites-available/jitsi.dnsname.com.conf
# Mozilla Guideline v5.4, nginx 1.17.7, OpenSSL 1.1.1d, intermediate configuration
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # TLSv1.3; ssl_ciphers 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; ssl_prefer_server_ciphers off; ssl_session_timeout 1d; ssl_session_cache shared:SSL:10m; # about 40000 sessions ssl_session_tickets off; add_header Strict-Transport-Security "max-age=63072000" always; ssl_certificate /etc/ssl/jitsi.dnsname.com/fullchain.pem; ssl_certificate_key /etc/ssl/jitsi.dnsname.com/privkey.pem; root /usr/share/jitsi-meet; Сохраняем и закрываем файл. Для nginx мы не указываем отдельный сертификат, а объединяем два сертификата в один: # cat /etc/ssl/jitsi.dnsname.com/jitsi.dnsname.com.crt /etc/ssl/jitsi.dnsname.com/SectigoRSADomainValidationSecureServerCA.crt >> /etc/ssl/jitsi.dnsname.com/fullchain.pem
Проверить цепочку сертификатов можно тут. Далее настраиваем систему. Добавляем туда следующее (отметим, что в локальный адрес прописываем адрес сервера Jitsi, а в публичный — белый IP, у нас это IP адрес первого сервера): # vim /etc/jitsi/videobridge/sip-communicator.properties
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address> Комментируем следующую строку: org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES
Далее для поддержания конференции на большое количество людей (более 100) добавляем следующие строки в файл: # vim /etc/systemd/system.conf
system.confSPLDefaultLimitNOFILE=65000
DefaultLimitNPROC=65000 DefaultTasksMax=65000 Сохраняем и закрываем файл. Далее: # apt-get -y install jigasi
# systemctl daemon-reload # systemctl restart jitsi # cat /proc/`cat /var/run/jitsi-videobridge/jitsi-videobridge.pid`/limits Настраиваем сервер JibriSPLТеперь нам осталось только поднять сервер с Jibri. Это опционально и нужно только для того, чтобы иметь возможность транслировать конференцию или вести запись конференции.
Jibri можно поставить рядом с Jitsi на одном сервере, но тогда на сервер будет идти бОльшая нагрузка. Мы сделаем это на отдельном сервере, но практически те же самые шаги надо предпринять, чтобы поднять Jibri рядом с Jitsi. И так, приступим. Тут опять надо разрешить пересылку пакетов, открываем файл: # vim /etc/sysctl.conf
Находим строку и раскомментируем (если стоит «0», то меняем на «1») net.ipv4.ip_forward = 1
Применяем правила: # sysctl -p
На следующем шаге нам необходимо убедиться, что модуль обратной связи доступен и работает: # echo "snd-aloop" >> /etc/modules
# modprobe snd-aloop # lsmod | grep snd_aloop Далее установим стабильную версию Google Chrome: # curl -sS -o - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add
# echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/google-chrome.list # apt-get -y update # apt-get -y install google-chrome-stable Создадим директорию и пропишем политики: # mkdir -p /etc/opt/chrome/policies/managed
# echo '{ "CommandLineFlagSecurityWarningsEnabled": false }' >> /etc/opt/chrome/policies/managed/managed_policies.json Скачаем и установим chromedriver: # CHROME_DRIVER_VERSION=`curl -sS chromedriver.storage.googleapis.com/LATEST_RELEASE`
# wget -N http://chromedriver.storage.googleapis.com/$CHROME_DRIVER_VERSION/chromedriver_linux64.zip -P ~/ # unzip ~/chromedriver_linux64.zip -d ~/ # rm ~/chromedriver_linux64.zip # mv -f ~/chromedriver /usr/local/bin/chromedriver # chown root:root /usr/local/bin/chromedriver # chmod 0755 /usr/local/bin/chromedriver Установим зависимости и необходимые пакеты: # apt-get install ffmpeg curl alsa-utils icewm xdotool xserver-xorg-input-void xserver-xorg-video-dummy
Теперь устанавливаем Jibri: Если установка на сервер JitsiSPL# apt-get install -y jibri
Установка на отдельный серверSPL# wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | sudo apt-key add -
# sh -c "echo 'deb https://download.jitsi.org stable/' > /etc/apt/sources.list.d/jitsi-stable.list" # apt-get update # apt-get install -y jibri Далее необходимо добавить Jibri в группы пользователей: # usermod -aG adm,audio,video,plugdev jibri
Для работы Jibri необходима Java 8: # wget -O - https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public | sudo apt-key add -
# add-apt-repository https://adoptopenjdk.jfrog.io/adoptopenjdk/deb/ # apt-get update # apt-get install -y adoptopenjdk-8-hotspot Нужно настроить Java 8 по умолчанию для Jibri. Для этого открываем файл и заменяем слово «java» на полный путь: # vim /opt/jitsi/jibri/launch.sh
/usr/lib/jvm/adoptopenjdk-8-hotspot-amd64/bin/java
Для хранения видео нам надо отвести на сервере специальную директорию. Для этого мы создадим отдельную директорию (по желанию можно создать другую директорию, ее надо будет указать в конфигурации): # mkdir /srv/recordings
Дадим Jibri права на нее и сделаем владельцем: # chown jibri:jibri /srv/recordings
Далее мы настроим Jitsi-сервер для того, чтобы он знал о существовании Jibri и дадим все необходимые настройки и разрешения. Если сервис Jibri на отдельном сервере, тогда переходим на сервер Jitsi. Начнем с конфигурации Prosody. Открываем файл и вставляем в конец файла с подстановкой своих значений: # vim /etc/prosody/conf.avail/jitsi.dnsname.com.cfg.lua
jitsi.dnsname.com.cfg.luaSPL-- internal muc component, meant to enable pools of jibri and jigasi clients
Component "internal.auth.jitsi.dnsname.com" "muc" modules_enabled = { "ping"; } storage = "memory" muc_room_cache_size = 1000 VirtualHost "recorder.jitsi.dnsname.com" modules_enabled = { "ping"; } authentication = "internal_plain" Теперь создадим учетные записи для пользователей «jibri» и «recorder» (пароли, которые мы тут установим, понадобятся нам далее): # prosodyctl register jibri auth.jitsi.dnsname.com PAsswDJibRI
# prosodyctl register recorder recorder.jitsi.dnsname.com PaSSwdReCORD Следующим нашим действием станет прописывание конфигурации Jicofo. Откроем и добавим в файл следующие строки: # vim /etc/jitsi/jicofo/sip-communicator.properties
jicofo/sim-communicator-propertiesSPLorg.jitsi.jicofo.jibri.BREWERY=JibriBrewery@internal.auth.jitsi.dnsname.com
org.jitsi.jicofo.jibri.PENDING_TIMEOUT=90 Далее настроим Jitsi-meet. Добавим/раскомментируем строки в файле: # vim /etc/jitsi/meet/jitsi.dnsname.com-config.js
config.jsSPLfileRecordingsEnabled: true,
liveStreamingEnabled: true, hiddenDomain: 'recorder.jitsi.dnsname.com', Хочу обратить внимание, что следующий шаг необходимо выполнить только в том случае, когда сервис Jibri находится на отдельном сервере. Ранее мы уже установили на сервере Jitsi ufw и открыли порты 22, 80, 443. Сейчас нам надо открыть еще порт 5222, для этого: # ufw allow 5222/tcp
Теперь вернемся на сервер Jibri и добавим в файл jibri.conf следующую конфигурацию (не забываем подставлять свои значения, тут же нам надо указать и пароли для «jibri» и «recorder»): # vim /etc/jitsi/jibri/jibri.conf
jibri.confSPLjibri {
// A unique identifier for this Jibri // TODO: eventually this will be required with no default id = "" // Whether or not Jibri should return to idle state after handling // (successfully or unsuccessfully) a request. A value of 'true' // here means that a Jibri will NOT return back to the IDLE state // and will need to be restarted in order to be used again. single-use-mode = false api { http { external-api-port = 2222 internal-api-port = 3333 } xmpp { // See example_xmpp_envs.conf for an example of what is expected here environments = [ { name = "prod environment" xmpp-server-hosts = ["jitsi.dnsname.com"] xmpp-domain = "jitsi.dnsname.com" control-muc { domain = "internal.auth.jitsi.dnsname.com" room-name = "JibriBrewery" nickname = "jibri-nickname" } control-login { domain = "auth.jitsi.dnsname.com" username = "jibri" password = "PAsswDJibRI" } call-login { domain = "recorder.jitsi.dnsname.com" username = "recorder" password = "PaSSwdReCORD" } strip-from-room-domain = "conference." usage-timeout = 0 trust-all-xmpp-certs = true }] } } recording { recordings-directory = "/srv/recordings" # TODO: make this an optional param and remove the default finalize-script = "/path/to/finalize_recording.sh" } streaming { // A list of regex patterns for allowed RTMP URLs. The RTMP URL used // when starting a stream must match at least one of the patterns in // this list. rtmp-allow-list = [ // By default, all services are allowed ".*" ] } chrome { // The flags which will be passed to chromium when launching flags = [ "--use-fake-ui-for-media-stream", "--start-maximized", "--kiosk", "--enabled", "--disable-infobars", "--autoplay-policy=no-user-gesture-required" ] } stats { enable-stats-d = true } webhook { // A list of subscribers interested in receiving webhook events subscribers = [] } jwt-info { // The path to a .pem file which will be used to sign JWT tokens used in webhook // requests. If not set, no JWT will be added to webhook requests. # signing-key-path = "/path/to/key.pem" // The kid to use as part of the JWT # kid = "key-id" // The issuer of the JWT # issuer = "issuer" // The audience of the JWT # audience = "audience" // The TTL of each generated JWT. Can't be less than 10 minutes. # ttl = 1 hour } call-status-checks { // If all clients have their audio and video muted and if Jibri does not // detect any data stream (audio or video) comming in, it will stop // recording after NO_MEDIA_TIMEOUT expires. no-media-timeout = 30 seconds // If all clients have their audio and video muted, Jibri consideres this // as an empty call and stops the recording after ALL_MUTED_TIMEOUT expires. all-muted-timeout = 10 minutes // When detecting if a call is empty, Jibri takes into consideration for how // long the call has been empty already. If it has been empty for more than // DEFAULT_CALL_EMPTY_TIMEOUT, it will consider it empty and stop the recording. default-call-empty-timeout = 30 seconds } } Теперь нам осталось только перезапустить систему. Для этого введем следующие две команды: первую на сервере Jitsi, а вторую — на Jibri соответственно (если оба сервиса стоят на одном сервере, то обе команды ввести на одном сервере): # systemctl restart jitsi-videobridge2 prosody jicofo
# systemctl enable --now jibri Вот и готово. Теперь можно перейти в браузере на jitsi.dnsname.com запустить конференцию и включить ее запись. Видеофайлы можно найти на сервере Jibri в директории /srv/recordings. Забрать их с сервера можно множеством способов, я оставлю это на ваш полет фантазии, подскажу лишь несколько: 1. Настроить проброс портов (если сервер Jibri вы поставили за NAT), затем подключиться к серверу, например через WinSCP, и стянуть файл себе. То же самое можно сделать, только без проброса портов, если Jibri не за NAT и имеет внешний IP. 2. С помощью утилиты scp. Сообщество Jitsi. Тут же взял мануал для Jibri. Благодарю за внимание! Благодарю Алексея Байко, Дарью Гулькович и Владислава Гедвило за внесенные правки. =========== Источник: habr.com =========== Похожие новости:
Настройка Linux ), #_sistemnoe_administrirovanie ( Системное администрирование ), #_itinfrastruktura ( IT-инфраструктура ), #_*nix, #_videokonferentssvjaz ( Видеоконференцсвязь ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 14:30
Часовой пояс: UTC + 5