php - 将 PHP webapp 部署到 Elastic Load Balancer 后面的多个 EC2 实例

标签 php deployment amazon-ec2 load-balancing phing

我的问题基本上是两个问题,但由于它们密切相关,我认为有必要全盘提问。

案例:
我正在运行一个网络应用程序,它分布在 AWS 弹性负载均衡器后面的多个 AWS EC2 实例上

预期目标:
a) 当部署新的应用程序代码 (php) 时,它应该自动分发到所有 EC2 实例。
b) 添加新的 EC2 实例时,它们应该使用最新的应用程序代码自动“引导”

到目前为止我的想法:
广告一)
phing (http://phing.info) 可能是这部分的答案。我可能会为每个 EC2 实例添加多个目标,并且在运行部署时它会部署到所有机器。不幸的是,可能不是并行的。但是当以 EC2 实例在负载均衡器中“暂停”、升级、再次“取消暂停”并继续到下一个实例的方式编写脚本时,这甚至可能是有益的。

广告b)
不确定我将如何实现这一目标。在传统的“基于硬件的设置”中,我可能在网络存储设备上有一个“应用程序代码”卷,当添加新服务器时,我只需附加该卷。在部署新的应用程序代码时,我只对该卷进行了一次部署操作。所以我需要一些“中央存储”,新引导的机器/实例从那里下载它的应用程序代码。我想到了 git,但毕竟 git 不是一个部署工具,可能不应该被强制用作一个工具。

我很乐意看到您对此类任务的设置,并听到您对此类情况的提示和想法。

谢谢,

约书亚

最佳答案

这可以使用 phing 来完成。但是,我不确定您为什么希望新实例自动检索应用程序代码?你经常得到额外的实例吗?为了让 a) 将代码部署到多个实例,它仍然需要知道它们吗?

此设置需要主部署服务器并使用推送策略。主服务器需要 phing、任何必需的 phing 包,以及可选的 EC2 实例的 ssh key 。

a) 的建议

(这只是所需 phing 任务的大纲)

  • 检索实例列表(配置文件或提供的参数)
  • 将应用程序代码从存储库导出到主服务器(例如 SubVersion)
  • 压缩应用程序代码
  • scp tarball 到所有 EC2 实例(到部署文件夹)
  • 使用 rsh 在 EC2 实例上解压 tarball
  • 使用 rsh 更新 EC2 实例上的符号链接(symbolic link),使网络服务器文件夹指向新的部署文件夹
  • 清除网络服务器上的所有缓存

可以在发布新版本后调用上面的方法。

b) 的建议 这可以通过每隔几个小时运行一次 phing 脚本来实现,让它登录到 EC2 实例并检查应用程序代码。如果找不到,它将部署最新的最终版本。 当然,这需要在网络服务器、配置文件等方面正确设置 EC2 实例(但是,这也可以通过 phing 通过远程 shell 实现)。

我以前使用过类似的设置,但没有尝试过使用 EC2 等服务。

关于php - 将 PHP webapp 部署到 Elastic Load Balancer 后面的多个 EC2 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5003564/

相关文章:

php - 以 laravel 形式更新按钮点击的数据库

powershell - 'AdditionalDeploymentContributors' 不是 'Publish' 操作的有效参数

deployment - 在 AWS 上部署简单应用程序/博客的 "right way"是什么?

node.js - 如何从 Jenkins 将 Node 应用程序部署到远程主机?

php - mysql查询更新将条目增加到条目+ x

php - symfony2 项目上的 Swiftmailer 附件错误(无法打开文件进行阅读)

amazon-ec2 - 在 AWS 微实例上运行 Chrome

amazon-web-services - Amazon VPC n^2 -4 IP 地址? CIDR block

linux - 更改 JENKINS_HOME 时出现 "Unable to create home directory"错误

php - 在 python 中反序列化 PHP 数据