Jitsi Meet是一个实时系统。其需求与网页服务器完全不同,取决于许多因素。错误的计算很容易破坏基本功能,而不是导致性能下降。请避免在您的Jitsi Meet设置中添加其他功能,因为这可能会影响性能并使优化变得复杂。

请注意,Jitsi Meet的设计优先考虑了可扩展性,通过添加服务器或使用大型服务器来实现。查阅Jitsi-videobridge文档以了解如何将多个桥接器添加到Jitsi Meet服务器上,并了解如何通过OCTO来进一步扩展(即Jitsi Meet服务器的联合)。如果您觉得自己是网络和服务器管理的新手,请不要尝试这样做。


Jitsi Meet的需求按重要性顺序如下:

  • 网络连线的基础速度和稳定性极为关键。利用任何下载工具(或FTP)来检验实际速度是否达到服务商的承诺,并通过像iperf3这样的工具来测试延迟。虽然进行精确计算极其复杂,涉及众多的优化与技巧,但以下这些关于不同分辨率所需的大致速度是你应当牢记的:180分辨率 = 200 kbits/s,360分辨率 = 500 kbits/s,720分辨率(HD)= 2500 kbits/s,4K分辨率 = 10 Mbits/s。因此,不应期待在一台只有100Mbits/s上传和下载速度的服务器上同时支持20个用户观看4K视频。对于一个朋友圈或小型组织的服务器,1 Gbits/s的速度通常已足够;然而,对于需要更高性能的服务器,推荐的速度是10 Gbits/s。在大型网络部署中,通常会使用多个,每个都具有10 Gbits/s速度链接的网络桥。

这些建议主要针对视频桥(videobridge)。若系统仅配置了外部视频桥(这在一些高端的Jitsi Meet服务器配置中是可能的),那么网络性能的影响就会相对较小。

  • 内存(RAM):一般推荐配备8 GB。对于小型会议,4 GB内存足矣;而对于测试用途的服务器或者规模非常小的会议,尝试使用2 GB也是可行的。对于大型会议,推荐采用更具扩展性的方案,而不是简单地增加内存容量。
  • 处理器(CPU):低下的处理器性能会严重影响实时系统的表现,尤其是在使用共享服务器的情况下,因为你的处理器性能可能会被其他用户占用。如果你准备租用虚拟私人服务器(VPS)而非独立服务器,确保检查“专用CPU”选项。不过,需要注意的是,Jitsi Meet的一个组件,Prosody,只能使用单一核心。因此,配置过多的核心,比如超过32核,可能并不实用。对于基础级别的服务器,4个专用核心就已经足够。
  • 硬盘(Disk):除非有进行大量日志记录的需求或其他特殊需求,否则20 Gbytes的标准硬盘空间应该足够使用。虽然固态硬盘(SSD)更受欢迎,但它更像是一个加分项,而非必备项。

如果您想要额外的服务,需求可能会增加。

录像功能

Jibri对于每次会议录像都需要独立运行在一个系统上。换言之,每个Jibri实例只能服务于一场会议。若需同时录制五场会议,则必须部署五个Jibri,目前无法规避这一限制。不过,如果你具备相应的技术背景,可以考虑将Jibri部署在容器中,并通过大型服务器集中管理,以此来优化资源使用,但这已经是极限了。

相比于Jitsi Meet,Jibri对内存(RAM)、处理器(CPU)和硬盘的需求要高得多,因为它需要进行视频编码。就目前而言,要录制1080×720分辨率的视频,至少需要8GB的内存;而对于1280×1024分辨率,则需要至少12GB内存(这是针对录制单场会议的要求)。至于云存储,则至少需要配置SSD硬盘。如果内存容量不足、CPU编码速度跟不上,或硬盘读写速度不够快,都有可能导致录制失败。

虽然从技术上讲,Jibri和Jitsi Meet可以部署在同一台服务器上,但这并不推荐,因为Jibri对资源的消耗相当大,这不仅会影响Jitsi Meet的性能,还可能导致磁盘空间迅速耗尽,甚至使Jitsi Meet完全无法工作。

配置服务器

Ubuntu 22.04(Jammy Jellyfish)或更新版本(也可以使用Ubuntu 18.04或20.04,但在安装之前必须将Prosody更新至版本0.11+)。

注意:许多安装步骤需要 root 或 sudo 访问权限。因此,建议您拥有系统的 sudo 或 root 访问权限。

所需的软件包和存储库更新

您将需要以下软件包:

  • gnupg2
  • nginx-full
  • sudo => 在您使用 sudo 时需要
  • curl => 或者 wget 以添加 Jitsi 软件包存储库

注意:必须使用 OpenJDK 11。

确保您的系统是最新的,并安装了所需的软件包:

以 root 或使用 sudo 运行:

# Retrieve the latest package versions across all repositories
sudo apt update

# Ensure support for apt repositories served via HTTPS
sudo apt install apt-transport-https


在 Ubuntu 系统上,Jitsi 需要从 Ubuntu 的 universe 软件包存储库获取依赖项。为确保该存储库已启用,请运行以下命令:

sudo apt-add-repository universe

