作者选择开放互联网/言论自由基金接受捐赠,作为Write for DOnations计划的一部分。
介绍
Jitsi Meet是一个基于WebRTC的开源视频会议应用程序。Jitsi Meet 服务器提供多人视频会议室,您只需使用浏览器即可访问,并提供与 Zoom 或 Skype 电话会议类似的功能。Jitsi 会议的好处是您的所有数据仅通过您的服务器,并且端到端 TLS 加密确保没有人可以窥探通话。使用 Jitsi,您可以确保您的私人信息保持不变。
在本教程中,您将在 Ubuntu 18.04 上安装和配置 Jitsi Meet 服务器。默认配置允许任何人创建新的会议室。这对于在 Internet 上公开可用的服务器来说并不理想,因此您还将配置 Jitsi Meet,以便只有注册用户才能创建新会议室。创建会议室后,任何用户都可以加入,只要他们拥有唯一地址和可选密码即可。
先决条件
在开始本指南之前,您需要具备以下条件:
- 通过遵循Ubuntu 18.04教程的初始服务器设置来设置一台 Ubuntu 18.04 服务器,包括非 root 用户 sudo 启用。您需要的服务器大小主要取决于可用带宽和您希望使用服务器的参与者数量。下表将让您了解需要什么。
- 配置为指向您的服务器的域名。您可以通过参考域和 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
然后,添加以下行:
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 — 配置防火墙
当您按照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
使用该apt-key
实用程序将您下载的 GPG 密钥添加到的密钥环:
- 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 存储库的文件中:
deb https://download.jitsi.org stable/
保存并退出编辑器。
最后,执行系统更新以从 Jitsi 存储库中收集软件包列表,然后安装jitsi-meet
软件包:
- sudo apt update
- sudo apt install jitsi-meet
在安装过程中jitsi-meet
,系统会提示您输入jitsi.your-domain
要用于 Jitsi Meet 实例的域名(例如,)。
注意:您将光标从主机名字段移动到使用键突出显示<OK>按钮TAB
。ENTER
当<OK>突出显示时按以提交主机名。
然后,您将看到一个新对话框,询问您是希望 Jitsi 创建并使用自签名TLS 证书还是使用您已有的现有证书:
如果您的 Jitsi 域没有 TLS 证书,请选择第一个,生成新的自签名证书,选项。
您的 Jitsi Meet 实例现已使用自签名 TLS 证书进行安装。这将导致浏览器警告,因此您将在下一步中获得签名的 TLS 证书。
第 4 步 – 获取签名的 TLS 证书
Jitsi Meet 使用 TLS 证书来加密通话流量,这样在您的通话通过互联网传输时,没有人可以听到。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 仅通过端口上的 HTTPS 为其网站提供服务443
。
使用以下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
编辑这一行:
...
authentication = "anonymous"
...
对以下内容:
...
authentication = "internal_plain"
...
此配置告诉 Jitsi Meet 在允许新访客创建会议室之前强制进行用户名和密码验证。
然后,在同一个文件中,将以下部分添加到文件末尾:
...
VirtualHost "guest.your_domain"
authentication = "anonymous"
c2s_require_encryption = false
此配置允许匿名用户加入由经过身份验证的用户创建的会议室。但是,客人必须有一个唯一的地址和可选的密码才能进入房间。
在这里,您添加guest.
到您的域名的前面。例如,因为jitsi.your-domain
你会把guest.jitsi.your-domain
. 该guest.
主机名只能由Jitsi满足内部使用。您永远不会将其输入浏览器或需要为其创建 DNS 记录。
/etc/jitsi/meet/your_domain-config.js
使用文本编辑器打开另一个配置文件:
- sudo nano /etc/jitsi/meet/your_domain-config.js
编辑这一行:
...
// anonymousdomain: 'guest.example.com',
...
对以下内容:
...
anonymousdomain: 'guest.your_domain',
...
同样,通过使用您之前使用的主机名,此配置会告诉 Jitsi Meet 用于未经身份验证的访客的内部主机名。guest.your_domain
接下来,打开/etc/jitsi/jicofo/sip-communicator.properties
:
- sudo nano /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 实例。