在负载均衡器上推送多个EC2实例

Jon*_*Coe 12 php git load-balancing nginx amazon-ec2

我试图想出一个很好的方法来推出一个新的提交到ELB(负载均衡器)后面的一组EC2服务器实例.每个实例都运行Nginx和PHP-FPM

我想执行以下工作流程,但我不确定将新版本推送到负载均衡器后面的所有实例的好方法.

  • 开发是在本地机器上完成的
  • 一旦更改准备就绪,我执行"git push origin master"将更改推送到BitBucket(我托管我所有的git repos)
  • 在被推到bitbucket之后,我想将新版本同时推送到所有EC2实例.
  • 我想这样做,而不必SSH到每个实例(显然).

有没有办法配置远程服务器接受远程推送?有一个更好的方法吗?

jam*_*ieb 10

是的,我一直这样做(实际上使用相同的应用程序堆栈).

  1. 使用来自可信来源的基本AMI,例如默认的"Amazon Linux",或者自己动手.

  2. 作为启动配置的一部分,使用"用户数据"字段在引导时引导配置过程.这可以像一个shell脚本一样简单,它运行yum install nginx php-fpm -y并从S3存储桶中复制文件或从您的存储库中提取.如果您需要更多的灵活性,亚马逊创作的AMI还包括对cloud-init脚本的支持.如果您需要更强大的功能,可以使用变更管理和编排工具,如Puppet,ChefSalt(我个人最喜欢的).

  3. 至于更新现有实例的代码:有两种思想流派:

    • 充分利用云,然后启动一个全新的实例队列,在启动时获取新代码.然后你翻转负载平衡器指向新的车队.它是即时的,如果出现问题,它可以让你快速恢复旧机队.几小时(或几天)之后,您可以关闭旧实例.
    • 您可以使用FabricCapistrano等工具同时对所有实例进行并行"推送"部署.这通常只是重新执行服务器在引导时运行的相同脚本.Salt和Puppet的MCollective还提供类似的功能,与其基本的"拉"配置相结合.

  • 你能详细说明舰队部分吗?我是新手.这是否意味着子网?或者您的意思是,保留新服务器的记录,注销旧实例并注册新实例? (2认同)

E_p*_*E_p 2

选项一

  1. 将其推到一台机器上。
  2. 在其上创建一个 git hook http://git-scm.com/book/en/Customizing-Git-Git-Hooks
  3. 使钩子在其他机器上运行拉动。

唯一的问题是,您必须维护要运行更新的计算机列表。

另外一个选择

有 cron 作业从您的 bitbucket 帐户中提取。定期进行。