2011-04-05 105 views
8

我一直在阅读很多文章,讨论使用Git部署网站的更新后钩子,但是我不明白这是如何在EC2上完成的。Git将PHP应用程序部署到多个EC2节点

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

我怎样才能使它如此:在启动

  • 推送更新到所有节点

    1. 我的节点自动获取最新版本从仓库网站(触发更新立即如果可能的话) ,甚至是那些动态添加的(因此没有超出AMI已经包含的配置)。

  • +0

    http://www.puppetlabs.com/ – 2011-04-05 02:30:58

    回答

    6

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

    个人,我们使用scalarium来部署我们的服务器,并自动伸缩它们。

    如果这不是你想要的,你可以编写你自己的脚本供大厨在实例上部署。已经有一个deploy resource与git很好地工作。我可能会推荐厨师独奏,因为这不需要运行厨师服务器(还有很多依赖和需求管理)或类似littlechef,它允许您运行类似厨师服务器的设置,但没有运行厨师服务器的burdon。

    目的是为了设置一个亚马逊用于自动调整的私有AMI。

    这AMI会对你的服务(HTTP等),红宝石和厨师装(gem install chef)和其他任何你需要再依次运行脚本,以进一步建立您的实例并部署从GIT的代码。

    如果你走这条路,你当然可以根据AMI的要求设置许多服务,然后你只需要厨师来部署代码。

    下面是一个例子使用一个厨师的食谱从GIT检查代码:

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

    这从混帐检查你的分公司生产。

    由于默认情况下以超级用户身份运行,因此您应该在/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再次执行厨师独奏 - 例如,检查代码的新版本。 Capistrano会发送命令给实例(通过SSH),为此我可能会设置一个无密码帐户与SSH密钥等。

    让我知道如果你需要更多的指针!

    相关问题