Интеграция Jitsi Meet для видеоконференций на сайте
Jitsi Meet — единственное полноценное решение для видеоконференций с открытым исходным кодом, которое можно развернуть на собственном сервере без лицензионных отчислений. Это отличает его от Zoom SDK, Daily.co и Twilio: нет поминутной тарификации, данные не покидают инфраструктуру. Для корпоративных систем, медицинских платформ, образовательных LMS — принципиальный момент.
Два варианта использования
Jitsi as iframe — самый быстрый путь. Встраивается через Jitsi External API и <iframe>. Публичный сервер meet.jit.si не требует установки — используется для прототипов и некритичных задач.
Self-hosted Jitsi — полный контроль. Сервер развёртывается на Ubuntu 22.04, данные остаются в вашей инфраструктуре, доступна кастомизация интерфейса.
Self-hosted: минимальные требования
- 1 vCPU, 2 GB RAM — до 10 участников
- 4 vCPU, 8 GB RAM — до 50 участников (через Jitsi Videobridge)
- Открытые порты: 443/TCP, 10000/UDP (медиа)
- Домен с SSL-сертификатом (Let's Encrypt подходит)
Установка через официальный репозиторий:
curl https://download.jitsi.org/jitsi-key.gpg.key | sudo gpg --dearmor -o /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-get update
sudo apt-get install jitsi-meet
Установщик запросит домен и настроит Nginx + Let's Encrypt автоматически.
Встраивание через Jitsi External API
<script src="https://your-jitsi.domain.com/external_api.js"></script>
const domain = 'your-jitsi.domain.com';
const options = {
roomName: 'meeting-' + roomId,
width: '100%',
height: 600,
parentNode: document.getElementById('jitsi-container'),
userInfo: {
displayName: currentUser.name,
email: currentUser.email,
},
configOverwrite: {
startWithAudioMuted: true,
startWithVideoMuted: false,
disableDeepLinking: true,
prejoinPageEnabled: false, // убрать экран предпросмотра
},
interfaceConfigOverwrite: {
TOOLBAR_BUTTONS: ['microphone', 'camera', 'desktop', 'chat', 'hangup'],
SHOW_JITSI_WATERMARK: false,
SHOW_BRAND_WATERMARK: false,
},
};
const api = new JitsiMeetExternalAPI(domain, options);
// События
api.addEventListener('videoConferenceJoined', ({ roomName }) => {
console.log('Joined:', roomName);
markMeetingStarted(roomName);
});
api.addEventListener('videoConferenceLeft', () => {
api.dispose();
redirectToPostMeeting();
});
api.addEventListener('participantJoined', ({ id, displayName }) => {
logParticipant(id, displayName, 'joined');
});
JWT-аутентификация комнат
По умолчанию Jitsi открыт — любой знающий название комнаты может войти. Для закрытых конференций включается JWT-аутентификация:
# /etc/prosody/conf.avail/your-jitsi.domain.com.cfg.lua
VirtualHost "your-jitsi.domain.com"
authentication = "token"
app_id = "myapp"
app_secret = "your-secret-key"
allow_empty_token = false
JWT генерируется на вашем бэкенде:
use Firebase\JWT\JWT;
class JitsiTokenService
{
private const APP_ID = 'myapp';
private const SECRET = 'your-secret-key';
public function generate(User $user, string $roomName, bool $isModerator = false): string
{
$payload = [
'iss' => self::APP_ID,
'sub' => 'your-jitsi.domain.com',
'aud' => self::APP_ID,
'room' => $roomName,
'exp' => time() + 3600,
'context' => [
'user' => [
'id' => (string) $user->id,
'name' => $user->name,
'email' => $user->email,
'moderator' => $isModerator,
],
],
];
return JWT::encode($payload, self::SECRET, 'HS256');
}
}
Токен передаётся в опциях External API:
const options = {
roomName: roomName,
jwt: '{{ $jitsiToken }}',
// ...
};
Управление комнатами через API
Jitsi не имеет REST API для управления комнатами из коробки, но Prosody (XMPP-сервер внутри Jitsi) предоставляет HTTP API для статистики:
GET https://your-jitsi.domain.com/colibri/stats
Для отслеживания активных конференций и участников в своей системе используем события External API на стороне клиента и webhook-уведомления.
Сроки
- Self-hosted установка на сервер + SSL: 0.5 дня
- Встраивание iframe + базовые события: 1 день
- JWT-аутентификация комнат: 1 день
- Интеграция с бизнес-логикой сайта (создание комнат, запись участников): 2–3 дня







