Git将PHP应用程序部署到多个EC2节点

时间:2011-04-05 02:29:29

标签: php git deployment amazon-ec2

我一直在阅读很多关于使用Git部署网站的更新后挂钩的文章,但是我不明白这是如何在EC2上完成的。

我想使用EC2的Auto Scaling功能根据我服务器的AMI在我的负载均衡器后面自动添加微/小节点。

我怎样才能这样做:

  1. 我的节点在启动时自动从存储库中获取最新版本的网站

  2. 将更新推送到所有节点(如果可能,立即触发更新),甚至是动态添加的更新(因此没有超出AMI已包含的配置)。

1 个答案:

答案 0 :(得分:6)

就自动化工具而言,您可以使用木偶或厨师来完成工作。这些公司也提供托管服务:

我们个人使用scalarium部署我们的服务器并自动调整它们。

如果那不是您想要的,您可以编写自己的脚本供Chef在实例上进行部署。已经有deploy resource与git配合得很好。我可能会推荐chef-solo,因为这不需要运行chef-server(还有很多依赖项和需求管理)或类似littlechef的东西,它允许你运行 chef-server-喜欢设置,但没有运行chef-server的负担。

目标是例如设置亚马逊用于自动缩放的私有AMI。

此AMI将安装您的服务(HTTP等),ruby和Chef(gem install chef)以及您需要的任何其他内容,然后依次运行脚本以进一步设置您的实例并从GIT部署代码

如果您沿着这条路走下去,您当然可以根据需要设置AMI所需的服务,然后您只需要厨师来部署代码。

以下是使用大厨食谱检查GIT代码的示例:

git "/var/www/example.org" do
  repository "git://github.com/yourname/example.git"
  revision "production"
  action :sync
end

这将从git中检查你的生产分支。

由于默认情况下以root身份运行,因此您应该在/root/.ssh/id_rsa中使用deploykey。您可以在创建私有AMI之前执行此操作。您还可以在部署之前从安全位置获取密钥:

directory "/root/.ssh/" do
  action :create
end

execute "download my deploy key" do
  command "wget https://secure.location/id_rsa -O /root/.ssh/id_rsa"
  not_if do File.exists?("/root/.ssh/id_rsa") end
end

(我只是输入了这个,我没有运行它 - 但我几乎可以肯定它应该可以工作,因为我们在非EC2主机上做了类似的事情。)

如果您没有运行厨师服务员或小厨师,我会使用capistrano再次执行chef-solo - 例如检查代码的新修订版。 Capistrano会向实例发送命令(通过ssh),为此我可能会设置一个带密码的密码等帐户。

如果您需要更多指示,请告诉我们!