本地部署开源视频会议解决方案 Jitsi Meet

本地部署开源视频会议解决方案 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;
}

小风博客

打 赏

小风博客
请点评论按钮,登录后发表评论
  • 最新评论
  • 总共0条评论