Blame
3c6a54 | Mayekkuzu | 2024-11-12 19:43:41 | 1 | # Jitsi-Meet |
2 | ||||
3 | **Jitsi Meet** - аналог веб-конференций по типу Яндекс-Телемоста и Zoom, только с упором на self-hosted. Работает на WebRTC, позволяет шарить экранчик, собирать друзьяшек, имеет клиенты на мобилки и приложение на Electron. Можно чатиться, ставить реакции, а в рамках организации можно прикрутить LDAP, Etherpad и прочие штуки которые так любят в организациях. В рамках компании если необходимо организовать свой собственный сервер конференций - лучшее решение. Дискорд, конечно, не заменяет, имеются неудобства при шаринге окна и звуком, потому как звук с микрофона и звук с шары обьединен. Нужно ставить громкость в видео в 10% чтобы не перебивала речь и не оглушала собеседников. | |||
4 | ||||
5 | Если хочется без особого пердолинга то лучше взять VDS, потому что если брать домашний сервер в котором все завернуто через реверс-прокси, нужно дополнительно пердолиться с тем чтобы открывать порты. Инсталляция в докере и прокинутый наружу через Nginx Proxy инстанс позволяет общаться тет-а-тет, но подключение третьего собеседника валит всю конференцию. Возможно проблема с STUN но мне было лениво разбираться | |||
6 | ||||
7 | Самая копеечная виртуалка в timeweb позволяет держать до 10 пользователей одновременно (1 ядро/1 гб RAM) | |||
8 | ||||
9 | Сам комплект ПО состоит из нескольких компонентов: | |||
10 | ||||
11 | - **Jitsi Meet** - по сути UI | |||
12 | - **Prosody** - Внутренний XMPP сервер написаный на Lua. И да, говорят что другие XMPP-серверы использовать в данном комплекте нельзя, потому как очень много своей специфики | |||
13 | - **Jicofo** - компонент XMPP который позволяет соединять клиентов | |||
14 | - **Jitsi Videobridge** - внутренний маршрутизатор видео/аудио между участниками конференции. Этот компонент не занимается транскодингом видео | |||
15 | - **Jigasi** - опциональный компонент для подключения SIP-телефонии. В конференцию можно позвать участника через SIP-телефонию. В данной инструкции не используется. | |||
16 | - **Jibri** - опциональный компонент для записи видео. Звучит просто, но на деле внутри имеет в себе X11 Server, Chromium, Selenium, IceWM и еще кучу барахла. По сути имитирует участника конференции который находится с участниками в одной комнате и записывает экран, но не отображается в списке | |||
17 | ||||
18 | ||||
19 | # Подготовка поддомена | |||
20 | ||||
21 | Создаем A-запись в панели управления вашего регистратора домена | |||
22 | ``` | |||
23 | Record Type: A | |||
24 | Hostname: jitsi.domain.com | |||
25 | Public IP: IP-адрес сервера VDS | |||
26 | TTL: 1800 | |||
27 | ``` | |||
28 | ||||
29 | # Установка на Debian 12 | |||
30 | ||||
31 | Для начала установим OpenJDK 11. Для этого подключаем доп репозиторий в /etc/apt/sources.list. Добавляем строчку: | |||
32 | ``` | |||
33 | deb http://deb.debian.org/debian unstable main non-free contrib | |||
34 | ``` | |||
35 | Далее обновляем репозиторий и ставим jdk: | |||
36 | ``` | |||
37 | sudo apt update | |||
38 | sudo apt install openjdk-11-jdk | |||
39 | ``` | |||
40 | Указываем hostname на VDS-сервере: | |||
41 | ``` | |||
42 | sudo hostnamectl set-hostname jitsi.domain.com | |||
43 | ``` | |||
44 | Устанавливаем пакеты curl, gnupg, ufw и lua5.2, потому как с коробки их нет в комплекте с базовой системой Debian | |||
45 | ``` | |||
46 | sudo apt install curl gnupg lua5.2 ufw | |||
47 | ``` | |||
48 | Добавим репозиторий Prosody | |||
49 | ``` | |||
50 | sudo curl -sL https://prosody.im/files/prosody-debian-packages.key -o /etc/apt/keyrings/prosody-debian-packages.key | |||
51 | echo "deb [signed-by=/etc/apt/keyrings/prosody-debian-packages.key] http://packages.prosody.im/debian $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/prosody-debian-packages.list | |||
52 | ``` | |||
53 | Добавим репозиторий Jitsi | |||
54 | ``` | |||
55 | curl -sL https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg' | |||
56 | echo "deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/" | sudo tee /etc/apt/sources.list.d/jitsi-stable.list | |||
57 | ``` | |||
58 | Обновляем репозиторий | |||
59 | ``` | |||
60 | sudo apt update | |||
61 | ``` | |||
62 | Указываем какие порты будут открыты с помощью UFW и включаем фаирволл | |||
63 | ``` | |||
64 | sudo ufw allow 80/tcp | |||
65 | sudo ufw allow 443/tcp | |||
66 | sudo ufw allow 10000/udp | |||
67 | sudo ufw allow 22/tcp | |||
68 | sudo ufw allow 3478/udp | |||
69 | sudo ufw allow 5349/tcp | |||
70 | sudo ufw enable | |||
71 | ``` | |||
72 | Устанавливаем пакет jitsi-meet | |||
73 | ``` | |||
74 | sudo apt install jitsi-meet | |||
75 | ``` | |||
76 | При установке будет задан вопрос о домене и сертификате. Выбирайте Let's Encrypt Certificate. Далее вводим почту. Таким образом автоматически установится новый сертификат | |||
77 | Далее можно заходить и пробовать создать комнату и звать друзей попробовать | |||
78 | ||||
79 | ## Дополнительная настройка | |||
80 | Если используется сценарий когда сервер находится за NAT, или же есть проблема когда собеседники друг друга не слышат то нужно внести в фаил /etc/jitsi/videobridge/sip-communicator.properties дополнительно такие строчки: | |||
81 | ``` | |||
82 | org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address> | |||
83 | org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address> | |||
84 | ``` | |||
85 | ||||
86 | ## Включение авторизации | |||
87 | Необходимая вещь, когда сервер торчит в интернеты наружу. Позволяет только авторизованным юзерам создавать комнаты, при этом гостевой доступ уже в созданные комнаты остается без пароля. При этом создатель комнаты может дополнительно защитить паролем вход в комнату. | |||
88 | ||||
89 | Открываем фаил /etc/prosody/conf.avail/jitsi.domain.com.cfg.lua и в поле VirtualHost с именем хоста меняем jitsi-anonymous на internal_hashed. Таким образом мы переключим анонимный вход на встроенный механизм аутентификации. | |||
90 | ||||
91 | Теперь добавим возможность подключения гостям. После блока где мы переключили механизм аутентицикации добавляем следующее: | |||
92 | ``` | |||
93 | VirtualHost "guest.jitsi.domain.com" | |||
94 | authentication = "anonymous" | |||
95 | c2s_require_encryption = false | |||
96 | ``` | |||
97 | Важно уточнить что домен guest.jitsi.domain.com не нужно создавать в панели регистратора и прописывать A-запись и генерировать сертификат. Особенность работы конфигурации Jitsi Meet. | |||
98 | ||||
99 | Теперь открываем /etc/jitsi/meet/jitsi.domain.com-config.js и блок hosts приводим к такому виду: | |||
100 | ``` | |||
101 | hosts: { | |||
102 | // XMPP domain. | |||
103 | domain: 'jitsi.domain.com', | |||
104 | anonymousdomain: 'guest.jitsi.domain.com', | |||
105 | ``` | |||
106 | Последним моментом необходимо привести блок authentication в фаиле /etc/jitsi/jicofo/jicofo.conf к такому виду: | |||
107 | ``` | |||
108 | authentication: { | |||
109 | enabled: true | |||
110 | type: XMPP | |||
111 | login-url: jitsi.domain.com | |||
112 | } | |||
113 | ``` | |||
114 | Перезапускаем сервисы: | |||
115 | ``` | |||
116 | sudo systemctl restart prosody jicofo jitsi-videobridge2 | |||
117 | ``` | |||
118 | Для создания учетной записи воспользуемся командой: | |||
119 | ``` | |||
120 | sudo prosodyctl register LOGIN jitsi.domain.com PASSWORD | |||
121 | ``` | |||
dee409 | Mayekkuzu | 2024-12-11 15:38:53 | 122 | ## Zabbix мониторинг |
123 | Шаблон берем из зеркала здесь: https://git.y2z.ru/PublicMirrors/jitsi-videobridge-zabbix-template | |||
124 | ||||
125 | Теперь для работы необходимо активировать REST API в модуле colibri | |||
126 | ||||
127 | Исходя из предыдущей установки, правим файлы: | |||
128 | Добавляем блок в `/etc/jitsi/videobridge/jvb.conf` | |||
129 | ``` | |||
130 | apis { | |||
131 | rest { | |||
132 | enabled = true | |||
133 | } | |||
134 | } | |||
135 | ``` | |||
136 | Добавляем в конце строчку в файле `/etc/jitsi/videobridge/config` | |||
137 | ``` | |||
138 | JVB_OPTS="--apis=rest,xmpp" | |||
139 | ``` | |||
140 | Приводим ниже перечисленные строчки к виду и добавляем если они отсутствуют в файле `/etc/jitsi/videobridge/sip-communicator.properties` | |||
141 | ``` | |||
142 | org.jitsi.videobridge.ENABLE_STATISTICS=true | |||
143 | org.jitsi.videobridge.STATISTICS_TRANSPORT=muc,colibri | |||
144 | org.jitsi.videobridge.STATISTICS_INTERVAL=5000 | |||
145 | ``` | |||
146 | Рестартим все сервисы | |||
147 | ``` | |||
148 | sudo systemctl restart prosody jicofo jitsi-videobridge2 | |||
149 | ``` | |||
150 | Проверяем работу API: | |||
151 | ``` | |||
152 | curl localhost:8080/colibri/stats | jq | |||
153 | ``` | |||
154 | Если появляется JSON-ответ то все работает. Просто подключаете плагин и все заработает без дополнительных настроек |