官方部署指导

自动化一键部署: https://github.com/jitsi/jitsi-meet/blob/master/doc/quick-install.md

自定义手工部署:https://github.com/jitsi/jitsi-meet/blob/master/doc/manual-install.md

完整的Jitsi部署图

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
                   +                           +
| |
| |
v |
443 |
+-------+ |
| | |
| NginX | |
| | |
+--+-+--+ |
| | |
+------------+ | | +--------------+ |
| | | | | | |
| jitsi-meet +<---+ +--->+ prosody/xmpp | |
| |files 5280 | | |
+------------+ +--------------+ v
5222,5347^ ^5347 4443 tcp/10000 udp
+--------+ | | +-------------+
| | | | | |
| jicofo +----^ ^----+ videobridge |
| | | |
+--------+ +-------------+

准备工作

  1. 一台云虚拟机,配置要求至少“2u4g,5Mbps公网带宽”,系统为ubuntu(建议16.10, 低版本需要额外配置openjdk)
  2. 一个可用的域名,以下步骤均以“example.com”为例,需要绑定到上述虚拟机(此步骤参考云服务商配置文档)

步骤一:软件源地址配置

1 配置jitsi官方源地址

1
2
echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list
wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | apt-key add -

2 配置openjdk源地址(系统为ubuntu 14.04版本时需要)

1
add-apt-reposotory ppa:openjdk-r/ppa

3 更新软件源缓存

1
apt-get update

步骤二:安装配置Nginx

安装:

1
apt-get -y install nginx

配置:

1 新增nginx配置文件

1
2
touch /etc/nginx/sites-available/example.com
ln -s /etc/nginx/sites-enabled/example.com

2 修改nginx主配置文件/etc/nginx/nginx.conf,包含新增的配置

