亚马逊AWS官方博客

开始使用开源 Web 会议解决方案 Jitsi

在这个前所未有的时代,世界各地的团队都在寻找可以帮助他们在线工作和协作的解决方案。客户面临各种各样的选择,如果您也在寻觅,本文将为您提供一些选项,帮您做出选择。

许多团队选择使用托管解决方案来实现协作。如果您的企业需要扩展(以同时支持数百或数千位用户),或者不想因此部署和管理新的 Web 服务,不妨使用 Amazon Chime。Amazon Chime 是托管在 AWS 上的一项通信服务,您只需单击几下即可轻松上手。通过一个应用程序,即可在组织内外召开会议、聊天和拨打商务电话。借助 Amazon Chime,您可以灵活选择进行在线会议、视频会议和商务通话所需功能,而且仅需按使用量付费。要了解有关 Amazon Chime 的更多信息,请访问 https://aws.amazon.com/chime

不过,某些企业可能更喜欢使用开源技术来实现这一切。Jitsi 就是这样一个开源项目,它支持各种在线 Web 会议功能。接下来,本文将从技术方面说明如何通过托管您自己的 Jitsi 实例来实现这一切。

Jitsi 简介

Jitsi 是使用 JavaScript 构建的开源 Web 会议应用程序。如果您正在寻找可在远程工作中为您和您的团队提供帮助的工具,那么您可能会发现它很实用。您可以在 Jitsi GitHub 存储库上查看该项目,但是本教程将可以帮助您托管自己的此应用程序版本。我将帮助您了解如何在 AWS 上安装该项目,您可以将其部署到离您和您想要与之通信的用户最近的任何 AWS 区域。

Jitsi 的发展历史

如今,许多发现 Jitsi 的用户都对它的起源很感兴趣。这个项目可以追溯到 2003 年:IP 语音 (VoIP) 的早期黄金时代,当时人们正在努力解决 NAT 穿越问题和单向音频通话的困扰,仍在探索媒体传输的最佳实践。

Jitsi 是首批强调安全性和隐私的完全开源通信选项之一。例如,人们开始使用完全端到端的 ZRTP 加密通话时,它是最早的选择之一。

2013 年底,随着 WebRTC 的到来,Jitsi 将 Jitsi Videobridge(尽管该代码大部分已经被完全重写了多次,但是部分小区段仍然可以追溯到很早的年代)以及 Jitsi Meet 等部分 Web 会议组件迁移到了云。

Jitsi 始终将重点放在安全性上。如今,要构建一个完全私密且安全的会议服务器,选择它可以说是最轻松的,这也是我们要在本文中介绍的内容。全球注重隐私的用户都在使用它,其中就包括新闻自由基金会(Wired 撰文)。

Jitsi 的大部分贡献者都来自云通信提供商 8×8(www8x8.com),该公司还通过 met.jit.si 运行热门的 Jitsi 示例部署

本教程将帮助您了解如何托管具有核心功能的自己的此应用程序版本。我将其分为了两部分:一部分适用于希望通过 Amazon Elastic Compute Cloud (Amazon EC2) 实例运行它的用户,另一部分适用于那些喜欢使用容器的用户,因此可以通过 Amazon Elastic Container Service (Amazon ECS) 来运行它。

如果需要高级功能,则应与 Jitsi 背后的维护人员合作,或按照文档说明,在 GitHub 存储库上设置这些高级功能。这些不在本教程的讨论范围之内。

我们先来看 Amazon EC2 部分。如果不适用于您,请跳至 Amazon ECS 部分

在 Amazon EC2 上部署 Jitsi

先决条件

您需要做好以下准备才能完成本教程:

  • AWS 账户:您需要配置服务,因此需要一个其中某个用户可预置这些服务的账户。
  • DNS 提供商:您需要通过 DNS 注册应用程序,这是获得 SSL 证书所必需的。您可以使用 Amazon Route 53 或其他 DNS 提供商。

