我一直在开发基于云 (AWS EC2) 的 PHP Web 应用程序,当涉及到使用多个服务器(全部在 AWS 弹性负载均衡器下)时,我遇到了一个问题。在一台服务器上,当我上传最新文件时,它们会立即在整个应用程序中投入使用。但当使用多个服务器时,情况并非如此——每次提交更改时,您都必须将文件上传到每个服务器。如果您不经常更新任何内容,或者您只有一两台服务器,那么这可以正常工作。但是,如果您在一周内跨十台服务器多次更新系统怎么办?
我正在寻找一种从我们的开发或测试服务器“提交”更改并立即将其“推送”到我们所有生产服务器的方法。理想情况下,更新一次仅应用于一台服务器(即使每台服务器只需要一两秒),因此 ELB 在文件更改时不会向其发送流量,以免中断任何可能发生的生产流量。流向ELB。
这样做的最佳方法是什么?我的想法之一是在开发服务器上使用 SVN,但这并没有真正“推送”到服务器。我正在寻找一种只需几秒钟即可提交更新并随后开始将其应用到服务器的流程。另外,对于那些熟悉 AWS 的人来说,使用最新更新来更新 AMI 以便自动缩放程序始终使用最新版本的软件启动新实例的最佳方法是什么?
必须有好的方法来做到这一点……无法真正想象像 Facebook、Google、Apple、Amazon、Twitter 等网站在做出更改时手动逐一检查和更新数百或数千台服务器。
在此先感谢您的帮助。我希望我们能找到解决这个问题的办法……我和我的商业伙伴在最后一天至少进行了 100 次 Google 搜索,结果证明大部分都未能成功解决这个问题。
Alex
我们使用 scalr.net 来管理我们的 Web 服务器和负载均衡器实例。到目前为止效果都很好。我们为每个环境都有一个服务器场(2 个生产场、暂存场、沙箱)。我们为 Web 服务器预先配置了角色,因此在需要时打开新实例和扩展非常容易。 Web 服务器启动时从 github 提取代码。
我们还没有完成我们想要做的所有部署更改,但基本上以下是我们将新版本部署到生产环境中的方式:
- 我们使用 phing 来更新每个 Web 服务上的源代码和部署。我们创建了一个执行 git pull 并运行数据库更改的任务(dbdeploy phing 任务)。http://www.phing.info/trac/ http://www.phing.info/trac/
-
我们编写了一个执行 phing 的 shell 脚本,并将其作为脚本添加到 scalr 中。 Scalr 有一个很好的界面来管理脚本。
#!/bin/sh
cd /var/www
phing -f /var/www/build.xml -Denvironment=production deploy
scalr 可以选择在特定场中的所有实例上执行脚本,因此每个版本我们只需推送到 github 中的 master 分支并执行 scalr 脚本。
我们想要创建一个 github hook,当我们推送到 master 分支时它会自动部署。 Scalr 有可以执行脚本的 api,所以这是可能的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)