Commit 3c6a54
2024-11-12 19:43:41 Mayekkuzu: Initial Commit/dev/null .. self-hosted/jitsi-meet.md | |
@@ 0,0 1,121 @@ | |
+ | # Jitsi-Meet |
+ | |
+ | **Jitsi Meet** - аналог веб-конференций по типу Яндекс-Телемоста и Zoom, только с упором на self-hosted. Работает на WebRTC, позволяет шарить экранчик, собирать друзьяшек, имеет клиенты на мобилки и приложение на Electron. Можно чатиться, ставить реакции, а в рамках организации можно прикрутить LDAP, Etherpad и прочие штуки которые так любят в организациях. В рамках компании если необходимо организовать свой собственный сервер конференций - лучшее решение. Дискорд, конечно, не заменяет, имеются неудобства при шаринге окна и звуком, потому как звук с микрофона и звук с шары обьединен. Нужно ставить громкость в видео в 10% чтобы не перебивала речь и не оглушала собеседников. |
+ | |
+ | Если хочется без особого пердолинга то лучше взять VDS, потому что если брать домашний сервер в котором все завернуто через реверс-прокси, нужно дополнительно пердолиться с тем чтобы открывать порты. Инсталляция в докере и прокинутый наружу через Nginx Proxy инстанс позволяет общаться тет-а-тет, но подключение третьего собеседника валит всю конференцию. Возможно проблема с STUN но мне было лениво разбираться |
+ | |
+ | Самая копеечная виртуалка в timeweb позволяет держать до 10 пользователей одновременно (1 ядро/1 гб RAM) |
+ | |
+ | Сам комплект ПО состоит из нескольких компонентов: |
+ | |
+ | - **Jitsi Meet** - по сути UI |
+ | - **Prosody** - Внутренний XMPP сервер написаный на Lua. И да, говорят что другие XMPP-серверы использовать в данном комплекте нельзя, потому как очень много своей специфики |
+ | - **Jicofo** - компонент XMPP который позволяет соединять клиентов |
+ | - **Jitsi Videobridge** - внутренний маршрутизатор видео/аудио между участниками конференции. Этот компонент не занимается транскодингом видео |
+ | - **Jigasi** - опциональный компонент для подключения SIP-телефонии. В конференцию можно позвать участника через SIP-телефонию. В данной инструкции не используется. |
+ | - **Jibri** - опциональный компонент для записи видео. Звучит просто, но на деле внутри имеет в себе X11 Server, Chromium, Selenium, IceWM и еще кучу барахла. По сути имитирует участника конференции который находится с участниками в одной комнате и записывает экран, но не отображается в списке |
+ | |
+ | |
+ | # Подготовка поддомена |
+ | |
+ | Создаем A-запись в панели управления вашего регистратора домена |
+ | ``` |
+ | Record Type: A |
+ | Hostname: jitsi.domain.com |
+ | Public IP: IP-адрес сервера VDS |
+ | TTL: 1800 |
+ | ``` |
+ | |
+ | # Установка на Debian 12 |
+ | |
+ | Для начала установим OpenJDK 11. Для этого подключаем доп репозиторий в /etc/apt/sources.list. Добавляем строчку: |
+ | ``` |
+ | deb http://deb.debian.org/debian unstable main non-free contrib |
+ | ``` |
+ | Далее обновляем репозиторий и ставим jdk: |
+ | ``` |
+ | sudo apt update |
+ | sudo apt install openjdk-11-jdk |
+ | ``` |
+ | Указываем hostname на VDS-сервере: |
+ | ``` |
+ | sudo hostnamectl set-hostname jitsi.domain.com |
+ | ``` |
+ | Устанавливаем пакеты curl, gnupg, ufw и lua5.2, потому как с коробки их нет в комплекте с базовой системой Debian |
+ | ``` |
+ | sudo apt install curl gnupg lua5.2 ufw |
+ | ``` |
+ | Добавим репозиторий Prosody |
+ | ``` |
+ | sudo curl -sL https://prosody.im/files/prosody-debian-packages.key -o /etc/apt/keyrings/prosody-debian-packages.key |
+ | 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 |
+ | ``` |
+ | Добавим репозиторий Jitsi |
+ | ``` |
+ | curl -sL https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg' |
+ | 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 |
+ | ``` |
+ | Обновляем репозиторий |
+ | ``` |
+ | sudo apt update |
+ | ``` |
+ | Указываем какие порты будут открыты с помощью UFW и включаем фаирволл |
+ | ``` |
+ | sudo ufw allow 80/tcp |
+ | sudo ufw allow 443/tcp |
+ | sudo ufw allow 10000/udp |
+ | sudo ufw allow 22/tcp |
+ | sudo ufw allow 3478/udp |
+ | sudo ufw allow 5349/tcp |
+ | sudo ufw enable |
+ | ``` |
+ | Устанавливаем пакет jitsi-meet |
+ | ``` |
+ | sudo apt install jitsi-meet |
+ | ``` |
+ | При установке будет задан вопрос о домене и сертификате. Выбирайте Let's Encrypt Certificate. Далее вводим почту. Таким образом автоматически установится новый сертификат |
+ | Далее можно заходить и пробовать создать комнату и звать друзей попробовать |
+ | |
+ | ## Дополнительная настройка |
+ | Если используется сценарий когда сервер находится за NAT, или же есть проблема когда собеседники друг друга не слышат то нужно внести в фаил /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> |
+ | ``` |
+ | |
+ | ## Включение авторизации |
+ | Необходимая вещь, когда сервер торчит в интернеты наружу. Позволяет только авторизованным юзерам создавать комнаты, при этом гостевой доступ уже в созданные комнаты остается без пароля. При этом создатель комнаты может дополнительно защитить паролем вход в комнату. |
+ | |
+ | Открываем фаил /etc/prosody/conf.avail/jitsi.domain.com.cfg.lua и в поле VirtualHost с именем хоста меняем jitsi-anonymous на internal_hashed. Таким образом мы переключим анонимный вход на встроенный механизм аутентификации. |
+ | |
+ | Теперь добавим возможность подключения гостям. После блока где мы переключили механизм аутентицикации добавляем следующее: |
+ | ``` |
+ | VirtualHost "guest.jitsi.domain.com" |
+ | authentication = "anonymous" |
+ | c2s_require_encryption = false |
+ | ``` |
+ | Важно уточнить что домен guest.jitsi.domain.com не нужно создавать в панели регистратора и прописывать A-запись и генерировать сертификат. Особенность работы конфигурации Jitsi Meet. |
+ | |
+ | Теперь открываем /etc/jitsi/meet/jitsi.domain.com-config.js и блок hosts приводим к такому виду: |
+ | ``` |
+ | hosts: { |
+ | // XMPP domain. |
+ | domain: 'jitsi.domain.com', |
+ | anonymousdomain: 'guest.jitsi.domain.com', |
+ | ``` |
+ | Последним моментом необходимо привести блок authentication в фаиле /etc/jitsi/jicofo/jicofo.conf к такому виду: |
+ | ``` |
+ | authentication: { |
+ | enabled: true |
+ | type: XMPP |
+ | login-url: jitsi.domain.com |
+ | } |
+ | ``` |
+ | Перезапускаем сервисы: |
+ | ``` |
+ | sudo systemctl restart prosody jicofo jitsi-videobridge2 |
+ | ``` |
+ | Для создания учетной записи воспользуемся командой: |
+ | ``` |
+ | sudo prosodyctl register LOGIN jitsi.domain.com PASSWORD |
+ | ``` |