注意:如果您不使用 DNS,您可以启动并运行 Jitsi,但是随后您必须处理用户在浏览器中遇到 SSL 错误的潜在问题,以及网络摄像头和麦克风无法使用的问题。

预置您的 Amazon EC2 实例

首先,您必须创建一个正在运行的 Linux 实例,以便在上面运行 Jitsi 服务器。

1.SSH 密钥对

可选:如果您已经具有 SSH 密钥对,则可以使用现有密钥对。

创建一个将用于通过 SSH 连接到 Jitsi 服务器的密钥对。在 EC2 控制台左侧,单击密钥对,然后使用创建按钮,创建一个 PEM(默认选项)密钥对。

注意:如果您使用 Windows,可能使用的是 Putty,那么请使用 ppk 密钥格式。

单击创建密钥对按钮,然后请务必保存计算机上弹出的密钥。请确保安全。您将需要更改此文件的权限

提示:密钥对是区域性的,因此请确保将生成的密钥对与要将 EC2 实例启动到的区域匹配起来。

重要提示:安全访问您的 EC2 实例。确保公开开放端口 SSH (22)。将其限制为您的 I P地址,或使用您为执行此操作设置的现有堡垒或跳转主机(更理想的选项)。如果您对此不确定,请通过下面的评论区提问,我将引导您完成。

2.启动实例

在启动实例之前,您必须考虑要选择的实例类型及其费用。Jitsi 需要相当大的内存,因此,如果不进行调整/入侵,就无法使用微型实例,这不在本文讨论范围内。

我至少会使用 1 个 CPU 和 8GB 内存,但是您可以使用 AMD 实例。我还没有尝试过基于 Graviton ARM 的实例,但可以试试,这完全取决于应用程序二进制文件是否已针对 ARM 进行了编译且是否位于应用程序存储库中。如果您尝试了,请告诉我。

在本教程中,我使用 t3.large 实例;它们提供 2 个 CPU 和 8GB 内存,应该可以支持少量人使用此实例。在调整实例大小时,您可能需要考虑以下方面:

  • 随用户数量增加的 CPU/内存组合,以及
  • 网络性能。

T 实例的速度为 5Gbps,但是如果其他实例类型的速度达到 25Gbps,可能会获得更好的性能。

提示:在查看调整大小选项时,网络性能和内存是需要优先考虑的两个关键参数。

实例启动说明

  1. 在 AWS 控制台中,选择希望部署 Jitsi 服务器的区域,并确保它与您的密钥对所在区域相同。
  2. 进入 EC2 控制台,选择实例
  3. 点击启动实例
  4. 在搜索框中键入 Ubuntu,然后按回车键。选择 Ubuntu 18.04 LTS。
  5. 在“实例类型”部分,选择您确定的实例类型(上面的 Bit),然后单击下一步:配置实例详细信息
  6. 接受下一页上的默认值,然后单击下一步:添加存储
  7. 接受下一页上的默认值,然后单击下一步:添加标签
  8. 在下一页接受默认值,然后单击下一步:添加安全组
  9. 将安全组名称更改为 Jitsi-Security-Group
  10. SSH 源更改为您的 IP 地址(如果使用堡垒主机,则更改为堡垒主机)。
  11. 从源任何位置添加 HTTP 和 HTTPS 规则。
  12. 从源任何位置添加自定义 TCP 端口 4443 规则。
  13. 从源任何位置添加自定义 UDP 端口 10000 规则。
  14. 单击下一步:审核启动
  15. 单击启动
  16. 在弹出列表中,选择您创建的 SSH 密钥并勾选确认。
  17. 单击启动实例开始创建,然后在以下屏幕上单击查看实例

为此进行预置和设置将需要几分钟时间。在控制台上,您的实例更改为状态检查正在运行并且通过全部两项检查后,即表示您完成了实例启动。

在此部分左侧,您会看到一个实例 ID 条目,请记下来,以便在下一部分使用。

分配弹性 IP