获取所有存储库中的最新软件包版本:

sudo apt update

安装 Jitsi Meet

您服务器的域名和设置DNS

决定您的服务器将使用的域名。例如,meet.icloudportal.com

为该域名设置一个 DNS A 记录,使用:

  • 如果您的服务器有自己的公共 IP 地址,则使用该服务器的公共 IP 地址;
  • 如果您的服务器具有私有(RFC1918)IP 地址(例如 192.168.1.2)并通过路由器通过网络地址转换(NAT)连接,则使用您路由器的公共 IP 地址。

如果您的计算机/服务器或路由器具有动态 IP 地址(IP 地址不断变化),您可以使用动态 DNS 服务。例如 DuckDNS。

DNS 记录示例:

Record TypeHostnamePublic IPTTL (Seconds)
Ameet.icloudportal.com您的会议服务器公网 IP 地址 (x.x.x.x)1800

设置完全合格的域名(FQDN)(可选)

如果用于托管 Jitsi Meet 实例的计算机已经在 DNS 中设置了完全合格的域名(例如 meet.icloudportal.com),您可以使用以下命令设置它:

sudo hostnamectl set-hostname meet.icloudportal.com

然后将相同的完全合格的域名添加到 /etc/hosts 文件中:

127.0.0.1 localhost 
x.x.x.x meet.icloudportal.com

注意:x.x.x.x 是您服务器的公网 IP 地址。

最后,在同一台机器上测试您是否可以使用以下命令对 FQDN 进行 ping 测试:

ping "$(hostname)"

如果一切按预期进行,您应该看到:meet.icloudportal.com

添加 Prosody 软件包存储库

这将添加 Prosody 存储库,以便安装最新版本的 Prosody,这对于包括大厅功能在内的功能是必要的。

sudo curl -sL https://prosody.im/files/prosody-debian-packages.key -o /etc/apt/keyrings/prosody-debian-packages.key
echo "deb [signed-by=/etc/apt/keyrings/prosody-debian-packages.key] http://packages.prosody.im/debian $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/prosody-debian-packages.list
sudo apt install lua5.2

添加 Jitsi 软件包存储库

这将向您的软件包源添加 jitsi 存储库,以使 Jitsi Meet 软件包可用。

curl -sL https://download.jitsi.org/jitsi-key.gpg.key | sudo sh -c 'gpg --dearmor > /usr/share/keyrings/jitsi-keyring.gpg'
echo "deb [signed-by=/usr/share/keyrings/jitsi-keyring.gpg] https://download.jitsi.org stable/" | sudo tee /etc/apt/sources.list.d/jitsi-stable.list

更新所有软件包源:

sudo apt update


设置和配置防火墙

以下端口需要在防火墙中打开,以允许流量通过到 Jitsi Meet 服务器:

  • 80 TCP => 用于 SSL 证书验证/更新 Let’s Encrypt。必需
  • 443 TCP => 用于访问 Jitsi Meet。必需
  • 10000 UDP => 用于一般网络音频/视频会议。必需
  • 22 TCP => 用于通过 SSH 访问您的服务器(如果端口不是 22,请相应更改)。必需
  • 3478 UDP => 用于查询 stun 服务器(coturn,可选,需要更改 config.js 以启用它)。
  • 5349 TCP => 用于通过 TCP 进行网络视频/音频通信的备用通道(例如,当 UDP 被阻止时),由 coturn 提供。必需

如果您使用的是 ufw,您可以使用以下命令:

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10000/udp
sudo ufw allow 22/tcp
sudo ufw allow 3478/udp
sudo ufw allow 5349/tcp
sudo ufw enable

使用以下命令检查防火墙状态:

sudo ufw status verbose

TLS 证书

为了进行加密通信,您需要一个 TLS 证书。

在安装 Jitsi Meet 时,您可以选择不同的选项:

推荐的选项是选择 Let’s Encrypt 证书选项。

但是,如果您想使用不同的证书,您应该首先获取该证书,然后安装 jitsi-meet 并选择 “I want to use my own certificate”。

您也可以使用自签名证书(生成新的自签名证书),但出于以下原因,不建议使用自签名证书:

使用自签名证书会导致用户的浏览器显示警告,因为它们无法验证您服务器的身份。

Jitsi Meet 移动应用程序需要由受信任的证书颁发机构签名的有效证书,如果您选择了自签名证书,则无法连接到您的服务器。


安装 Jitsi Meet

注意:安装程序将检查 Nginx 或 Apache 是否存在(按此顺序),并在找到的 Web 服务器中配置一个虚拟主机来提供 Jitsi Meet。

如果您在同一台机器上已经在端口 443 上运行 Nginx,则 turnserver 配置将被跳过,因为它会与您当前的端口 443 冲突。

# jitsi-meet installation
sudo apt install jitsi-meet

SSL/TLS 证书生成:您将被要求生成 SSL/TLS 证书。详情请参阅上文。

主机名:您还将被要求输入 Jitsi Meet 实例的主机名。如果您有一个域名,请使用特定的域名,例如:meet.example.org。或者,您可以输入机器的 IP 地址(如果是静态或不变的)。

