Пошаговая инструкция · Самостоятельная установка
Как установить Jitsi Meet на сервер
Пошаговая инструкция для самостоятельной установки. Установим Jitsi Meet из официальных пакетов, настроим HTTPS и доступ по приглашениям, проверим видеосвязь и подготовим восстановление сервера.
Что подготовить и как читать инструкцию #
Установим отдельный сервер Jitsi Meet для видеовстреч в браузере. Эта инструкция ведёт от чистой ОС до закрытой тестовой встречи: каждому участнику выдаётся ссылка с временным пропуском. Запись разговоров и телефонный шлюз требуют отдельных компонентов.
Нужны Ubuntu 26.04 LTS, постоянный публичный IPv4, домен meet.example.org и SSH с sudo. Заменяйте домен своим во всех командах. Выполните подготовку Ubuntu до настройки Docker и веб-сервера; Nginx и HTTPS настроит установщик Jitsi. Сервер должен быть свободен от других сайтов на 80/443: Jitsi настроит Nginx и TURN. Ресурсы выберите по руководству Jitsi.
Команды выполняйте в терминале сервера после подключения по SSH, если шаг не указывает другое место. sudo даёт команде права администратора. Действия в браузере выполняйте на своём компьютере. Домены, IP-адреса и значения ВАШ_ПАРОЛЬ из примеров заменяйте своими до выполнения команды.
Двигайтесь по одному шагу и проверяйте результат перед следующим. Блок с <<EOF или другим именем завершения копируйте целиком: он записывает содержимое одного файла. При работе в nano сохраняйте файл клавишами Ctrl+O, Enter и выходите Ctrl+X. Если прервали SSH-сеанс, снова перейдите в указанный каталог; переменные предыдущего сеанса потребуется задать заново.
Шаг 1. Добавьте необходимые пакеты #
Установим инструменты репозиториев и Nginx, затем включим Ubuntu universe, где находятся зависимости Jitsi. Сам Jitsi пока не устанавливается.
sudo apt update
sudo apt install -y software-properties-common curl ca-certificates gnupg nginx-full
sudo add-apt-repository -y universe
sudo apt updateapt завершился без ошибки; universe включён.
Шаг 2. Установите и выберите Java 17 #
Jitsi требует именно Java 17. После установки update-alternatives покажет варианты: введите номер пути Java 17, если вариантов несколько. Не выбирайте другую ветку только потому, что она новее.
sudo apt install -y openjdk-17-jre-headless
sudo update-alternatives --config java
java -versionjava -version сообщает 17.
Шаг 3. Подготовьте имя сервера #
Создайте A-запись домена на публичный IPv4, дождитесь обновления DNS. AAAA нужна только при работающем IPv6. Обычный HTTP-прокси DNS-провайдера для видеотрафика не подходит. Команда задаёт имя самой машины. В sudo nano /etc/hosts добавьте отдельную строку с публичным IP и доменом, например 203.0.113.10 meet.example.org; существующие localhost-записи сохраните.
sudo hostnamectl set-hostname meet.example.orggetent ahostsv4 meet.example.orggetent ahostsv4 meet.example.org возвращает правильный адрес; домен доступен напрямую.
Шаг 4. Разрешите порты Jitsi #
TCP 80/443 нужны сайту и сертификату, UDP 10000 — звуку и видео, 3478/UDP и 5349/TCP — TURN для сетей с ограничениями. SSH 22 сохраняет доступ к серверу; если порт другой, измените правило. Продублируйте правила в панели провайдера. При NAT нужны соответствующие пробросы на сервер.
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp
sudo ufw allow 3478/udp
sudo ufw allow 5349/tcp
sudo ufw enable
sudo ufw status verboseUFW active, правила видны; новое SSH-соединение открывается, текущее пока не закрывайте.
Шаг 5. Добавьте репозиторий Prosody #
Prosody обслуживает обмен сообщениями для встречи. Добавим официальный ключ и источник пакетов для Ubuntu 26.04, кодовое имя resolute. Ключ привязан только к этому источнику через signed-by.
curl -fsSL https://prosody.im/files/prosody-debian-packages.key | sudo tee /usr/share/keyrings/prosody.asc >/dev/null
printf 'deb [signed-by=/usr/share/keyrings/prosody.asc] https://packages.prosody.im/debian resolute main\n' | sudo tee /etc/apt/sources.list.d/prosody.listКлюч и файл prosody.list созданы без ошибки.
Шаг 6. Добавьте репозиторий Jitsi #
Второй ключ проверяет пакеты Jitsi, не пакеты Prosody. После добавления обновим список. Если apt сообщает об отсутствующем Release для resolute, остановитесь и проверьте поддержку репозитория; не подменяйте выпуск Ubuntu вслепую.
curl -fsSL https://download.jitsi.org/jitsi-key.gpg.key | gpg --dearmor | sudo tee /usr/share/keyrings/jitsi-keyring.gpg >/dev/null
printf 'deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/\n' | sudo tee /etc/apt/sources.list.d/jitsi-stable.list
sudo apt updateapt update успешно проверил оба источника.
Шаг 7. Найдите выбранный выпуск Jitsi #
Инструкция относится ветке пакета 2.0.11248. Переменная сохранит точный номер доступного пакета для следующего шага. Команда test завершится ошибкой, если выпуск уже отсутствует: тогда нужен пересмотр релиза, а не установка с пустым номером. Не закрывайте этот SSH-сеанс между шагами.
JITSI_PACKAGE_VERSION="$(apt-cache madison jitsi-meet | awk '$3 ~ /^2\.0\.11248([.-]|$)/ {print $3; exit}')"
test -n "$JITSI_PACKAGE_VERSION"printf "%s
" "$JITSI_PACKAGE_VERSION"Напечатан непустой номер 2.0.11248…; test не вернул ошибку.
Шаг 8. Установите Jitsi и ответьте установщику #
APT откроет вопросы настройки. Для hostname введите ваш домен вместо meet.example.org. Выберите Let’s Encrypt Certificate и укажите рабочую почту администратора. DNS и TCP 80 должны уже работать. Подождите завершения: установщик создаёт несколько взаимосвязанных служб.
sudo apt install "jitsi-meet=$JITSI_PACKAGE_VERSION"Установка завершена, сертификат выпущен для вашего домена; ошибок настройки пакетов нет.
Шаг 9. Создайте секрет приглашений #
Закроем сервер для посетителей без приглашения. Генератор выдаёт 64 hex-символа; сохраните строку в менеджере паролей. Она нужна плагину Jitsi и программе, которая выдаёт приглашения.
openssl rand -hex 32Секрет сохранён; в примерах вместо ВАШ_СЕКРЕТ будет именно он.
Шаг 10. Установите поддержку приглашений #
Пакет jitsi-meet-tokens добавляет проверку подписанных пропусков JWT. В вопросах установщика укажите Application ID udlt-meet и сохранённый Application Secret. python3-jwt нужен для выдачи первого приглашения следующим шагом.
sudo apt install jitsi-meet-tokens python3-jwtПакеты установлены, оба параметра заданы.
Шаг 11. Проверьте настройки доступа Prosody #
Откройте sudo nano /etc/prosody/conf.avail/meet.example.org.cfg.lua, заменив имя файла вашим доменом. Пакет уже настроил основной VirtualHost: сверяйте только показанные параметры, не заменяйте весь файл. В существующем списке modules_enabled компонента conference.meet.example.org должна быть строка "token_verification"; остальные модули сохраните. allow_empty_token=false требует пропуск от каждого участника. Анонимный guest-домен здесь не нужен; XMPP authentication в jicofo.conf для этой схемы не включайте.
VirtualHost "meet.example.org"
authentication = "token"
app_id = "udlt-meet"
app_secret = "ВАШ_СЕКРЕТ"
allow_empty_token = false
-- В существующем modules_enabled компонента conference.meet.example.org:
-- "token_verification";
-- После редактирования:
-- sudo systemctl restart prosody jicofo jitsi-videobridge2Основной домен использует token, app_id совпадает с udlt-meet, app_secret — с вашим секретом; проверка комнат включена.
Шаг 12. Примените настройки доступа #
Перезапустим три связанные службы после сохранения файла. Эта операция прерывает текущие встречи; пока сервер новый, пользователей ещё нет.
sudo systemctl restart prosody jicofo jitsi-videobridge2
sudo systemctl is-active prosody jicofo jitsi-videobridge2Все три службы возвращаются в active; при ошибке проверьте синтаксис изменённого файла и журнал Prosody.
Шаг 13. Выдайте первое приглашение #
Копируйте весь блок Python, предварительно заменив домен внутри него своим. Программа скрыто спросит Application Secret и напечатает ссылку на комнату test-meeting сроком на час. Пропуск ограничен этой комнатой; room="*" для обычного приглашения не требуется. Передавайте ссылку только участникам, секрет им не отправляйте.
python3 - <<'TOKEN'
import getpass, time, jwt
secret = getpass.getpass('Application Secret: ')
now = int(time.time())
payload = {'aud': 'jitsi', 'iss': 'udlt-meet', 'sub': 'meet.example.org',
'room': 'test-meeting', 'iat': now, 'nbf': now - 10, 'exp': now + 3600}
token = jwt.encode(payload, secret, algorithm='HS256')
print('https://meet.example.org/test-meeting?jwt=' + token)
TOKENПолучена HTTPS-ссылка с ?jwt=; секрет не напечатан. Для другой комнаты или после истечения часа создайте новое приглашение.
Шаг 14. Проверьте службы и HTTPS #
Проверим компоненты, конфигурацию Nginx и ответ сайта. Открытие веб-страницы ещё не доказывает, что видеопоток проходит: это проверим отдельно.
sudo systemctl is-active nginx prosody jicofo jitsi-videobridge2
sudo nginx -t
curl -I https://meet.example.orgВсе четыре службы active, nginx -t успешен, curl получает ответ без ошибки сертификата.
Шаг 15. Откройте встречу по приглашению #
На компьютере откройте полученную ссылку в браузере. Разрешите доступ к камере и микрофону, проверьте их в предварительном просмотре и войдите. Подключите второго участника по этой же ссылке.
Вы слышите друг друга и видите видео. При отсутствии устройств сначала проверьте разрешения браузера.
Шаг 16. Проверьте третьего участника и закрытый доступ #
Подключите третье устройство, желательно через мобильный интернет: встреча двоих может идти напрямую, а троих проверяет видеомост. Затем в отдельном приватном окне откройте адрес этой комнаты без ?jwt=.
Трое слышат и видят друг друга; посетитель без пропуска не входит. Если двое работают, а трое нет, проверьте UDP 10000 и NAT по официальному quickstart.
Шаг 17. Найдите причину ошибок встречи #
Эти команды показывают последние события видеомоста и контроллера, журнал Prosody и время сервера. Для отказа по токену важны домен, комната, секрет и срок; для пропадающего видео — сетевой маршрут. Исправляйте конкретную первую ошибку, не повторяйте всю установку.
sudo journalctl -u jicofo -u jitsi-videobridge2 --since '-15 minutes' --no-pager
sudo tail -n 50 /var/log/prosody/prosody.log
timedatectl statusПосле исправления повторите проблемное действие: оно работает, в журнале нет соответствующей новой ошибки.
Шаг 18. Подготовьте копию конфигурации #
Jitsi здесь не записывает разговоры. Сохраняем версии пакетов, настройки, сертификаты и состояние Prosody, чтобы восстановить собственный сервер. umask ограничивает доступ к новым файлам; копия содержит секрет подписи приглашений.
umask 077
mkdir -p "$HOME/jitsi-backup"
dpkg-query -W 'jitsi*' 'jicofo*' 'prosody*' > "$HOME/jitsi-backup/packages.txt"Закрытый каталог создан, packages.txt содержит установленные версии.
Шаг 19. Остановите встречи перед копией #
Предупредите пользователей и выберите окно обслуживания. Остановим компоненты встречи, чтобы сохранить согласованное состояние Prosody. Сайт Nginx может оставаться доступным, но новые звонки временно не работают.
sudo systemctl stop prosody jicofo jitsi-videobridge2Команда завершилась; активные встречи прерваны в согласованное время.
Шаг 20. Сохраните настройки и состояние #
Архив собирает конфигурацию Jitsi, Prosody и Nginx, сертификаты и данные Prosody. Перенесите архив и список пакетов в закрытое внешнее хранилище. Не публикуйте копию вместе с обычными файлами сайта.
sudo tar -czpf "$HOME/jitsi-backup/state.tar.gz" /etc/jitsi /etc/prosody /etc/nginx /etc/letsencrypt /var/lib/prosodystate.tar.gz создан без ошибки и не пуст.
Шаг 21. Возобновите встречи и проверьте восстановление #
Вернём службы и повторим звонок трёх участников. Восстановление проверяйте на отдельном сервере с совместимыми версиями и отдельным тестовым доменом: перенесите конфигурацию, права и состояние, перевыпустите сертификат для его адреса. До обновления прочитайте изменения стабильного релиза и создайте свежую копию. При постоянном использовании автоматизируйте выдачу токенов на серверной стороне, сохранив секрет вне браузера.
sudo systemctl start prosody jicofo jitsi-videobridge2Службы работают и тестовый звонок проходит; отдельная проверка восстановления также возвращает рабочую встречу.