为确保您的实例在重新启动期间保留其 IP,请配置弹性 IP。从 EC2 控制台中:

  1. 选择弹性 IP。
  2. 单击分配弹性 IP 地址
  3. 选择默认值(Amazon IPv4 地址池),然后单击分配
  4. 操作下拉菜单中选择关联弹性 IP 地址
  5. 记下出现的框中的弹性 IP 地址,以便在配置 DNS 时使用。
  6. 实例下的搜索框中,单击并找到您的实例 ID,然后单击关联

您的实例现在有一个与之关联的弹性 IP。

设置 DNS

此步骤是可选的,但强烈建议您执行。您可以不使用 DNS 继续操作,并将 Jitsi 服务器配置为在访问时使用 IP 地址。但是,您将无法成功配置 SSL 证书,并且用户在连接时可能会遇到可用性/浏览器问题。

您将需要为已预置的新主机配置 DNS 条目,以便在安装过程中用于生成 SSL 证书。

注意:LetsEncrypt 脚本将执行反向查找,并可能会通过 IP 解析此主机的名称。该过程还预计这是一个 A 记录。我没有尝试看看如果使用别名或 C 记录会发生什么情况。

在继续之前,请确保在执行 nslookup(或任何首选的 DNS 查找工具)时,现在创建的 DNS 记录可解析为实例 IP 地址。在确定此情况如实前,请不要继续。

安装并配置 Jitsi

现在我们会将 Jitsi. SSH 安装并配置到您的实例中。您将使用 SSH 密钥执行此操作,您的命令将如下所示:

 ssh -i {ssh-key} ubuntu@{ip address}

其中,{ssh-key} 是您创建的密钥,而 {ip-address} 是您启动的实例的 IP 地址。如果在执行此操作的过程中遇到麻烦,则应检查安全组和 IP 地址,因为 SSH 可能已被阻止。

$ sudo su -
# echo 'deb https://download.jitsi.org stable/' >> /etc/apt/sources.list.d/jitsi-stable.list
# wget -qO - https://download.jitsi.org/jitsi-key.gpg.key | apt-key add -
# apt-get update

更新所有本地软件包需要几秒钟或几分钟的时间。完成此操作后,对 system.conf 文件进行更改,以满足此应用程序的需求。

要更新这些值,请使用您喜欢的编辑器(我用的是 vi)编辑 /etc/systemd/system.conf

# vi /etc/systemd/system.conf

确保您拥有以下值;您可以在文件中添加注释,也可以将它们添加到文件末尾,我发现后者更容易:

DefaultLimitNOFILE=65000
DefaultLimitNPROC=65000
DefaultTasksMax=65000

现在,您需要重新加载 systemd 以合并这些更改,因此请运行以下命令:

# systemctl daemon-reload

现在,使用以下命令安装 Jitsi 应用程序:

# apt-get -y install jitsi-meet

这大约需要一分钟,然后系统将显示一个漂亮的粉红色屏幕,提示您输入当前安装的主机名。在此处输入您注册的 DNS 名称,现在解析为主机 IP。

您输入后,系统将询问您是想要生成证书还是使用现有的证书。在此部分,选择默认选项(生成证书)。

您按下回车键后,安装过程应该就会完成,不会超过几分钟时间。系统将显示如下所示的输出:

Replacing debian:VeriSign_Universal_Root_Certification_Authority.pem
Replacing debian:Verisign_Class_3_Public_Primary_Certification_Authority_-_G3.pem
Replacing debian:Visa_eCommerce_Root.pem
Replacing debian:XRamp_Global_CA_Root.pem
Replacing debian:certSIGN_ROOT_CA.pem
Replacing debian:ePKI_Root_Certification_Authority.pem
Replacing debian:thawte_Primary_Root_CA.pem
Replacing debian:thawte_Primary_Root_CA_-_G2.pem
Replacing debian:thawte_Primary_Root_CA_-_G3.pem
Adding debian:auth.jitsi.beachgeek.co.uk.pem 
done.
done.
Setting up jitsi-meet (1.0.4101-1) ...
Processing triggers for systemd (237-3ubuntu10.33) ...
Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
Processing triggers for ca-certificates (20180409) ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.
done.
Processing triggers for ureadahead (0.100.0-21) ...
Processing triggers for libc-bin (2.27-3ubuntu1) ...

