将内容部署到多个服务器(EC2)

时间:2011-10-09 03:07:45

标签: php deployment amazon-ec2

我一直致力于基于云的(AWS EC2)PHP Web应用程序,在使用多个服务器(所有这些都在AWS Elastic Load Balancer下)时,我正在努力解决一个问题。在一台服务器上,当我上传最新文件时,它们会立即在整个应用程序中生成。但是,当使用多个服务器时,情况并非如此 - 每次提交更改时,都必须将文件上传到每个服务器。如果您不经常更新任何内容,或者您​​只有一台或两台服务器,这可能会正常工作。但是,如果您在一周内跨十个服务器多次更新系统会怎么样?

我正在寻找的是一种从我们的开发或测试服务器“提交”更改并立即将其“推送”到我们所有生产服务器的方法。理想情况下,更新一次只应用于一个服务器(即使每个服务器只需要一两秒),因此ELB不会在文件更改时向其发送流量,以免中断任何可能的生产流量流向ELB。 这样做的最佳方式是什么?我的一个想法是在开发服务器上使用SVN,但这并没有真正“推送”到服务器上。我正在寻找一个只需几秒钟的时间来提交更新并随后开始将其应用于服务器的流程。此外,对于熟悉AWS的人来说,使用最新更新更新AMI的最佳方法是什么,以便自动缩放器始终使用最新版本的软件启动新实例?

必须有很好的方法来实现这一目标...。无法真正想象Facebook,谷歌,苹果,亚马逊,Twitter等网站经过手工更新数百或数千台服务器,并在制作时逐一更新改变。

提前感谢您的帮助。我希望我们能找到解决这个问题的方法......在最后一天,我自己和我的商业伙伴至少要进行100次Google搜索才能证明在解决这个问题方面没有成功。

亚历

2 个答案:

答案 0 :(得分:1)

我们使用scalr.net来管理我们的Web服务器和负载均衡器实例。到目前为止,它运作良好。我们为每个环境都有一个服务器场(2个生产场,登台,沙箱)。我们为Web服务器配置了预先配置的角色,因此可以非常轻松地打开新实例并在需要时进行扩展。 Web服务器在启动时从github中提取代码。

我们还没有完成我们想要做的所有部署更改,但基本上就是我们如何将新版本部署到我们的生产环境中:

  1. 我们使用phing更新每个Web服务上的源代码和部署。我们创建了一个执行git pull并运行数据库更改的任务(dbdeploy phing任务)。 http://www.phing.info/trac/
  2. 我们编写了一个执行phing的shell脚本,我们将它作为脚本添加到scalr中。 Scalr有一个很好的界面来管理脚本。

    #!/bin/sh
    
    cd /var/www
    phing -f /var/www/build.xml -Denvironment=production deploy
    
  3. scalr可以选择在特定服务器场中的所有实例上执行脚本,因此我们只需将每个版本推送到github中的master分支并执行scalr脚本。

  4. 我们想要创建一个github钩子,当我们推送到主分支时它会自动部署。 Scalr有api可以执行脚本,所以它是可能的。

答案 1 :(得分:0)

好好看看KwateeSDCM。它使您可以在任意数量的服务器上部署文件和软件,并在需要时自定义服务器特定的参数。在多个tomcat实例上有一篇关于deploying a web application的帖子,但它与语言无关,只要你在AWS服务器上启用了ssh,它就可以用于PHP。