【问题标题】:Deploy Content to Multiple Servers (EC2)将内容部署到多个服务器 (EC2)
【发布时间】:2011-12-03 19:28:12
【问题描述】:

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

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

必须有很好的方法来做到这一点......。不能真正想象像 Facebook、谷歌、苹果、亚马逊、Twitter 等这样的网站在制作时手动和一个一个地更新成百上千台服务器改变。

提前感谢您的帮助。我希望我们能找到解决这个问题的办法……我和我的业务合作伙伴在过去一天至少进行了 100 次 Google 搜索,但大部分都没有成功解决这个问题。

亚历克斯

【问题讨论】:

标签: php deployment amazon-ec2


【解决方案1】:

我们使用 scalr.net 来管理我们的 Web 服务器和负载均衡器实例。直到现在它工作得很好。我们的每个环境都有一个服务器场(2 个生产场、登台、沙箱)。我们为 Web 服务器预先配置了角色,因此在需要时打开新实例和扩展非常容易。 Web 服务器在启动时从 github 拉取代码。

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

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

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

我们想创建一个 github 钩子,当我们推送到 master 分支时自动部署。 scalr有可以执行脚本的api,所以是可以的。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 2019-06-15
      • 2022-12-01
      • 1970-01-01
      • 2019-01-05
      相关资源
      最近更新 更多