完成后,您需要生成证书。通过命令行运行以下命令:

# /usr/share/jitsi-meet/scripts/install-letsencrypt-cert.sh

系统将提示您输入电子邮件地址,在您输入该地址后,脚本将自动执行请求和安装 SSL 证书的流程。输出内容如下所示:

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for {yourdomanin}
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/jitsi.beachgeek.co.uk/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/{yourdomain}/privkey.pem
Your cert will expire on 2020-06-04.To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again.To non-interactively renew *all* of your certificates, run
"certbot-auto renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

大功告成:现在已安装应用程序,配置了 SSL 证书,并且应用程序已准备就绪。脚本会关闭服务器,因此您需要重新启动服务器。

管理实例

要停止、启动和检查服务的状态,请使用以下命令:

$ sudo service jitsi-videobridge restart
$ sudo service jitsi-videobridge stop
$ sudo service jitsi-videobridge start
$ sudo service jitsi-videobridge status

您必须知道的主要目录如下:

  • /var/log/jitsi:包含 Java 系统日志和应用程序日志。
  • /usr/share/jitsi-meet:包含主应用程序目录。
  • /etc/jitsi:Jitsi 所有组件的系统配置文件。

重启时,服务应在您开始时自动启动。

优化成本

您可能不需要全天候 24×7 运行,因此不妨考虑使用 Amazon EC2 实例计划程序等工具来自动关闭/重新启动实例,以节省成本。

删除/卸载

不需要这些功能后,请务必删除 EC2 实例和配置的 DNS 记录。

高级安装

请参阅项目安装文档,以获取有关如何在 NAT 实例后配置 Jitsi 的更多详细信息。在本教程中,我尽量保持简单,以尽量降低设置和运行实例的成本。

在 AWS ECS 上部署 Jitsi

容器说明

如果您希望将 Jitsi 部署到容器基础设施上,开源维护人员非常乐意为您提供支持,而 GitHub 存储库则提供了 Docker 说明。我将以此为起点在 Amazon ECS 上部署 Jitsi。

注意:已在 Linux 和 macOS 上进行了测试。如果您无权访问 Linux 或 macOS,建议您尝试通过 AWS Cloud9 IDE 环境来运行。此说明可能适用于 Windows,因此如果您遇到问题,请告诉我,我会尽力帮助您。

Jitsi 提供 Docker 存储库,以便您可以在您的本地计算机上轻松启动并运行此解决方案。我们会将此作为基础,以创建在 Amazon ECS 上构建和部署 Jitsi 所需的配置文件。

先决条件

您必须安装并设置以访问您的 AWS 环境:

  • AWS 账户:您将配置服务,因此您需要的账户要拥有可预置这些服务的用户。
  • DNS 提供商:获取 SSL 证书时需要它。您可以使用 Amazon Route 53 或其他 DNS 提供商。

您还将需要以下工具;确保它们全部都是最新版本,并在继续前启动运行。

SSH 密钥对

可选:如果您已经有 SSH 密钥对,您可以使用现有密钥对。在 Jitsi 服务器中创建将用于 SSH 的密钥对。从 EC2 控制台的左侧点击密钥对,然后使用创建按钮创建一个 PEM(默认选项)密钥对。

注意:如果您使用的是 Windows,并且可能使用 Putty,则使用 ppk 密钥格式。

点击创建密钥对按钮,然后确保保存在您的计算机上弹出的密钥。保持此操作的安全性。您将需要更改此文件的权限。

提示:密钥对是区域性的,因此确保将您在此区域生成的密钥对与您打算启动 EC2 实例的密钥对相匹配。

