在群晖上搭建专属的视频会议

什么是Jitsi?

Jitsi is a collection of Open Source projects which provide state-of-the-art video conferencing capabilities that are secure, easy to use and easy to self-host.

前言

新冠的肆虐让视频会议系统受到关注,使得 Zoom 用户数量激增,从去年12月每日用户才1000万,到今年3月已经增长到2亿。对于许多公司而言,使用 Zoom 之类的工具是正确的做法,但是 Zoom 接连不断的爆出数据泄露事件,因此对于资金短缺或更注重信息安全的公司而言,Jitsi 可能才是远程沟通的理想手段。

Jitsi Meet 采用了 Java 语言开发,是开源的视频会议系统,基于 WebRTC、React、XMPP 等成熟的开源技术。 它能够独立部署,也可以方便整合到业务系统中。

最重要的是其采用了端到端的加密方式(end-to-end encryption),每个人密钥都不相同,有几个人参会就有几组密钥,视频内容都是在本地完成加密和解密,有着较高的安全性。

加上

  1. 代码开源
  2. 自己搭建
    所以理论上 Jitsi 会有更高的安全性。

系统架构

根据官网的描述(https://jitsi.github.io/handbook/docs/architecture),Jitsi包含一系列项目:

Jitsi Meet

兼容 WebRTC 的 JavaScript 前端应用程序,使用 Jitsi Videobridge 来提供高质量,可扩展的视频会议。

Jitsi Videobridge(jvb)

兼容WebRTC的服务器,旨在在会议参与者之间实现视频数据路由。

Jitsi Conference Focus(jicofo)

Jitsi Meet会议中使用的服务器端 focus 组件,用于会议室(房间)管理,管理参与者和 jvb 之间的会话。

Jitsi Gateway to SIP(​​jigasi)

服务器端应用程序,允许常规SIP客户端加入Jitsi Meet会议

Jibri

直播/录播的工具,基于ffmpeg实现会议画面的捕捉和编码。如果有多个会议室需要录制/直播,需要部署多台 Jibri。

Prosody

XMPP信令服务器,Jitsi使用的外部软件,负责各组件间的消息交换。

title
(官网的架构图)

产品特点

  • 无限用户

    用户或会议参与者的数量没有人为限制。服务器性能和带宽是唯一的限制因素。

  • 无需帐户

    不用注册账号也能使用

  • 会议室锁定

    使用密码控制对会议的访问。

  • 默认加密

    采用了端到端的加密方式

  • 高质量

    音频和视频以Opus和VP8的清晰度和丰富性提供。

  • 无需客户端

    可以使用 Web 浏览器,无需下载即可加入对话。只需与其他人共享您的会议 URL 即可开始。

  • 100%开源

    由来自世界各地的杰出社区提供支持。

  • 通过URL邀请:您可以在自己喜欢的易于记忆的 https://meet.mydomain.com/自定义会议室名称 会议上见面(例如:https://meet.mydomain.com/OurConf ),而不必将由数字和字母组成的随机序列加入难以记忆的房间中。

安装

首先需要下载 https://github.com/jitsi/docker-jitsi-meet/archive/master.zip

因为我的 docker 安装在「存储空间1」,所以我把文件上传并解压到了 /volume1/docker

用SSH客户端连到群晖。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 进入解压出来的目录
cd /volume1/docker/docker-jitsi-meet-master

# 拷贝环境文件
cp env.example .env

# 为.env 文件中的账号生成密码
./gen-passwords.sh

# 生成存放配置文件的目录
mkdir /volume1/docker/docker-jitsi-config/

# 生成子目录
mkdir -p /volume1/docker/docker-jitsi-config/{web/letsencrypt,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}

编辑 .env 文件,将 CONFIG=~/.jitsi-meet-cfg 修改为 CONFIG=/volume1/docker/docker-jitsi-config

取消下面几行前面的#号注释,使之生效

1
2
3
4
5
6
7
8
# 启用身份验证
ENABLE_AUTH=1

# 允许访客
ENABLE_GUESTS=1

#选择认证类型: internal, jwt or ldap
AUTH_TYPE=internal

并按照自己的实际设置以下内容:

1
2
3
4
5
6
7
8
9
10
11
# 避免冲突将 80 改成了 5080
HTTP_PORT=5080

# 避免冲突将 443 改成了 5443
HTTPS_PORT=5443

# 设置域名
PUBLIC_URL=https://meet.mydomain.com

# 设置内网的IP,也就是群晖的IP
DOCKER_HOST_ADDRESS=192.168.X.X

接下来就可以产生和运行你的 docker 容器了,4个镜像差不多 1G 的大小,所以时间取决于你的网速。

1
docker-compose up -d

依次会下载 jitsi/web:latestjitsi/prosody:latestjitsi/jicofo:latestjitsi/jvb:latest

title

回到 Docker 管理器,我们会看到这四个容器已经启动了

title

这个时候在浏览器输入 http://192.168.X.X:5080,可以看到下面的界面

title

但是在http协议下,摄像头和麦克风是不能使用的

title

需要https才可以,在浏览器输入 https://192.168.X.X:5443

title

设置

设置反向代理

「控制面板」–>「Synology应用程序门户」–>「反向代理服务器」–> 「新增」

title

上传ssl证书

「控制面板」–>「安全性」–>「证书」–>「新增」

title

创建账号

因为前面我们启用了身份验证,所以需要注册用户

1
2
3
4
5
6
7
8
# 首先exec到容器内
docker-compose exec prosody /bin/bash

# 创建主持人账号
prosodyctl --config /config/prosody.cfg.lua register 用户名 meet.jitsi 密码

# 删除主持人账号
prosodyctl --config /config/prosody.cfg.lua unregister 用户名 meet.jitsi

title

现在我们可以正式使用了,开启一个新的会议后,会提示等待主持人

title

会议室的主界面,非常的清爽

title

客户端

除了网页外,官网提供了Android和iOS平台的移动客户端,如果你需要Wndows或者其他平台的桌面客户端,可以参考我之前写的《把网页打包成桌面应用程序》,自己打包一个。

title

在手机上收到邀请链接会要求下载客户端

title

后续

如果你在后续更改了任何 .env 内的配置,假设不想用身份验证了想取消掉,那么要使新的配置生效的话,步骤依次是:

1
2
3
4
5
6
7
8
9
10
11
# 停止并删除容器、网络、卷、镜像
docker-compose down

# 删除配置目录
rm -rf /volume1/docker/docker-jitsi-config

# 重建配置目录
mkdir -p /volume1/docker/docker-jitsi-config/{web/letsencrypt,transcripts,prosody/config,prosody/prosody-plugins-custom,jicofo,jvb,jigasi,jibri}

# 重新构建并在后台启动容器,-d 在后台运行服务容器
docker-compose up -d

参考文档

官网主页
地址:https://jitsi.org/

Jitsi Meet on Docker
地址:https://github.com/jitsi/docker-jitsi-meet

Jitsi private video conferencing on synology NAS
地址:https://www.virtualconfusion.net/jitsi-meeting-conference-on-synology-nas/

How to install Jitsi Meet on your QNAP server
地址:https://medium.com/swlh/how-to-install-jitsi-meet-on-your-qnap-server-6cc8824b957b

Jitsi Meet:开源的视频会议系统
地址:https://lala.im/7092.html

开源架构解析|视频会议系统 Jitsi Meet
地址:https://liulantao.com/jitsi-meet.html