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-ответ то все работает. Просто подключаете плагин и все заработает без дополнительных настроек |