此主机名将用于 Jitsi Meet 内部的虚拟主机配置,您和您的通信对象将使用它来访问网络会议。

访问控制

Jitsi Meet 服务器:注意:默认情况下,任何可以访问您的 Jitsi Meet 服务器的人都可以开始一个会议:如果您的服务器对外开放,任何人都可以与其他人进行交流。如果您想将开始会议的能力限制为注册用户,请按照设置安全域的说明进行操作。

会议/房间:对于会议/房间的访问控制是在房间中管理的,在创建后可以在特定房间的网页上设置密码。有关详细信息,请参阅用户指南:https://jitsi.github.io/handbook/docs/user-guide/user-guide-start-a-jitsi-meeting

高级配置

如果安装在NAT后面的计算机上,则 jitsi-videobridge 应该在启动时自动配置自己。 如果三方通话不起作用,则需要进一步配置 jitsi-videobridge,以使其可以从外部访问。

假设所有必需的端口都被路由(转发)到运行它的计算机上。 默认情况下,这些端口是 TCP/443 和 UDP/10000。

需要将以下额外的行添加到文件 /etc/jitsi/videobridge/sip-communicator.properties 中:

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

并注释掉现有的 org.ice4j.ice.harvest.STUN_MAPPING_HARVESTER_ADDRESSES。

请参阅 ice4j 的文档以获取详细信息。

Systemd/Limits: 默认部署将具有较低的最大进程和打开文件的值。 对于超过100个参与者,请更改 /etc/systemd/system.conf 为:

DefaultLimitNOFILE=65000
DefaultLimitNPROC=65000
DefaultTasksMax=65000

要检查值,只需运行:

systemctl show --property DefaultLimitNPROC
systemctl show --property DefaultLimitNOFILE
systemctl show --property DefaultTasksMax

要加载这些值并检查它们,请参阅下面的详细说明。

Systemd 详细信息

要在运行中的系统上重新加载 systemd 更改,请执行 sudo systemctl daemon-reload 和 sudo systemctl restart jitsi-videobridge2。 要检查任务部分,请执行 sudo systemctl status jitsi-videobridge2,并且您应该看到 Tasks: XX(限制为:65000)。 要检查文件和进程部分,请执行 cat /proc/cat /var/run/jitsi-videobridge/jitsi-videobridge.pid/limits,并且您应该看到:

Max processes 65000 65000 processes
Max open files 65000 65000 files

确认您的安装是否正常工作

打开一个网页浏览器(如Firefox、Chrome或Safari),并在地址栏中输入上一步中的主机名或IP地址。

如果您使用的是自签名证书(而不是使用 Let’s Encrypt),您的网页浏览器将要求您确认您信任该证书。如果您正在使用 iOS 或 Android 应用程序进行测试,此时可能会失败,如果您使用的是自签名证书。

您应该会看到一个提示您创建新会议的网页。 确保您可以成功创建一个会议,并且其他参与者能够加入会议。

如果一切顺利,那么恭喜您!您已经拥有了一个运行良好的 Jitsi 会议服务。

卸载

sudo apt purge jigasi jitsi-meet jitsi-meet-web-config jitsi-meet-prosody jitsi-meet-turnserver jitsi-meet-web jicofo jitsi-videobridge2

有时以下软件包可能无法正确卸载:

  • jigasi
  • jitsi-videobridge

当出现这种情况时,只需再次运行卸载命令,应该就可以了。

失败的原因是有时卸载脚本比停止守护进程的过程更快。第二次运行卸载命令会修复此问题,因为此时 jigasi 或 jitsi-videobridge 守护进程已经停止了。

调试问题

  • Web 浏览器:您可以尝试使用不同的 Web 浏览器。已知某些版本的某些浏览器与 Jitsi Meet 存在问题。
  • WebRTC、网络摄像头和麦克风:您还可以访问 https://webrtc.github.io/samples/src/content/getusermedia/gum 来测试您的浏览器是否支持 WebRTC
  • 防火墙:如果参与者无法看到或听到彼此,双重检查您的防火墙/NAT 规则。
  • Nginx/Apache:由于我们更喜欢使用 Nginx 作为 Web 服务器,安装程序首先检查 Nginx 的存在,然后检查 Apache 的存在。如果您迫切需要强制使用 Apache,请尝试预先设置 debconf 包 jitsi-meet-web-config 的变量 jitsi-meet/enforce_apache。
  • 日志文件:查看各种日志文件:

/var/log/jitsi/jvb.log
/var/log/jitsi/jicofo.log
/var/log/prosody/prosody.log

额外功能

将 SIP 网关添加到 Jitsi Meet


安装 Jigasi

Jigasi 是一个服务器端应用程序,作为 Jitsi Meet 会议的网关。它允许常规的 SIP 客户端加入会议,并提供转录功能。

sudo apt install jigasi

在安装过程中,您将被要求输入您的 SIP 账户和密码。此账户将用于邀请其他 SIP 参与者。

重新加载

Jitsi Meet 再次启动一个浏览器,输入 Jitsi Meet 的 URL,您将在工具栏的右端看到一个电话图标。使用它来邀请 SIP 账户加入当前的会议。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注