就自动化工具而言,您可以使用 puppet 或 chef 来完成工作。这些背后的公司也提供托管服务:
我们个人使用scalarium 来部署我们的服务器并自动扩展它们。
如果这不是您想要的,例如,您可以编写自己的脚本供 chef 部署到实例上。已经有一个deploy resource 可以很好地与 git 配合使用。我可能会推荐 chef-solo,因为这不需要运行 chef-server(有很多依赖项和需要管理)或类似 littlechef 的东西,它允许你运行 chef-server-like 设置但没有运行 chef-server 的负担。
例如,目标是设置一个私有 AMI,Amazon 使用它来自动扩展。
此 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 身份运行,因此您的 deploykey 应该位于 /root/.ssh/id_rsa。您可以在创建私有 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 主机上做了非常相似的事情。)
如果你不运行 chef-server 或 little-chef,我会使用 capistrano 再次执行 chef-solo - 例如检查代码的新版本。 Capistrano 会向实例发送命令(通过 ssh),我可能会为此设置一个使用 ssh 密钥等的无密码帐户。
如果您需要更多指点,请告诉我!