将Node.js应用程序部署到包含静态资产的AWS弹性beanstalk

时间:2015-03-04 00:01:54

标签: node.js amazon-web-services amazon-s3 elastic-beanstalk

我在使用我的EB Node.js应用程序可视化我应该如何处理静态资产时遇到了一些麻烦。当你执行eb deploy时,它只会部署在git仓库中提交的内容(对吗?)但我不想提交所有静态文件。目前我们正在上传到S3并且应用程序引用了那些(the.s3.url.com/ourbucket/built.js),但是现在我们正在设置dev,staging和prod envs,我们可以引用built.js,因为最多可以有3个版本的它。

此外,还有上传文件和应用程序正在推出的时间跨度,静态资产不能在服务器上使用这两个版本(即built.js适用于应用版本0.0 .2但是服务器1部署为0.0.1,服务器2运行版本0.0.2)

如何跟踪这些不匹配情况,或者是否有办法直接将静态资产部署到EB实例。

1 个答案:

答案 0 :(得分:1)

我建议使用部署脚本将相关资产上传到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页面上引用该ID。因此,假设您使用时间戳,并部署在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" />

解决了部署期间的问题&#34;问题和缓存失效。