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

Php 将内容部署到多个服务器(EC2),php,deployment,amazon-ec2,Php,Deployment,Amazon Ec2,我一直在开发一个基于云的(AWS EC2)PHP Web应用程序,当涉及到多个服务器(都在AWS弹性负载平衡器下)时,我遇到了一个问题。在一台服务器上,当我上传最新的文件时,整个应用程序中的文件立即投入生产。但在使用多个服务器时,情况并非如此——每次提交更改时,都必须将文件上载到每个服务器。如果你不经常更新任何东西,或者你只有一两台服务器,这可以正常工作。但是,如果您在一周内跨十台服务器多次更新系统会怎么样 我正在寻找的是一种从我们的开发或测试服务器“提交”更改的方法,并将其立即“推送”到我们所

我一直在开发一个基于云的(AWS EC2)PHP Web应用程序,当涉及到多个服务器(都在AWS弹性负载平衡器下)时,我遇到了一个问题。在一台服务器上,当我上传最新的文件时,整个应用程序中的文件立即投入生产。但在使用多个服务器时,情况并非如此——每次提交更改时,都必须将文件上载到每个服务器。如果你不经常更新任何东西,或者你只有一两台服务器,这可以正常工作。但是,如果您在一周内跨十台服务器多次更新系统会怎么样

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

要做到这一点,必须有好的方法……不能想象像Facebook、谷歌、苹果、亚马逊、Twitter等网站在手动和一个接一个地更新成百上千的服务器

提前感谢你的帮助。我希望我们能找到一些解决这个问题的方法……我和我的商业伙伴在过去一天里至少进行了100次谷歌搜索,结果证明在解决这个问题的过程中,大部分都是不成功的


亚历克斯

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

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

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

  • 我们使用phing更新每个web服务上的源代码和部署。我们创建了一个任务,该任务执行git拉取并运行数据库更改(dbdeploy-phing任务)
  • 我们编写了一个执行phing的shell脚本,并将其作为脚本添加到scalr中。Scalr有一个很好的界面来管理脚本

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


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

    这与这里的问题相同: