我试图找出一个很好的方法来推出一个新的提交到ELB(负载平衡器)后面的一组EC2服务器实例.每个实例都在运行Nginx和PHP-FPM
我想执行以下工作流程,但我不确定是否推出新版本到负载平衡器后面的所有实例的好方法.
> Dev在本地机器上完成
>一旦更改准备就绪,我就执行“git push origin master”来推送
BitBucket的更改(我托管所有我的git repos)
>被推到bitbucket后,我想拥有新版本
同时推送到所有EC2实例.
>我想这样做,而不必SSH到每个实例
(明显).
有没有办法配置远程服务器接受远程推送?有没有更好的方法来做到这一点?
>使用可靠来源的基本AMI,例如默认的“Amazon Linux”,或自行滚动.
>作为启动配置的一部分,使用“用户数据”字段在启动时引导配置过程.这可以像运行yum安装Nginx PHP-fpm -y的shell脚本一样简单,并将文件从S3存储区复制下来,或者从您的repo中拉一下.如果您需要更多的灵活性,亚马逊撰写的AMI还将支持cloud-init脚本.如果您需要更大的电力,您可以使用Puppet,Chef或Salt(我个人最喜欢的)的变更管理和编排工具.
>就现有实例更新代码而言:有两种思路:
>充分利用云端,只需启动一个全新的实例队伍,在启动时抓住新的代码.然后你翻转负载平衡器来指向新的舰队.这是瞬间的,如果出现问题,给你一个真正快速的方法来恢复旧舰队.几小时(或几天)之后,你再转一下旧实例.
>您可以使用像Fabric或Capistrano这样的工具一次对所有实例进行并行“推送”部署.这通常只是重新执行服务器在启动时运行的相同脚本. Salt和Puppet的MCollective也提供了类似的功能,与其基本的“拉”配置相结合.