Інтеграція Jitsi Meet для відеоконференцій на веб-сайті
Jitsi Meet — єдине повнофункціональне рішення для відеоконференцій з відкритим вихідним кодом, яке можна розгорнути на власному сервері без ліцензійних відрахувань. Це відрізняє його від Zoom SDK, Daily.co та Twilio: немає тарифікації за хвилину, дані не залишають вашу інфраструктуру. Для корпоративних систем, медичних платформ, освітніх LMS — принципіальний момент.
Два варіанти використання
Jitsi як 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 дні







