作者选择了 开放式互联网 / 自由言论基金作为 写给捐赠计划的一部分接受捐款。
介绍
Jitsi Meet是一个基于WebRTC(https://en.wikipedia.org/wiki/WebRTC)的开源视频会议应用程序。Jitsi Meet服务器提供多人视频会议室,您只能使用您的浏览器访问,并提供与Zoom或Skype会议通话相似的功能。Jitsi会议的优点是,您的所有数据只通过您的服务器传输,端到端TLS加密确保没有人可以扫描通话。
在本教程中,你将安装和配置一个Jitsi Meet服务器在Ubuntu 18.04. 默认配置允许任何人创建一个新的会议室. 这对于在互联网上公开可用的服务器来说并不理想,所以你还将配置Jitsi Meet,以便只有注册用户才能创建新的会议室. 创建会议室后,任何用户都可以加入,只要他们有唯一的地址和可选的密码。
前提条件
在您开始本指南之前,您将需要以下内容:
- 一个 Ubuntu 18.04 服务器是通过遵循 Initial Server Setup with Ubuntu 18.04 教程,包括一个非 root sudo-enabled 用户来设置的。您需要的服务器的大小主要取决于可用的带宽和您预计使用服务器的参与者数量。下表会给你一些需要的想法。
- 一个配置为指向您的服务器的域名。 您可以通过参考 Domains and DNS 指南来学习如何将域名和主机名指向 DigitalOcean Droplets。 在本指南中,使用示例域名
jitsi.example.com
。
当您选择一个服务器来运行您的 Jitsi Meet 实例时,您需要考虑托管会议室所需的系统资源。
CPU | Server Bandwidth | |
---|---|---|
Two Participants | 3% | 30Kbps Up, 100Kbps Down |
Three Participants | 15% | 7Mbps Up, 6.5Mbps Down |
两到三名参与者之间资源使用的跳跃是因为当有两个客户端时,Jitsi会直接在客户端之间路由呼叫数据,当有两个以上客户端时,呼叫数据会通过Jitsi Meet服务器路由。
步骤 1 – 设置系统主机名
在此步骤中,您将更改系统的主机名,以匹配您打算为您的 Jitsi Meet 实例使用的域名,并将该主机名解决为 localhost IP, 127.0.0.1
。
首先,将系统的主机名设置为您将在您的 Jitsi 实例中使用的域名。下列命令将设置当前的主机名,并修改在重新启动之间持有系统主机名的 /etc/hostname
:
1sudo hostnamectl set-hostname jitsi.your-domain
你所执行的命令如下:
hostnamectl
是来自 systemd 工具包的实用程序,用于管理系统主机名。set-hostname
设置系统主机名。
检查通过运行以下操作是否成功:
1hostname
这将返回您用hostnamectl
命令设置的主机名:
1[secondary_label Output]
2jitsi.your-domain
接下来,您将将服务器的主机名进行本地映射,设置为循环 IP 地址, 127.0.0.1
. 通过使用文本编辑器打开 /etc/hosts
文件来完成此操作:
1sudo nano /etc/hosts
然后添加下面的行:
1[label /etc/hosts]
2127.0.0.1 jitsi.your-domain
将您的 Jitsi Meet 服务器的域名绘制为「127.0.0.1」允许您的 Jitsi Meet 服务器使用多个网络流程,在「127.0.0.1」 IP 地址上相互接受本地连接。
保存和退出您的文件。
您的服务器现在拥有 Jitsi 安装所需的主机名称. 下一步,您将打开 Jitsi 和 TLS 证书安装程序所需的防火墙端口。
第2步:设置防火墙
当您遵循 Ubuntu 18.04 初始服务器设置指南时,您启用了 UFW 防火墙并打开 SSH 端口. Jitsi 服务器需要打开一些端口以便与呼叫客户端进行通信。
您将打开的端口如下:
80/tcp
用于 TLS 证书请求.443/tcp
用于会议室创建网页.4443/tcp,10000/udp
用于传输和接收加密通话流量。
运行以下ufw
命令来打开这些端口:
1sudo ufw allow 80/tcp
2sudo ufw allow 443/tcp
3sudo ufw allow 4443/tcp
4sudo ufw allow 10000/udp
检查他们是否都添加了ufw status
命令:
1sudo ufw status
如果这些端口打开,您将看到以下输出:
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
780/tcp ALLOW Anywhere
8443/tcp ALLOW Anywhere
94443/tcp ALLOW Anywhere
1010000/udp ALLOW Anywhere
11OpenSSH (v6) ALLOW Anywhere (v6)
1280/tcp (v6) ALLOW Anywhere (v6)
13443/tcp (v6) ALLOW Anywhere (v6)
144443/tcp (v6) ALLOW Anywhere (v6)
1510000/udp (v6) ALLOW Anywhere (v6)
服务器现在已经准备好进行 Jitsi 安装,您将在下一步完成。
步骤 3 – 安装 Jitsi Meet
在此步骤中,您将添加 Jitsi 稳定存储库到您的服务器,然后从该存储库安装 Jitsi Meet 包,从而确保您始终运行最新稳定 Jitsi Meet 包。
首先,用wget
下载工具下载 Jitsi GPG 密钥:
1wget https://download.jitsi.org/jitsi-key.gpg.key
apt
包管理器将使用这个 GPG 密钥来验证您将从 Jitsi 存储库下载的包。
接下来,使用apt-key
实用程序将您下载的 GPG 密钥添加到apt
的密钥:
1sudo apt-key add jitsi-key.gpg.key
您现在可以删除 GPG 密钥文件,因为它不再需要:
1rm jitsi-key.gpg.key
现在,您将添加 Jitsi 存储库到您的服务器,创建一个包含 Jitsi 存储库的新源文件。
1sudo nano /etc/apt/sources.list.d/jitsi-stable.list
将此行添加到 Jitsi 存储库的文件中:
1[label /etc/apt/sources.list.d/jitsi-stable.list]
2deb https://download.jitsi.org stable/
保存和退出您的编辑器。
最后,执行系统更新,从Jitsi存储库中收集包列表,然后安装jitsi-meet
包:
1sudo apt update
2sudo apt install jitsi-meet
在安装jitsi-meet
时,您将被要求输入您想要用于您的 Jitsi Meet 实例的域名(例如,jitsi.your-domain
)。
<$>[note]
** 注意:** 您将方程式从主机名域移动,以使用TAB
键突出 **
然后,您将看到一个新的对话框,询问您是否希望 Jitsi 创建并使用 自我签名 TLS 证书,或者使用您已经拥有的现有证书:
如果您没有您的 Jitsi 域的 TLS 证书,请选择第一个, ** 创建新的自签证书** ,选项。
您的 Jitsi Meet 实例现在使用自签名的 TLS 证书安装,这将导致浏览器的警告,因此您将在下一步获得签名的 TLS 证书。
步骤 4 – 获取签名的 TLS 证书
Jitsi Meet 使用 TLS 证书来加密通话流量,以便在通过互联网进行通话时没有人能听到您的通话。
Jitsi Meet 提供了一个程序,用于自动下载用于使用 Certbot实用程序的域名的 TLS 证书。
首先,将 Certbot 存储库添加到您的系统,以确保您有最新版本的 Certbot. 运行以下命令来添加新的存储库并更新您的系统:
1sudo add-apt-repository ppa:certbot/certbot
接下来,安装certbot
包:
1sudo apt install certbot
您的服务器现在已经准备好运行 Jitsi Meet 提供的 TLS 证书安装程序:
1sudo /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
当您运行脚本时,您将看到电子邮件地址的以下提示:
1[secondary_label Output]
2-------------------------------------------------------------------------
3This script will:
4- Need a working DNS record pointing to this machine(for domain jitsi.example.com)
5- Download certbot-auto from https://dl.eff.org to /usr/local/sbin
6- Install additional dependencies in order to request Let’s Encrypt certificate
7- If running with jetty serving web content, will stop Jitsi Videobridge
8- Configure and reload nginx or apache2, whichever is used
9- Configure the coturn server to use Let's Encrypt certificate and add required deploy hooks
10- Add command in weekly cron job to renew certificates regularly
11
12You need to agree to the ACME server's Subscriber Agreement (https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf)
13by providing an email address for important account notifications
14Enter your email and press [ENTER]:
此电子邮件地址将发送给证书发行人 https://letsencrypt.org
,并将用于通知您有关安全和其他与 TLS 证书相关的问题。 您必须在这里输入电子邮件地址以继续安装。 安装将完成,无需进一步提示。
当它完成时,您的 Jitsi Meet 实例将被配置为为您的域名使用签名的 TLS 证书. 证书更新也将自动发生,因为安装程序将更新脚本放置在 /etc/cron.weekly/letsencrypt-renew
号,每周运行。
TLS 安装程序使用端口 80 来验证您对您的域名有控制权. 现在您已经获得了证书,您的服务器不再需要打开端口 80,因为端口 80 用于常规的非加密 HTTP 流量。
在您的防火墙中关闭此端口,使用以下ufw
命令:
1sudo ufw delete allow 80/tcp
您的 Jitsi Meet 服务器现在正在运行并可供测试。打开浏览器并将其指向您的域名。您将能够创建一个新的会议室并邀请其他人加入您。
Jitsi Meet 的默认配置是,任何访问您的 Jitsi Meet 服务器主页的人都可以创建一个新的会议室。这将使用您的服务器的系统资源来运行会议室,并且不适合未经授权的用户。
步骤 5 – 创建锁定会议
在此步骤中,您将配置您的 Jitsi Meet 服务器,以便仅允许注册用户创建会议室. 您要编辑的文件由安装程序生成,并与您的域名配置。
在以下示例中,将使用变量 your_domain
代替域名。
首先,使用文本编辑器打开sudo nano /etc/prosody/conf.avail/your_domain.cfg.lua
:
1sudo nano /etc/prosody/conf.avail/your_domain.cfg.lua
编辑这条线:
1[label /etc/prosody/conf.avail/your_domain.cfg.lua]
2...
3 authentication = "anonymous"
4...
至下列:
1[label /etc/prosody/conf.avail/your_domain.cfg.lua]
2...
3 authentication = "internal_plain"
4...
此配置告知 Jitsi Meet 强制验证用户名和密码,然后允许新访客创建会议室。
然后,在相同的文件中,将下列部分添加到文件的末尾:
1[label /etc/prosody/conf.avail/your_domain.cfg.lua]
2...
3VirtualHost "guest.your_domain"
4 authentication = "anonymous"
5 c2s_require_encryption = false
此配置允许匿名用户加入由身份验证的用户创建的会议室,但是,客人必须有独特的地址和可选的密码才能进入该房间。
在这里,您在您的域名前面添加了guest。
例如,对于jitsi.your-domain
,您会添加guest.jitsi.your-domain
。 guest.
主机名仅由 Jitsi Meet 内部使用。
在 /etc/jitsi/meet/your_domain-config.js
打开另一个配置文件,使用文本编辑器:
1sudo nano /etc/jitsi/meet/your_domain-config.js
编辑这条线:
1[label /etc/jitsi/meet/your_domain-config.js]
2...
3 // anonymousdomain: 'guest.example.com',
4...
至下列:
1[label /etc/jitsi/meet/your_domain-config.js]
2...
3 anonymousdomain: 'guest.your_domain',
4...
再次,通过使用您之前使用的 guest.your_domain
主机名,此配置会告诉 Jitsi Meet 使用哪些内部主机名用于未经身份验证的客人。
接下来,打开 /etc/jitsi/jicofo/sip-communicator.properties
:
1sudo nano /etc/jitsi/jicofo/sip-communicator.properties
然后添加以下行以完成配置更改:
1[label /etc/jitsi/jicofo/sip-communicator.properties]
2org.jitsi.jicofo.auth.URL=XMPP:your_domain
此配置将其中一个 Jitsi Meet 流程指向执行现在需要的用户身份验证的本地服务器。
您的 Jitsi Meet 实例现在已配置为只有注册用户才能创建会议室. 创建会议室后,任何人都可以加入会议室,而无需成为注册用户。
现在,Jitsi Meet已配置为需要验证用户创建房间,您需要注册这些用户及其密码,您将使用 prosodyctl
实用程序来完成此操作。
运行以下命令将用户添加到您的服务器:
1sudo prosodyctl register user your_domain password
您在这里添加的用户不是系统用户,他们只能创建会议室,并且无法通过SSH登录您的服务器。
最后,重新启动 Jitsi Meet 流程来加载新配置:
1sudo systemctl restart prosody.service
2sudo systemctl restart jicofo.service
3sudo systemctl restart jitsi-videobridge2.service
现在,Jitsi Meet 实例在创建会议室时将要求一个用户名和密码,并提供一个对话框。
您的 Jitsi Meet 服务器现在已设置并安全配置。
结论
在本文中,您部署了一个 Jitsi Meet 服务器,您可以使用它来托管安全和私人视频会议室. 您可以通过从 Jitsi Meet Wiki的说明来扩展您的 Jitsi Meet 实例。