本地部署开源视频会议解决方案 Jitsi Meet
Jitsi Meet 是一款基于 WebRTC 技术的开源视频会议解决方案,它允许用户通过互联网进行高质量的视频通话、语音通话和文本聊天,非常适合用于对于视频会议使用频率不是很高的中小企业等场景,大的平台都收费了,免费时长40分钟根本不够用的,所以决定自己部署一套,实现会议时长自由。
本文将详细介绍如何利用 Docker 在本地部署 Jitsi Meet 并实现外网访问本地部署的 Jitsi Meet 。
我的安装环境:
系统:Fedora42 已经安装Docder docker-compose
1.下载 Jitsi Meet Docker 配置文件
https://github.com/jitsi/docker-jitsi-meet/releases
创建一个新的项目目录来存放 Jitsi Meet 的 Docker 配置文件,并进入该目录:
[root@fedora /]# mkdir sjd && cd sjd
[root@fedora sjd]# tar -zxvf docker-jitsi-meet-stable-10431.tar.gz
[root@fedora sjd]# mv docker-jitsi-meet-stable-10431 docker-jitsi-meet
[root@fedora sjd]# cd docker-jitsi-meet/
[root@fedora docker-jitsi-meet]# cp env.example .env
[root@fedora docker-jitsi-meet]# ./gen-passwords.sh
[root@fedora docker-jitsi-meet]# mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}
[root@fedora docker-jitsi-meet]# vim .env修改配置文件.env
HTTP_PORT=8000 HTTPS_PORT=8443 主要用的端口 TZ=Asia/Shanghai ENABLE_XMPP_WEBSOCKET=0 PUBLIC_URL= 访问系统的域名,用IP访问会出问题
2.启动 Jitsi Meet 容器
[root@fedora docker-jitsi-meet]# docker compose up -d [root@fedora docker-jitsi-meet]#
3.启动成功后,在浏览器中输入 https://本地 IP:8443 ,可以看到进入了 Jitsi Meet 的登录界面

4.实现外网访问,做了两步
一.在路由器上做了UDP10000的端口转发

二.绑定域名映射,实现外网域名访问,因为我使用了防火墙,直接防火墙上绑定域名映射到系统即可,外网就可以直接域名访问了

5.既然是公司使用,首先还是要修改LOGO和网页标题等内容
创建一个JS文件,放在/sjd/docker-jitsi-meet 目录里面
[root@fedora docker-jitsi-meet]# vim custom-interface_config.js
内容为:
// 修改主标题
interfaceConfig.APP_NAME = '东风世星-会议系统';
interfaceConfig.PROVIDER_NAME = '东风世星-会议系统';
interfaceConfig.DEFAULT_WELCOME_PAGE_LOGO_URL ='https://hotxf.com/static/Home/image/logo.png';
interfaceConfig.JITSI_WATERMARK_LINK ='https://hotxf.com';
// 修改底部的手机APP下载连接
interfaceConfig.MOBILE_DOWNLOAD_LINK_ANDROID = 'https://hotxf.com/upload/JitsiMeet.apk';
interfaceConfig.MOBILE_DOWNLOAD_LINK_F_DROID = 'https://hotxf.com/upload/JitsiMeet.apk';
// 添加新副标题(可选)
document.addEventListener('DOMContentLoaded', () => {
const subtitle = document.querySelector('.header-text-subtitle');
const subtitle2 = document.querySelector('.header-text-title');
const subtitle3 = document.querySelectorAll('.watermark.leftwatermark.no-margin');
const subtitle4 = document.querySelector('.welcome-footer-row-1-text');
if (subtitle) subtitle.textContent = '安全且高品质的会议';
if (subtitle2) subtitle2.textContent = '东风世星-会议系统';
if (subtitle4) subtitle4.textContent = '手机版APP – 下载我们的APP,随时随地开始会议';
if (subtitle3.length>0){
var img = subtitle3[1]
img.style.width = '140px';
img.style.height = '38px';
}
});
document.addEventListener('DOMContentLoaded', () => {
setTimeout(() => {
const subtitle = document.querySelector('.header-text-subtitle');
const subtitle2 = document.querySelector('.header-text-title');
const subtitle4 = document.querySelector('.welcome-footer-row-1-text');
if (subtitle) subtitle.textContent = '安全且高品质的会议';
if (subtitle2) subtitle2.textContent = '东风世星-会议系统';
if (subtitle4) subtitle4.textContent = '手机版APP – 下载我们的APP,随时随地开始会议';
// // 获取所有带有类名'welcome-badge'的元素
// var badges = document.querySelectorAll('.welcome-badge');
// // 检查是否至少有两个这样的元素
// if (badges.length >= 2) {
// // 获取第二个元素的第一个(也是唯一的)img元素
// var imgElement = badges[1].querySelector('img');
// // 检查是否找到了img元素
// if (imgElement) {
// // 修改src属性
// imgElement.src = 'https://hotxf.com/static/Home/image/logo.png';
// }
// }
}, 2000); // 延迟确保DOM加载完成
});把以上创建的JS文件加载到系统里,修改docker-compose.yml文件,添加下面一行内容
[root@fedora docker-jitsi-meet]# vim docker-compose.yml
- /sjd/docker-jitsi-meet/custom-interface_config.js:/config/custom-interface_config.js:ro

重启WEB服务
[root@fedora docker-jitsi-meet]# docker compose restart web
6.其它配置,以上配置基本上完成了视频会议系统的基本使用,但是由于公网使用性,系统默认是任何人都可以开启会议加入会议,不需要账号验证.方便是方便公网使用还是要做账号认证才可以创建会议,加入会议不需要账号,避免别人白票服务器资源
修改.env配置文件,认证模式:internal 完成后就只能登录用户创建会议,访客只能参加会议,
[root@fedora docker-jitsi-meet]# vim .env # 启用身份验证 ENABLE_AUTH=1 # 启用访客访问权限 ENABLE_GUESTS=1 # 认证模式 type: internal, jwt, ldap or matrix AUTH_TYPE=internal [root@fedora docker-jitsi-meet]# docker compose up -d #修改完后重起 [root@fedora docker-jitsi-meet]# docker compose exec prosody /bin/bash #进入prosody容器中执行shell root@5f2830d99394:/# prosodyctl --config /config/prosody.cfg.lua register sjd meet.jitsi shejiadong #创建用户名:sjd 密码:shejiadong usermanager info User account created: sjd@meet.jitsi
如果需要整合公司现有的系统,可以使用jwt认证,使公司现有系统进行jwt认证后直接使用会议无需手动登录,
下面是使用实例:快速会议是做好的连接点击就直接进入会议室页面,也可以自定义会议室名称进入会议
/**
* 生成验签jwt 视频会议用户认证使用
* @param $user 用户信息
* @return mixed
*/
function signToken($user){
$key='sjd';
$token = [
'context' => [
'user' => [
'avatar' => 'https://hotxf.com/'.$user['head_img'],
'name' => $user['name'],
'email' => ''
]
],
'aud' => 'sjd', // 受众(Audience) - 接收该JWT的一方
'iss' => 'sjd', // 签发者(Issuer) - 必须与Jitsi配置中的JWT_APP_ID一致
'sub' => 'hy.hotxf.com', // 主题(Subject) - 必须与Jitsi服务域名匹配
'room' => '*', // 允许创建任意房间
'exp' => time() + (24 * 60 * 60) // 24小时后过期
];
// print_r($token);
$jwt = JWT::encode($token, $key, "HS256"); //生成了 token
return $jwt;
}
本文为 小风原创文章,转载无需和我联系,但请注明来自 小风博客www.hotxf.com