1
2
# 去除行首的注释标记
include /etc/nginx/sites-enabled/*;

3 参考如下文件配置,将其中的网址”jitsi-meet.example.com”均替换为自己准备的域名”example.com”

https://github.com/jitsi/jitsi-meet/blob/master/doc/debian/jitsi-meet/jitsi-meet.example

注意,如果使用自动化安装,必须在安装jitsi-meet之前安装nginx。否则自动化脚本未检测到nginx时会将自己配置为使用自带的jetty作web容器的运行模式,不利于后续的部署。

步骤三:安装jitsi-meet

1
apt-get -y install jitsi-meet

1 安装过程中会弹出两次配置输入窗口:

a. 要求配置hostname:此处填写前面已经准备好的域名,比如“example.com”
b. 询问是否自动创建证书:此处按默认回车生成即可,后面会通过脚本重新替换掉证书

2 重启下xmpp服务器

service prosody restart

步骤四:创建公网证书

上述安装步骤默认生成的证书在公网上访问是不可信的,jitsi的app也会因此无法成功连上我们自己部署的服务器。按照如下步骤可以从“letsencrypt”临时申请到一套可信的公网证书:

1 停止nginx服务(后续申请步骤需要使用到80端口)

1
service nginx stop

2 执行脚本申请公网证书

1
/usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

生成的证书位置:/etc/letsencrypt/live/example.com/

3 检查nginx的证书配置

查看nginx配置文件(/etc/nginx/sites-enabled/example.com)内的证书路径是否正确,如果不对则手工修改为如下配置

1
2
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

4 启动nginx服务

1
service nginx start

5 证书自动更新配置

从letsencrypt申请的证书默认有效期是90天,修改或新增脚本/etc/cron.weekly/letsencrypt-renew,以便自动更新申请新的证书,脚本内容如下:

1
2
#!/bin/bash
/usr/local/sbin/certbot-auto renew --webroot -w /usr/share/jitsi-meet >> /var/log/le-renew.log

可以通过如下命令能否执行成功测试证书更新功能是否生效:

1
certbot-auto renew --dry-run --webroot -w /usr/share/jitsi-meet

步骤五:配置ICE NAT穿透

在公有云上部署时,虚拟机的内外部网络是有NAT隔离的,需要按照如下步骤配置jitsi-videobridge才能正常进行视频流传输:

在配置文件/etc/jitsi/videobridge/sip-communicator.properties中增加如下配置:

1
2
org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS=<Local.IP.Address>
org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS=<Public.IP.Address>

其中<Local.IP.Address>为虚拟机内网本机IP地址,<Public.IP.Address>为公有云分配的公网IP地址。配置完成后需要重启下jitsi-videobridge:

1
service jitsi-videobridge restart

步骤六:配置STUN服务器

在P2P场景下,需要配置STUN服务器以便实现客户端的NAT穿越、直连。默认jitsi-meet使用的STUN服务器是google的,在国内使用时经常遇到连接问题,需要修改配置文件/etc/jitsi/meet/example.com-config.js,找到stunServers配置项,在前面新增如下两个服务器配置:

1
2
{ urls: 'stun:stun.freeswitch.org' },
{ urls: 'stun:stun.ideasip.com' },

修改后的配置:

1
2
3
4
5
6
7
8
// The STUN servers that will be used in the peer to peer connections
stunServers: [
{ urls: 'stun:stun.freeswitch.org' },
{ urls: 'stun:stun.ideasip.com' },
{ urls: 'stun:stun.l.google.com:19302' },
{ urls: 'stun:stun1.l.google.com:19302' },
{ urls: 'stun:stun2.l.google.com:19302' }
],

说明:实际生产、发布环境需要独立部署stun/turn服务器以便实现P2P穿透或转发。

附: WebRTC的P2P连接过程:

  1. 尝试直连.
  2. 直连失败则通过stun服务器进行穿透后直连.
  3. 无法穿透则通过turn服务器中转视频流.(需要消耗较多服务器端资源)

步骤七:配置公有云端口映射策略

由于安全原因,公有云默认是限制了端口访问的。为了能够正确在公有云上使用jitsi进行视频传输,至少需要开启如下端口的访问权限:

类型 协议 端口/范围 描述
IPv4 TCP 443 HTTPS默认端口: 1. jitsi-meet页面资源加载 2. xmpp服务的BOSH接入
IPv4 UDP 10000-20000 RTP/RTCP连接:WebRTC客户端和服务端SFU(jitsi-videobridge)之间的视频流传输
IPv4 TCP 4443 UDP不可用时jitsi-videobridge的备用接入端口

以华为云为例,进入“控制台”->”服务列表”->”弹性公网IP”->”安全组”,选择部署用的虚拟机已绑定的安全组策略,按照如下示例图配置端口:

image

基本功能验证

至少需要验证如下两种场景下的视频传输功能:

  1. 验证两客户端接入时p2p功能。
  2. 验证三个及以上客户端接入时jitsi-videobridge视频分发功能。

使用chrome浏览器或APP打开地址”https://example.com",填写房间号即可接入对应的视频聊天。分别使用不同数量的客户端接入同一个房间,以便验证上述场景下协议是否都已经正确配通。

成功安装后的环境说明

  1. 配置文件路径

    一般安装上述步骤安装后的环境即是可用的;如需要自己修改或定制配置,可在如下路径找到相关部件的配置文件

    1
    2
    3
    4
    jicofo:/etc/jitsi/jicofo
    jitsi-videobridge: /etc/jitsi/videobridge
    jitsi-meet: /etc/jitsi/meet
    xmpp: /etc/prosody/
  2. 日志文件路径

    部署的环境在使用过程中有任何功能性的问题,可以查看如下日志进行定位:

    1
    2
    3
    Jitsi-videobridge:/var/log/jitsi/jvb.log
    Jicofo: /var/log/jitsi/jicofo.log
    xmpp服务: /var/log/prosody/prosody.err、/var/log/prosody/prosody.log

卸载重装

如果需要重装jitsi以便重新配置或恢复环境,可以执行如下命令进行卸载

1
apt-get purge jigasi jitsi-meet jitsi-meet-web-config jitsi-meet-prosody jitsi-meet-web jicofo jitsi-videobridge

备注:卸载过程中如果遇到错误,只需要等待几秒后重新执行上述命令,直到没有错误即可。

FAQ:

  1. 两个客户端接入时正常,三个人接入时无视频流

    上述问题往往是jitsi-videobridge客户端配置错误导致: 原因是双方接入时默认走的P2P,不经过videobridge部件。而三个或更多人接入时必须走videobridge进行视频分发。

    错误配置1

    未按上述步骤五正确配置ICE NAT穿透,导致客户端无法连接到videobridge。建议检查/etc/jitsi/videobridge/sip-communicator.properties是否配置正确

    错误配置2

    操作系统未正确配置hosts,此问题较为隐蔽,会导致videobridge功能不可用。建议检查/etc/hosts文件内是否有本机IP地址对应的配置,如果没有则自己添加下