将 Node.js 应用程序部署到包含静态资产的 AWS elastic beanstalk
Deploy Node.js app to AWS elastic beanstalk that contains static assets
我在想象应该如何使用我的 EB Node.js 应用程序处理静态资产时遇到了一些问题。当您执行 eb deploy
时,它只会部署 git 存储库中提交的内容(正确?),但我不想提交我们所有的静态文件。目前我们正在上传到 S3 并且应用程序引用了那些 (the.s3.url.com/ourbucket/built.js
),但现在我们正在设置开发、暂存和生产环境,我们可以引用 built.js
,因为最多可以有 3 个版本它。
此外,文件上传和应用程序推出都有一个时间跨度,静态资产不适用于服务器上的两个版本(即 built.js 适用于应用程序版本 0.0. 2 但服务器一是部署 0.0.1,服务器二是 运行 版本 0.0.2)
如何跟踪这些不匹配的情况,或者有没有办法直接将静态资产部署到 EB 实例。
我推荐一个部署脚本,将相关资产上传到 S3,然后执行 Elasticbeanstalk 部署。在该脚本中,将 S3 资产上传到名为 env 的文件夹中,这样您将拥有
the.s3.url.com/ourbucket/production/
the.s3.url.com/ourbucket/staging/
the.s3.url.com/ourbucket/dev/
那么您在部署期间遇到了旧资产的问题——一般来说,您可能应该对这些资产进行 CDN(我推荐 CloudFront,因为一旦您已经在 AWS 上,它就很容易集成)并且您应该担心无论如何在部署期间缓存失效。处理该问题的一种策略是为每个部署分配一个 ID(git sha1 的前 7 个字母或时间戳)并将所有资产放入具有该名称的新文件夹中,然后在您的 HTML 页。因此,假设您使用时间戳,并在 20150204-042501 部署(即 2015 年 2 月 4 日 4:25 和 1 秒 UTC),因此您会将资产上传到 the.s3.url.com/ourbucket/production/20150204-042501/
。你的 HTML 会说
<script src="//the.s3.url.com/ourbucket/production/20150204-042501/built.js" />
这解决了 "during deploy" 问题和缓存失效问题。
我在想象应该如何使用我的 EB Node.js 应用程序处理静态资产时遇到了一些问题。当您执行 eb deploy
时,它只会部署 git 存储库中提交的内容(正确?),但我不想提交我们所有的静态文件。目前我们正在上传到 S3 并且应用程序引用了那些 (the.s3.url.com/ourbucket/built.js
),但现在我们正在设置开发、暂存和生产环境,我们可以引用 built.js
,因为最多可以有 3 个版本它。
此外,文件上传和应用程序推出都有一个时间跨度,静态资产不适用于服务器上的两个版本(即 built.js 适用于应用程序版本 0.0. 2 但服务器一是部署 0.0.1,服务器二是 运行 版本 0.0.2)
如何跟踪这些不匹配的情况,或者有没有办法直接将静态资产部署到 EB 实例。
我推荐一个部署脚本,将相关资产上传到 S3,然后执行 Elasticbeanstalk 部署。在该脚本中,将 S3 资产上传到名为 env 的文件夹中,这样您将拥有
the.s3.url.com/ourbucket/production/
the.s3.url.com/ourbucket/staging/
the.s3.url.com/ourbucket/dev/
那么您在部署期间遇到了旧资产的问题——一般来说,您可能应该对这些资产进行 CDN(我推荐 CloudFront,因为一旦您已经在 AWS 上,它就很容易集成)并且您应该担心无论如何在部署期间缓存失效。处理该问题的一种策略是为每个部署分配一个 ID(git sha1 的前 7 个字母或时间戳)并将所有资产放入具有该名称的新文件夹中,然后在您的 HTML 页。因此,假设您使用时间戳,并在 20150204-042501 部署(即 2015 年 2 月 4 日 4:25 和 1 秒 UTC),因此您会将资产上传到 the.s3.url.com/ourbucket/production/20150204-042501/
。你的 HTML 会说
<script src="//the.s3.url.com/ourbucket/production/20150204-042501/built.js" />
这解决了 "during deploy" 问题和缓存失效问题。