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

标签 php git deployment amazon-ec2

我已经阅读了很多文章,这些文章讨论了使用 Git 部署网站的更新后 Hook ,但是我不明白这是如何在 EC2 上完成的。

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

我怎样才能做到这一点:

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

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

最佳答案

就自动化工具而言,您可以使用 puppet 或 chef 来完成工作。这些背后的公司也提供托管服务:

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

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

例如,目标是设置一个私有(private) AMI,供 Amazon 用于自动缩放。

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

如果您沿着这条路走下去,您当然可以根据需要使用 AMI 设置尽可能多的服务,然后您只需要 chef 来部署代码。

这是一个使用厨师食谱从 GIT check out 代码的示例:

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。您可以在创建私有(private) AMI 之前执行此操作。您还可以在部署之前从安全位置获取 key :

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 key 等设置无密码帐户。

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

关于php - Git 将 PHP 应用程序部署到多个 EC2 节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5546540/

相关文章:

用于 Ruby on Rails 的 PHP BCrypt 设计密码

amazon-web-services - 如何在 aws-cli 中对 `list-tasks` 的结果进行排序?

powershell - Azure DevOps 托管代理管道 "Unable to locate executable file: ' Powershell'

git - 无法 Git 推送从共享 Windows 存储库(本地网络)挂载文件夹

ruby-on-rails-3 - sh : rake: not found on freshly installed server

php - Yii2:日期应用程序格式化程序

php - 如何访问Google Calendar Api返回的JSON对象

php - 使用 PHP 在 MYSQL UPDATE 查询中使用两个 where 子句

git - 执行部分 merge 后如何重新 merge 分支

git - git clone 是否复制所有源代码?