作者选择了 开放式互联网/言论自由基金作为 [写给捐赠计划]的一部分接受捐款(https://www.digitalocean.com/community/pages/write-for-digitalocean)。
介绍
Jitsi Meet是一个基于 WebRTC的开源视频会议应用程序。Jitsi Meet服务器提供多人视频会议室,您可以使用您的浏览器访问,同时提供与Zoom或Skype会议通话相似的功能。Jitsi会议的优点是,您的所有数据只通过您的服务器传输。端到端的TLS加密确保没有人可以调用通话。
在本教程中,您将在Ubuntu 22.04上安装并配置一个Jitsi Meet服务器。默认的Jitsi配置允许任何可以浏览服务器的人创建一个新的会议室,这对于互联网上公开可用的服务器来说并不理想。您还将配置Jitsi Meet,以便只有注册用户才能创建新的会议室。创建会议室后,如果他们有独特的地址和可选的密码,任何人都可以加入它。
前提条件
在您开始本指南之前,您将需要以下内容:
- 一个 Ubuntu 22.04 服务器具有非 root sudo 功能的用户和防火墙,您可以通过遵循 Ubuntu 22.04 初始服务器设置来设置。您需要的服务器的大小将取决于可用的带宽和您在会议中预计的参与者数量。下表将为您提供所需内容的想法。
- 一个域名配置以指向您的服务器。 使用 DNS Quickstart Guide来指向 DigitalOcean 服务器的域名。本指南使用示例域名
jitsi.your_domain
.
当选择一个服务器来运行您的 Jitsi Meet 实例时,您需要考虑主机会议室的系统资源。
CPU | Server Bandwidth | |
---|---|---|
Two Participants | 5% | 30Kbps Up, 100Kbps Down |
Three Participants | 15% | 5Mbps Up, 3Mbps Down |
两到三名参与者之间资源使用的跳跃是因为Jitsi在有两个客户端时会直接在客户端之间路由呼叫数据,而在有两个客户端时,呼叫数据会通过Jitsi Meet服务器路由。
在开始步骤 1 之前登录您的服务器作为非根, sudo 启用的用户。
步骤 1 – 设置系统主机名
在此步骤中,您将更改系统的主机名称,以匹配您打算为您的 Jitsi Meet 实例使用的域名。
首先,将系统的主机名设置为您将在您的 Jitsi 实例中使用的域名。下列命令将设置当前的主机名,并修改在重新启动之间持有系统主机名的 /etc/hostname
:
1sudo hostnamectl set-hostname jitsi.your_domain
请在提示时输入您的密码,您所执行的命令如下:
hostnamectl
:来自 systemd工具包的实用程序来管理系统主机名。set-hostname
: 设置系统主机名。
检查主机名是否用以下命令设置:
1hostname
此命令将返回您用hostnamectl
命令设置的主机名:
1[secondary_label Output]
2jitsi.your-domain
接下来,您将将服务器的主机名为其公共 IP 地址的本地映射设置,通过使用 nano 或您最喜欢的文本编辑器打开 `/etc/hosts’ 来完成此操作:
1sudo nano /etc/hosts
该文件的内容看起来如下:
1[label /etc/hosts]
2# Your system has configured 'manage_etc_hosts' as True.
3# As a result, if you wish for changes to this file to persist
4# then you will need to either
5# a.) make changes to the master file in /etc/cloud/templates/hosts.debian.tmpl
6# b.) change or remove the value of 'manage_etc_hosts' in
7# /etc/cloud/cloud.cfg or cloud-config from user-data
8#
9127.0.1.1 server1 server1
10127.0.0.1 localhost
11
12# The following lines are desirable for IPv6 capable hosts
13::1 localhost ip6-localhost ip6-loopback
14ff02::1 ip6-allnodes
15ff02::2 ip6-allrouters
然后,在127.0.0.1 localhost
行下面添加下列行:
1[label /etc/hosts]
2...
3public_ip jitsi.your_domain
4...
例如,如果您的服务器的公共IP为1.2.3.4
,则更新的文件将看起来如下:
1[label /etc/hosts]
2# Your system has configured 'manage_etc_hosts' as True.
3# As a result, if you wish for changes to this file to persist
4# then you will need to either
5# a.) make changes to the master file in /etc/cloud/templates/hosts.debian.tmpl
6# b.) change or remove the value of 'manage_etc_hosts' in
7# /etc/cloud/cloud.cfg or cloud-config from user-data
8#
9127.0.1.1 server1 server1
10127.0.0.1 localhost
111.2.3.4 jitsi.your_domain
12
13# The following lines are desirable for IPv6 capable hosts
14::1 localhost ip6-localhost ip6-loopback
15ff02::1 ip6-allnodes
16ff02::2 ip6-allrouters
保存并关闭文件。
您的服务器现在有主机名和 IP 地址设置 Jitsi 需要安装时. 在下一步,您将打开 Jitsi 和 TLS 证书安装程序所需的防火墙端口。
第2步:设置防火墙
当您遵循 Ubuntu 22.04 初始服务器设置时,您启用了 UFW 防火墙并打开 SSH 端口. Jitsi 服务器需要一些额外的端口打开以与呼叫参与者进行通信。
如果您尚未允许通过 UFW 进行 SSH 流量,请执行以下命令:
1sudo ufw allow OpenSSH
接下来,为 Jitsi 打开以下端口:
80/tcp
: TLS 证书注册请求中使用的端口.443/tcp
:用于会议室创建网页的端口.10000/udp
3478/udp
5349/tcp
:将传输和接收加密通话流量的端口。
运行以下ufw
命令来打开这些端口:
1sudo ufw allow 80/tcp
2sudo ufw allow 443/tcp
3sudo ufw allow 3478/udp
4sudo ufw allow 5349/tcp
5sudo ufw allow 10000/udp
检查他们是否都添加了ufw status
命令:
1sudo ufw status
您将收到以下输出,表示这些端口是开放的(包括OpenSSH):
1[secondary_label Output]
2Status: active
3
4To Action From
5-- ------ ----
6OpenSSH ALLOW Anywhere
780/tcp ALLOW Anywhere
8443/tcp ALLOW Anywhere
93478/udp ALLOW Anywhere
105349/tcp ALLOW Anywhere
1110000/udp ALLOW Anywhere
12OpenSSH (v6) ALLOW Anywhere (v6)
1380/tcp (v6) ALLOW Anywhere (v6)
14443/tcp (v6) ALLOW Anywhere (v6)
153478/udp (v6) ALLOW Anywhere (v6)
165349/tcp (v6) ALLOW Anywhere (v6)
1710000/udp (v6) ALLOW Anywhere (v6)
如果您未启用 UFW,您可能会看到以下不活跃状态,而不是端口:
1[secondary_label Output]
2Status: inactive
如果是这样,你需要启用ufw
。运行下列命令,并在被要求启用ufw
时回答 y:
1sudo ufw enable
重新检查状态,以确保港口开放。
当端口打开时,服务器已准备好进行 Jitsi 安装,您将在下一步完成。
步骤 3 – 安装 Jitsi Meet
您现在将添加 Jitsi 和 Prosody APT 存储库到您的服务器中。 Prosody是一个开源的 XMPP聊天服务器,Jitsi 使用它来发送消息和管理员身份验证。
首先,下载Jitsi GPG键与curl
下载实用程序:
1curl https://download.jitsi.org/jitsi-key.gpg.key -o jitsi-key.gpg.key
在这个命令中,‘-o’指定了下载的关键数据将被保存的文件的名称。‘apt’包管理器将使用这个GPG密钥来验证您将从Jitsi存储库下载的包。
接下来,用以下gpg
命令将GPG密钥添加到您的系统的键盘:
1sudo gpg --output /usr/share/keyrings/jitsi-key.gpg --dearmor jitsi-key.gpg.key
使用这个gpg
命令,你可以使用--output
来生成一个文件名来保存键盘,并使用--dearmor
来解包钥匙到APT可用的格式。
您现在将添加 Jitsi 存储库到您的服务器,创建一个新的 APT 源文件,其中包含 Jitsi 存储库。
1sudo nano /etc/apt/sources.list.d/jitsi-stable.list
将此行添加到 /etc/apt/sources.list.d/jitsi-stable.list
文件中:
1[label /etc/apt/sources.list.d/jitsi-stable.list]
2deb [signed-by=/usr/share/keyrings/jitsi-key.gpg] https://download.jitsi.org stable/
保存和退出编辑器。
接下来,您将按照相同的步骤添加 Prosody 包。下载 Prosody GPG 密钥:
1curl https://prosody.im/files/prosody-debian-packages.key -o prosody-debian-packages.key
然后,将密钥添加到您的服务器的键:
1sudo gpg --output /usr/share/keyrings/prosody-keyring.gpg --dearmor prosody-debian-packages.key
接下来,打开 Prosody 的新源文件:
1sudo nano /etc/apt/sources.list.d/prosody.list
将以下行添加到当前空的 Prosody 源文件中:
1[label /etc/apt/sources.list.d/prosody.list]
2deb [signed-by=/usr/share/keyrings/prosody-keyring.gpg] http://packages.prosody.im/debian jammy main
保存和退出编辑器。
您现在可以删除您下载的 GPG 密钥,因为它们不再需要:
1rm jitsi-key.gpg.key prosody-debian-packages.key
最后,执行系统更新,从新的存储库中收集包列表,然后安装jitsi-meet
包:
1sudo apt update
2sudo apt install jitsi-meet
按y
来确认在提示时安装包。
在安装jitsi-meet
时,您将被要求输入您想要用于您的 Jitsi Meet 实例的域名(例如,jitsi.your-domain
)。
使用TAB
键将方针从主机名域移动,以突出
然后,您将看到一个新的对话框,询问您是否希望 Jitsi 创建并使用 自签名 TLS 证书或使用现有证书:
如果您没有您的 Jitsi 域的 TLS 证书,请选择 ** 生成新自签证书** 选项。
您的 Jitsi Meet 实例现在使用自签名的 TLS 证书安装,如果您还没有 TLS 证书,您将收到浏览器警告,因此您将在下一步获得签名的 TLS 证书。
步骤 4 – 获取签名的 TLS 证书
Jitsi Meet 使用 TLS 证书来加密呼叫流量,以便没有人可以听取您的呼叫,因为它通过互联网旅行。
Jitsi 使用 certbot 实用程序获取和管理免费但行业标准和安全的 TLS 证书. 在 Jitsi 获得所需的证书之前,您需要安装此实用程序。
使用以下命令安装 certbot:
1sudo apt install certbot
按y
来确认 certbot 包的安装。
Jitsi Meet 提供一个脚本来自动下载您的域的 TLS 证书. 运行由 Jitsi Meet 提供的此证书安装脚本在 /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh
使用以下命令:
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.your_domain)
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
11You need to agree to the ACME server's Subscriber Agreement
12(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
,并将用于通知您关于安全和其他与证书相关的问题。 您必须在这里输入电子邮件地址以继续安装。
该脚本将完成安装和配置您的 Jitsi 服务器的 SSL 证书,而无需进一步的用户输入。
Jitsi Meet 的默认配置是,任何访问 Jitsi Meet 服务器主页的人都可以创建一个新的会议室. 此默认模式将使用服务器的系统资源来运行会议室,并且不适合未经授权的用户。
步骤 5 – 锁定会议室创建
您现在将配置您的 Jitsi Meet 服务器,以允许仅注册用户创建会议室。
您要编辑的文件是由安装程序生成的,并与您的域名配置在一起. 以下示例中将使用变量 jitsi.your_domain
代替您的域名。
首先,使用文本编辑器打开 /etc/prosody/conf.avail/jitsi.your_domain.cfg.lua
:
1sudo nano /etc/prosody/conf.avail/your_domain.cfg.lua
接下来,使用 nano 的搜索函数来编辑该文件的行: CTRL+W
. 按 CTRL+W
,然后输入 `身份验证 = '匿名' 到搜索框中。
此搜索将引导方针到您需要编辑的行,从当前设置中编辑下面的行:
1[label /etc/prosody/conf.avail/jitsi.your_domain.cfg.lua]
2 authentication = "anonymous"
一个新的设置:
1[label /etc/prosody/conf.avail/jitsi.your_domain.cfg.lua]
2 authentication = "internal_plain"
此配置告知 Jitsi Meet 强制验证用户名和密码,然后允许新访客创建会议室。
在相同的文件中,将下列部分添加到文件的末尾:
1[label /etc/prosody/conf.avail/your_domain.cfg.lua]
2...
3VirtualHost "guest.jitsi.your_domain"
4 authentication = "anonymous"
5 c2s_require_encryption = false
6 modules_enabled = {
7 "bosh";
8 "ping";
9 "pubsub";
10 "speakerstats";
11 "turncredentials";
12 "conference_duration";
13 }
此配置允许任何用户加入一个经过身份验证的用户创建的会议室,但是,客人必须有独特的 URL (以及可选的密码) 才能输入。
在这里,您已经在域名前面添加了guest。
例如,为jitsi.your_domain
添加的正确名称是guest.jitsi.your_domain
。 guest.
主机名被 Jitsi Meet 内部使用,因此您永远不会在浏览器中输入它,也不需要为guest.
主机名单独的 DNS 记录。
完成后,保存并关闭 /etc/prosody/conf.avail/jitsi.your_domain.cfg.lua
文件。
接下来,使用文本编辑器在 /etc/jitsi/meet/jitsi.your_domain-config.js
打开另一个配置文件:
1sudo nano /etc/jitsi/meet/jitsi.your_domain-config.js
再次使用搜索工具CTRL+W
搜索匿名域:
,将带您到以下行:
1[label /etc/jitsi/meet/your_domain-config.js]
2 // anonymousdomain: 'guest.example.com',
通过在行开始时删除双切割 //
来编辑此行,以显示如下:
1[label /etc/jitsi/meet/your_domain-config.js]
2 anonymousdomain: 'guest.jitsi.your_domain',
您将使用您之前使用的 guest.jitsi.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:jitsi.your_domain
此配置将 Jitsi Meet 流程中的一个指向执行现在需要的用户身份验证的本地服务器。
您的 Jitsi Meet 实例现在已配置为只有注册用户才能创建会议室。创建会议室后,任何人都可以加入会议室而不是注册用户。
现在,Jitsi Meet已配置为需要验证用户创建房间,您需要注册这些用户及其密码。
运行以下命令将用户添加到您的服务器:
1sudo prosodyctl register user your_domain password
您在这里添加的用户不是系统用户,他们只能创建会议室,无法通过SSH登录您的服务器。
當您執行此命令時,您可能會看到以下警告:
1[label lua5.1 warning]
2general warn Lua 5.1 has several issues and support is being phased out, consider upgrading
lua5.1
包仍然是Prosody的必需依赖,不会对您使用的系统构成安全风险,随着Prosody和Jitsi Meet的进一步开发,对lua5.1
的依赖将逐步消除。
最后,重新启动所有 Jitsi Meet 流程以加载新配置:
1sudo systemctl restart prosody.service jicofo.service jitsi-videobridge2.service
您的 Jitsi Meet 服务器现在已完全安装、配置和运行,您将在最后一步中创建一个新的会议室。
步骤 6 - 开设会议室并邀请参与者
您现在可以浏览并开始使用您的新的 Jitsi Meet 服务器. 打开您的浏览器,并在地址栏中输入您的 Jitsi 域名(含 https
)。
要启动会议,请按下目标页面上的 ** 开始会议** 按钮:
当您点击开始会议
按钮时,会开始新的会议,您将在下面的对话框中立即被问到您是否是会议的主持人(会议的管理员):
您必须点击我是主机
按钮才能继续运行. 点击该按钮后,您将被要求在以下字段中输入您的管理员用户名和密码:
用户名和密码是您在步骤 5 与prosodyctl
实用程序设置的用户名和密码。输入用户名和密码,然后点击 Login ,这将创建新的会议,并将您设置为导演。
现在会议已开启并运行,您可以邀请参与者. 点击底部面板上的参与者图标:
此操作打开一个右手面板. 点击 邀请某人 按钮:
此操作将打开邀请更多人
对话框,单击复制图标来复制会议的唯一 URL:
现在,您可以将会议URL粘贴到电子邮件或聊天程序中,向您想要参加会议的任何人发送。
创建会议后,您可以通过打开一个新的隐形浏览器选项卡来测试此功能,并将会议URL粘贴到其中,您将可以作为新参与者加入会议,而无需用户名和密码。
结论
在本文中,您部署了一台 Jitsi Meet 服务器,您可以使用它来托管安全和私人视频会议室. 您可以通过从 Jitsi 手册的指示扩展您的 Jitsi Meet 实例。