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