修改您的 docker-compose.yml

在您的工作站上,将存储库克隆到清理文件夹中:

$ git clone https://github.com/jitsi/docker-jitsi-meet && cd docker-jitsi-meet
$ cp env.example .env

现在,您将需要编辑 docker-compose 文件,并去掉所有的行,例如:

networks:
 meet.jitsi: null
 volumes:
  - /home/ubuntu/.jitsi-meet-cfg/jicofo:/config:rw

将成为

networks:
 meet.jitsi: null

(您的卷路径可能有所不同;这来自于我的输出。)

您应该查看您创建的 .env 文件。默认值通常适用于安装,但当您熟悉设置后,您可能想要更改默认值。

现在,您已拥有开始适当安装和配置所需的源文件。

使用以下命令创建您的 Amazon ECS 集群。在此示例中,我们将创建在 eu-central-1 区域中托管的称为 jitsi-central 的 ECS 集群。

$ ecs-cli configure --cluster jitsi-central --default-launch-type EC2 --region eu-central-1 --config-name jitsi-central

您将不会获得任何输出,但如果您检查您的 ~/.ecs/ 文件夹,您将获得包含类似以下内容的输出的文件:

version: v1
default: jitsi-central
clusters:
jitsi-central:
cluster: jitsi-central
region: eu-central-1
default_launch_type: EC2

现在,运行以下命令以创建 Cloudformation 模板并构建集群。您将在此看到,我们在使用 EC2 密钥对,这使您在需要排查问题时可以 SSH 到这些实例。

$ ecs-cli up --keypair jitsi-central --capability-iam --size 1 --instance-type m4.xlarge --launch-type EC2

此操作应生成类似以下内容的输出:

INFO[0000] 将推荐的 Amazon Linux 2 AMI 与 ECS 代理 1.37.0 和 Docker 版本 18.09.9-ce 结合使用
INFO[0000] 已创建集群 cluster=jitsi-central region=eu-central-1
INFO[0001] 等待您的集群资源被创建…
INFO[0001] Cloudformation 堆栈状态 stackStatus=CREATE_IN_PROGRESS
INFO[0061] Cloudformation 堆栈状态 stackStatus=CREATE_IN_PROGRESS
INFO[0121] Cloudformation 堆栈状态 stackStatus=CREATE_IN_PROGRESS
VPC 已创建:vpc-0eeacc205a44d937c
安全组已创建:sg-08d90fc4ee48edde3
子网已创建:subnet-02ea5c5d22f9692c5
子网已创建:subnet-098b26c7298c21bff
集群创建成功。

您可以检查您的 AWS CloudFormation 控制台,您现在应该可以看到已为此集群创建的新堆栈。

下一步是创建 taskDefinition,您将可以在此处为组成 Jitsi 的四个容器创建定义。默认情况下,taskDefinition 采用目录名称,因此,我们将先创建一个目录,然后将我们的 docker composer 文件移动到该目录中:

$ mkdir jitsi-central
$ mv docker-jitsi-meet jitsi-central
$ cd jitsi-central/docker-jitsi-meet
$ ecs-cli compose --file docker-compose.yml up 

您应该获得如下输出:

