我正在将我的网站迁移到Amazon AWS,这就提出了一个关于部署的基本问题。
我正在运行S3和EC2实例。S3实例提供所有静态内容,如图像、JavaScript和CSS。然而,在EC2实例上,我已经在/var/www/中启动了一个Git存储库,以便当我想要更新代码库时,我可以执行"Git pull"。
我似乎找不到一个解决方案,我如何确保我上传的静态内容和代码在同一时间,使它将是完全无缝的。假设我想更新徽标和首页的布局。当我将logo.png上传到S3时,EC2上的当前代码库将自动指向新徽标,即使新布局尚未部署。
我是否应该在S3上以新名称(例如logo-2.png)上传logo.png,将HTML中对logo.png的所有引用更新为logo-2.png,然后部署它?
我希望你能理解——谢谢!
使用第三步来进行部署,如Jenkins或Springloops或rake。
这样,两个构建步骤可以在一次提交时同时触发。
是的,你一定要以某种方式命名你的S3文件,例如我的文件中有当前git提交哈希:minified. css。无论您使用什么工具进行构建,都应该先执行S3步骤,然后再执行应用程序代码。
这一点尤其重要,因为人们会在浏览器缓存中缓存旧文件,他们会得到旧版本。
我不把所有的文件命名为logo.gif。这个文件永远不会改变,如果它改变了,我会手动添加logo.gif?v = 1
为了完成上面的工作,我只设置了一个使用Rsync和Knox的简单节点脚本。 如果你感兴趣的话,我在这里开源了我的开发工具。这是非常特定于我的用例,但你可以把它分开。我还建议使用cloudfront从您的S3中提取。Cloudfront非常快,只需要15分钟就可以设置好。最后,不要忘记对这些资源进行gzip并使用Expired头文件。