实时音视频 本地化部署 jitsi-meet docker部署+配置+ssl证书+定制开发全套方案

嗨嗨嗨又是我,一个准备跑路的程序员

新公司是一家20人上下的小公司, 我13k进来直接让我做技术组长。当时我的内心活动:哦?这么说我要在这里走上管理路线咯?事实证明我还是太天真了,我的上司除了吹牛和抗压啥都不会,我上司的上司就是老板自然也啥都不会,那么好家伙,我成架构师了!??😧我什么档次我不知道吗,配做架构师吗?再加上136加班/老板有拖欠工资前科,于是又准备跑路了。

废话完毕,上干货,这次跑路前让我一周内做个视频会议出来,从查资料到部署测试改配置集成居然真的只花了4天
官方文档:官方文档(英文)
首先准备docker环境,docker-compose环境(必须), 服务器我是centos 7, 官方推荐4g以上内存
安装按官方文档一步步来基本没问题,可能有人英文不好,我这边把每步都写出来
1.cd到服务器自定义的目录,下载最新的release版本,此处下载后文件可能不是zip结尾的,可以mv xxxx xxxx.zip重命名一下

wget $(curl -s https://api.github.com/repos/jitsi/docker-jitsi-meet/releases/latest | grep 'zip' | cut -d\" -f4)

2.解压

unzip -d xxx.zip  目标位置

3.拷贝配置文件

cp env.example .env

4.编辑配置文件

vim .env
# 配置文件位置, 这个最好不要修改, 涉及到后面的所有配置位置, 这边是放在当前登录用户根目录下
CONFIG=~/.jitsi-meet-cfg
# http端口
HTTP_PORT=18000
# https 端口
HTTPS_PORT=18443
# 访问地址,这边的地址会自动生成到后续的config.js中
PUBLIC_URL=192.168.2.17:18000
TZ=Asia/Shanghai

编辑完成:wq保存

5.生成强密码

./gen-passwords.sh

6.生成配置文件目录(如果修改了.env内的CONFIG此处要一起修改)

mkdir -p ~/.jitsi-meet-cfg/{web,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}

7.docker compose up -d
此时若是首次部署会去下载镜像, 国内源基本挂了, 这边找了我一下午加一晚上, 此处贴上可用的源

{ "registry-mirrors": [ "https://docker.1panel.live", "https://hub.rat.dev" ] }

8.本地测试curl http://localhost:18000
9.大概率是可以访问到的, 但此时是无法开始视频会议的, 还需要修改一下配置文件a
10.vim ~/.jitsi-meet-cfg/web/config.js

config.bosh = 'https://192.168.2.17:18000/' + subdir + 'http-bind';
config.websocket = 'wss://192.168.2.17:18000/' + subdir + 'xmpp-websocket';

修改为:

config.bosh = 'http://192.168.2.17:18000/' + subdir + 'http-bind';
config.websocket = 'ws://192.168.2.17:18000/' + subdir + 'xmpp-websocket';

11.egde和chrome都限制了http站点无法访问摄像头和麦克风, 临时处理方案, 以edge为例:

第一步:在浏览器地址栏输入:edge://flags/#unsafely-treat-insecure-origin-as-secure
第二步:在 Insecure origins treated as secure 输入栏中输入需要获取麦克风权限的白名单网址。
第三步:将右侧 已禁用 状态改成 已启用。
第四步:点击浏览器右下角 重启 按钮重启浏览器

在这里插入图片描述

12.此时已经可以进行视频会议了, 但是必须要加ip白名单, 给用户使用不可能这样弄, 必须要部署ssl证书

13.jitsi自带let’s encrypt, 不过我一开始不知道, 也没见官网文档和哪篇文章有说怎么使用, 我是服务器自行安装let’s encrypt后生成DV证书的, 具体怎么生成就不写了, 自行百度吧, 只有2个点需要注意:
a. 使用dns-01验证比较方便, 但是配置域名解析时配的是_acme-challenge, 而不是_acme-challenge.xxx.com
b. 生成证书要包含2个域名, 比如域名为domain.com, 生成时填的是xxx.domain.com,domain.com

  1. 部署ssl证书可以使用nginx
server {
    listen       9209  ssl ;

    server_name  localhost,xxx.xxxx.com,192.168.2.17;
    ssl_certificate /etc/letsencrypt/live/xxxx.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/xxxx.com/privkey.pem;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TlSv1.1 TLSv1.2;
    ssl_ciphers SM2-WITH-SMS4SM3:ECDH:AESGCM:HIGH:MEDIUM:!RC4:!DH:!MD5:!aNULL:!eNULL;
    ssl_prefer_server_ciphers on;

    location ^~/
        {
                        proxy_pass https://localhost:18443;
                        proxy_set_header Upgrade $http_upgrade;
                        proxy_set_header Connection "upgrade";
                        proxy_redirect off;
                        proxy_set_header X-Real-IP $remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_connect_timeout 90;
                        proxy_send_timeout 90;
                        proxy_read_timeout 90;
                        proxy_buffer_size  4k;
                        proxy_buffers 4 32k;
                        proxy_busy_buffers_size 64k;
                        proxy_temp_file_write_size 64k;
        }

}

15.使用iframe集成的方式, jitsi官方有iframe API, 但是看了几下不知道怎么用, 于是我去容器内找了jitsi的页面, 容器内是/usr/share/jitsi-meet, 那么我们只需要修改一下docker-compose.yml, 把目录挂载出来, 我们就可以修改html页面了, 具体步骤:
a.先使用docker cp 把容器内/usr/share/jitsi-meet拷贝到宿主机某个目录
b.修改docker-compose.yml
在这里插入图片描述
c.docker compose up -d
d.把步骤a拷贝的文件复制到挂载目录

16.给index.html文件添加一个js文件, xxx.js文件在同级目录下

<script src='xxx.js'></script>

17.基本的隐藏标签功能可以做了, 但因为我们是iframe集成的, 主窗口与子窗口通信会存在跨域问题, 如果我们有需要监控会议离开, 结束等事件, 我这边先是使用window事件来实现的, 主窗口打开iframe时给子窗口发送事件, 子窗口将事件对象存下, 之后双方通过window.postMessage()实现通信, 这个方案在用户进进出出会议的时候有点问题, 这边比较建议的做法是后端服务搭配ng, 将 9209端口/指定路径的请求转发到后端服务, 既避免跨域问题又能实现较为复杂的功能

18.此时还存在一个问题, 当第三个人加入会议, 所有人都会只能看到自己的画面, 并且无法语音, 这个问题除了10000端口udp要打开之外, 我找遍了所有中文文档, 去github issue找到了答案, 需要修改.env的配置JVB_ADVERTISE_IPS=192.168.2.17, 修改后docker compose up -d

其实官网文档也有提到此内容, 只是有点抽象, 看的时候也没注意:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值