WARN[0000] 正在跳过服务的不支持 YAML 选项... option name=depends_on service name=jicofo
WARN[0000] 正在跳过服务的不支持 YAML 选项... option name=networks service name=jicofo
WARN[0000] 正在跳过服务的不支持 YAML 选项... option name=depends_on service name=jvb
WARN[0000] 正在跳过服务的不支持 YAML 选项... option name=networks service name=jvb
WARN[0000] 正在跳过服务的不支持 YAML 选项... option name=expose service name=prosody
WARN[0000] 正在跳过服务的不支持 YAML 选项... option name=networks service name=prosody
WARN[0000] 正在跳过服务的不支持 YAML 选项... option name=networks service name=web
INFO[0000] 使用 ECS 任务定义 TaskDefinition="jitsi-central:1"
INFO[0000] 正在启动容器... container=55d4770b-d356-447e-b079-c3c743da5e08/jicofo
INFO[0000] 正在启动容器... container=55d4770b-d356-447e-b079-c3c743da5e08/jvb
INFO[0000] 正在启动容器... container=55d4770b-d356-447e-b079-c3c743da5e08/prosody
INFO[0000] 正在启动容器... container=55d4770b-d356-447e-b079-c3c743da5e08/web
INFO[0000] 描述 ECS 容器状态 container=55d4770b-d356-447e-b079-c3c743da5e08/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition="jitsi-central:1"
INFO[0000] 描述 ECS 容器状态 container=55d4770b-d356-447e-b079-c3c743da5e08/jvb desiredStatus=RUNNING lastStatus=PENDING taskDefinition="jitsi-central:1"
INFO[0000] 描述 ECS 容器状态 container=55d4770b-d356-447e-b079-c3c743da5e08/jicofo desiredStatus=RUNNING lastStatus=PENDING taskDefinition="jitsi-central:1"
INFO[0000] 描述 ECS 容器状态 container=55d4770b-d356-447e-b079-c3c743da5e08/prosody desiredStatus=RUNNING lastStatus=PENDING taskDefinition="jitsi-central:1"
INFO[0012] 描述 ECS 容器状态 container=55d4770b-d356-447e-b079-c3c743da5e08/web desiredStatus=RUNNING lastStatus=PENDING taskDefinition="jitsi-central:1"
INFO[0012] 描述 ECS 容器状态 container=55d4770b-d356-447e-b079-c3c743da5e08/jvb desiredStatus=RUNNING lastStatus=PENDING taskDefinition="jitsi-central:1"
INFO[0012] 描述 ECS 容器状态 container=55d4770b-d356-447e-b079-c3c743da5e08/jicofo desiredStatus=RUNNING lastStatus=PENDING taskDefinition="jitsi-central:1"
INFO[0012] 描述 ECS 容器状态 container=55d4770b-d356-447e-b079-c3c743da5e08/prosody desiredStatus=RUNNING lastStatus=PENDING taskDefinition="jitsi-central:1"
INFO[0018] 已启动容器... container=55d4770b-d356-447e-b079-c3c743da5e08/web desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="jitsi-central:1"
INFO[0018] 已启动容器... container=55d4770b-d356-447e-b079-c3c743da5e08/jvb desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="jitsi-central:1"
INFO[0018] 已启动容器... container=55d4770b-d356-447e-b079-c3c743da5e08/jicofo desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="jitsi-central:1"
INFO[0018] 已启动容器... container=55d4770b-d356-447e-b079-c3c743da5e08/prosody desiredStatus=RUNNING lastStatus=RUNNING taskDefinition="jitsi-central:1"

我们现在已启动并运行 jitsi-centraltaskDefinition。现在,我们需要修改配置选项,然后才能启动并访问 Jitsi 应用程序。

更改配置

从 Amazon ECS 控制台中,选择任务定义,然后从列表中选择您刚创建的任务;在上面的示例中,该任务为 jitsi-central

当您点击它时,您将看到任务版本的列表。如果它是第一个,您将只看到一个,但如果您更改、编辑、配置任务,受版本控制的列表将增长,您将看到每个版本显示为添加到该版本的下一个序列号,例如,jitsi-central:1jitsi-central:2jitsi-central:3 等。

点击最新(编号最高)的版本。在随后出现的屏幕上,点击创建新修订版本

向下滚动到称为容器定义的区域,您应看到四个容器:jvbprosodywebjicodo

我们要做的第一件事是更改内存分配,因为默认值太低;您将需要在您的设置中对此进行实验,并根据服务器的繁忙程度对其进行调整。

点击 JVB。在弹出的屏幕上,将内存限制 (MiB) 从默认的 512 更改为 4096。点击更新。更改 Prosody,将其更改为 1024,并更改 Jicofo,将其更改为 1024,确保每次都点击更新

