AWS 中的 Joomla 部署,尤其是管理多个可用性区域中 Web 服务器(实例)运行 之间的公共 files/folders

Joomla Deployment in AWS, Especially managing common files/folders between web servers (instances) running in multiple availability zones

当我们在 AWS VPC-EC2 实例上部署应用程序时,configuration.php 中的 Joomla 配置日志和 Tmp 路径是什么。我的 VPC 是自动扩展的,因此我假设日志应该如何位于任何共享位置?或者应该在 EC2 实例本地位置? 另外,我们将在我们的 configuration.php of joomla.

中提到的路径是什么?
public $log_path = '/home/public_html/logs'; 
public $tmp_path = '/home/public_html/temp'; 

在 VPC 中,当我们有多个可用性区域时,我们的 Web 服务器位于 运行,我们会遇到共享媒体内容的常见问题。例如,在一种特定情况下 logtemp 路径,以及 imagesfiles 可以由 user/admin 上传或由应用程序生成的情况.

当负载均衡器将网站流量定向到随机服务器(运行 在不同的可用性区域)时,这成为一个需要解决的大问题。

在这种情况下,我们必须有一个共享的公共位置来保存这些媒体文件(由用户上传或由应用程序生成)。否则,每个服务器(在可用区中)将单独保存文件,如果用户上次上传的照片偶然在可用区-A 服务器中,则下一次如果用户定向到(通过负载均衡器)可用区-B 服务器文件不会在那里。这是一个非常糟糕的案例。

解决方案:

  1. 最好建议用户使用 AWS 设计的 AWS EFS 服务来满足这一特定需求。这创建了一个通用位置来保存 shared/common 文件,可以更像本地文件系统文件夹一样访问它。就像NFS挂载文件夹一样。

  2. 您可以使用 S3 存储,这在某些情况下也被推荐,但是您需要修改或设置您的代码以使其能够处理 S3 存储文件系统。 此外,您还可以使用第三方 S3FS 将 S3 存储挂载到您的 Web 服务器(EC2 实例)。但 AWS 确实推荐到 50% 的推荐。由于 AWS 可能无法做一些监控工作来帮助客户监控流量和其他东西。

  3. 您还可以创建一个独立的 EC2 实例,其主要工作将仅用于保存这些常用媒体文件。这可以在 Public 或私有子网中的任何位置创建,只要它与其他子网在同一路由 Table 中就可以工作。我们可以通过在此实例中创建所需数量的目录并将它们导出到特定的 Web 服务器(位于我们不同的可用性区域)来将此实例用作 NFS,或者也可以 export 到 IP 范围(如果我们设置了 Auto Scalable在 AWS 中分组)。然后每个客户端(网络服务器)需要 mount 导出目录到我们的应用程序期望这些目录的位置。这些目录将像普通的本地目录一样运行,但在不同可用性区域的所有 运行 Web 服务器中都是通用的。

  4. 如果我们有一个NAT EC2 Instance运行,我们也可以用它来充当NFS服务器,并在上面创建目录并将它们导出到网络服务器。

结论: spacebudget cost 是两个重要因素。在上面提到的所有情况下,性能更像是相似的。当我们的媒体文件小于 10GB 时,我们应该为 NFS 使用正确的 EC2 实例。但是如果我们设置单独的 EC2 实例,选项#3 将来可能花费 read/writes,在这种情况下选项#4 将更合适。 S3 也是正确的选项,但是当我们可以选择相应地更改代码时。 S3 也是大文件的正确选择。