将 css、js、图像等资产自动存储到 s3

将 css、js、图像等资产自动存储到 s3

我有一个电子商务网络应用程序,它会不断更新修改后的 css、js 和新图像,这些图像是横幅图像、图标、促销图像等视觉效果的一部分。目前,所有这些资产都是部署在服务器上的构建的一部分。

由于不断添加这些资产,现在我的构建已经达到约 200 MB 的大小,其中约 150 MB 被这些资产占用。我正在寻找一种方法,让这些资产驻留在 S3 上而不是项目中。但手动上传每个资产是一项难以管理的任务,而且当您进行开发并且不确定该资产是否是生产版本的一部分时也是如此。

我正在寻找一些建议或指点来帮助我解决这个问题。

答案1

你好@Abhi,如今开发机器上的 200 MB 并不算多,因此决定只在外部托管文件(例如在 S3 上)。特别是如果您需要在开发机器上定期使用这些资产测试您的应用程序。

因此,如果可以的话,我建议您将文件存储在项目和 Amazon S3 存储桶中。此外,存储在项目中的文件应该进行版本控制(例如使用 GIT)。

您可以通过从中移除资产来更新构建以更改应用程序包。然后更改应用程序中的 URL 生成,使 URL 指向 S3 上的文件。

如果您的大多数文件都没有被修改,而您只是定期添加/删除/更新几个文件,那么您可以通过构建只上传差异文件。(即不要重新上传所有内容,不要重新上传没有变化的文件)。

如果考虑使用 3 种不同的工具和解决方案来做到这一点。

第一个解决方案,使用 AWS CLI

S3 syncCLI 命令。使用此命令,您可以根据需要选择一些有趣的选项。

  • --size-only选项将强制仅当文件大小发生变化时才考虑更新文件(即,将忽略文件的最后修改日期);
  • --delete选项对于清理 S3 上已删除的文件很有用。

警告:在某些情况下,文件大小相同但内容不同。例如,如果您的文件包含AAAA,然后更改为BBBB。在这种情况下,S3sync命令不会将您的文件视为已更新。

第二种解决方案,使用 s3cmd

如果由于前面提到的警告,第一个解决方案不适用于您的用例,您可以使用基于文件哈希同步的工具,我建议s3-cmd-同步为了这。

第三种解决方案,使用支架

您还可以使用s3fs-fuse,我个人不喜欢这个解决方案,因为。

  • 您必须要求所有开发人员正确配置支架;
  • 如果你使用的是 Windows,则必须使用其他工具,例如特恩特驱动
  • 亚马逊 S3不是文件系统但更像是“NoSQL 键值数据库”。

最后说明

  • 作为@蒂姆建议最好从 CI 服务器触发构建和同步。如果您的项目和资产存储在 GIT 存储库中,则应在 CI 构建中以主分支为基础进行同步。
  • 使用 Amazon S3 是性能、耐用性和成本方面的好主意。通过在 Amazon S3 存储桶前面配置 CloudFront 分发,您可以进一步改善您的设置。访问文件的速度会更快,而且您可以节省更多钱。

相关内容