当您启动并运行此容器时,您可能需要修改内存设置来优化应用程序的性能。

滚动到屏幕底部,然后点击创建。您应看到绿色的框,其中显示,您已创建新的任务修订版本。

现在,我们将更新网络。从此屏幕中,再次点击创建新修订版本。再次向下滚动到容器定义。点击 JVB

向下滚动到网络设置,并在称为链接的框中输入 prosody:xmpp.meet.jitsi,然后点击更新

JifocoWeb 容器重复此操作。

选择 Prosody 容器并向下滚动到网络设置,此时,在主机名中输入 xmpp.meet.jitsi,然后点击更新

滚动到屏幕底部,然后点击创建。您应看到绿色的框,其中显示,您已创建新的任务修订版本。

更新正在运行的容器

从 Amazon ECS 控制台中,点击集群并选择 jitsi-central(或者无论您的称为什么)。

从出现的屏幕中,点击任务。您应看到修订版本 :1(或比您刚创建的版本更旧的修订版)正在运行。

点击当前正在运行的任务,然后选择停止。将出现警告,但请点击停止。现在,您应该没有更多正在运行的任务。

点击运行新任务。从下一个屏幕中,点击切换到启动类型,它的字体很小,很容易被忽略。

选择 EC2,然后向下滚动并选择最新(编号最高) 版本的任务定义。

滚动到底部并点击运行任务。当您返回任务控制面板时,状态可能是待定,但它应该会快速变为正在运行

点击正在运行的任务,应该会显示详细信息页面,并且您的四个正在运行的容器将显示在底部附近。点击 Web,将显示开放的公有 IP 地址。然而,安全组已阻止这些地址,它们将不会起作用。

更新安全组

您将需要修改安全组以允许入站流量。更改安全组,以便它允许端口 10000 上从容器主机的 Any 中传入的 UDP。要查找安全组,请查看正在运行 ECS 容器的 EC2 主机,您将找到需要更新的安全组。

添加 SSL 证书

您可以使用 AWS Certificate Manager (ACM) 生成 ssl 证书,也可以通过您的首选证书颁发机构 (CA) 上传现有证书。

从 AWS 控制台中,启动 ACM(它位于“安全、身份和合规性”下),然后点击开始使用。如果您想要使用首选证书颁发机构颁发的证书,请使用导入证书并添加密钥文件(PEM 格式)。

点击请求公有证书,并在下一个屏幕中输入您打算用于访问 Jitsi 服务器的域。点击下一步

将为您提供两个选项进行域验证。如果您选择 DNS,您需要将 CNAME 别名添加到您的现有 DNS 记录中(此操作非常标准)。如果您选择电子邮件,将联系 WHOIS 记录中列出的电子邮件别名,且必须在设定时间内作出影响。在本教程中,我将选择 DNS。

在下一个屏幕(标签)中,选择查看,然后在您觉得您输入的内容没问题时,点击确认请求

在下一个屏幕中,您现在将看到您需要添加在 CNAME 记录中的详细信息。点击继续,然后您将进入证书管理器控制台。现在,您的请求应处于待验证中。一旦您更新了 DNS 记录,这将花费您几分钟时间,且您应该看到状态更改为已发布

配置负载均衡器

配置负载均衡器之前,确保您已识别集群已部署到的 VPC 和子网信息。您可以通过实例在 EC2 控制台中执行此操作。

从 Amazon EC2 控制台中,选择负载均衡器(它显示在底部附近),然后点击创建负载均衡器

选择 Application Load Balancer 并点击创建。对于名称,将它命名为 jitsi-lb

侦听器下,通过点击添加侦听器添加 HTTPS

可用区下,选择正确的 VPC,然后选择您的负载均衡器将在其中工作的两个可用区。

点击下一个配置,您现在应该能够从配置安全设置中选择您在上一步创建的证书。点击配置安全组

接受默认设置,然后点击配置路由。提供名称 jitsi-target,将目标类型保留为实例,但将方案更改为 HTTPS,端口更改为 8443。点击注册目标

在屏幕下半部(实例)上,点击属于 ECS 集群的实例,然后点击添加到已注册。根据您拥有的主机数量,您需要将它们全部添加在此;在此默认教程中,我只配置了一个,因此我将只添加一个。依次点击查看创建

预置负载均衡器需要时间。当此操作完成时,您需要获取 A 记录详细信息并更新您的 DNS,以便您的主机解析到负载均衡器。

当此操作完成后,您应将 HTTP 配置为从负载均衡器进行 HTTPS 重定向。选择您刚创建的负载均衡器,然后点击侦听器选项卡。

点击 HTTP:80 并选择编辑,然后删除当前默认操作并添加一个重定向到 443 的新操作。

测试

现在,您应该能够从您使用的域名访问 Jitsi 实例,并从您的浏览器连接到该实例。

排查安装问题

如果您遇到问题,请打开 ECS 集群的安全组,并允许从您的指定 IP 地址进行 SSH 访问。这样一来,您将能够使用 SSH 密钥登录运行容器的主机,然后使用以下命令来帮助进行问题排查:

$ docker ps - 为您提供包含容器 ID 的正在运行容器的列表
$ docker exec -it {container id} bash - 允许您将根用户终端放入容器中
$ docker logs {container id} - 允许您获取 stdOut 日志

请记住,它们是经过容器优化的映像,因此,您没有任何习惯使用的工具。为了安装它们以帮助排查问题,您将需要运行:

# apt-dpkg-wrap apt-get update && apt-get install {package}

要了解的有用软件包包括用于编辑的 vimdnsutils 和用于网络测试的 iputils-ping

您可以使用 ecs-cli command-line 工具监控、停止和启动您的集群。在不使用参数的情况下运行 ecs-cli 命令,或参阅在线文档了解更多帮助。

更改您的集群大小

如果您想要更改集群大小,可以使用以下几个选项:

  • 使用 ecs-cli scale --capability-iam --size x,其中 x 是您希望集群扩展到的实例数量;您可以进行扩大或缩减。
  • 您还可以通过 AWS CloudFormation 执行此操作。查找用于创建集群的堆栈(它应被称为 amazon-ecs-cli-setup-{clustername} 之类的名称),然后使用更新并遵照说明来更改集群配置。

如果您希望为正在运行的 Jitsi 实例提供更多 CPU/内存,您可能需要执行此操作。

删除/卸载

一旦您不需要这些功能,您应确保删除了 Amazon ECS 任务和集群。您可以使用 CloudFormation 脚本以通过 ecs-cli command-line 工具来实现此删除操作的自动化:

$ ecs-cli service down

高级安装

对于 Amazon EC2 实例,请参阅项目 GitHub 上的安装文档来获取在 NAT 实例背后配置 Jitsi 的更多相关详情。让其中一部分在 Amazon ECS 上运行可能会更加复杂,因此,通过下面的评论联系我们,告诉我们您的进展情况。

支持开源项目

感谢 MassimoJavierIan 为我提供入门指导。非常感谢 Michael Moussa,他帮我完成了 90% 的工作,还有 Brent Langston,他帮我进行了合理性检查,同时还非常感谢 8×8 的 Saul Corretge,他帮助我到达终点。最后,感谢 Jitsi 社区为这个项目投入如此多的技艺。它为我们带来了真正的合作体验。

请记住,只有在 Jitsi 开源项目中才能使它成为可能。如果您真的使用了它,请务必提供反馈、贡献或者项目可以用于帮助完成其使命的其他内容。

您还知道其他哪些可能帮助远程工作人员的开源项目呢?

若您知道其他可帮助远程工作人员更好地协同合作的其他开源项目,且您希望获取有关如何将它们与 AWS 解决方案结合使用的教程,请在评论区告诉我们。

精选图片来自 Pixabay