Git Deploy PHP App для нескольких узлов EC2 - PullRequest
8 голосов
/ 05 апреля 2011

Я читал много статей, в которых говорится о хуках после обновления для развертывания веб-сайтов с использованием Git, однако я не понимаю, как это делается в EC2.

Я хочу использовать АвтоФункция масштабирования EC2 для автоматического добавления микро / малых узлов за моим балансировщиком нагрузки на основе AMI моего сервера.

Как я могу сделать это так:

  1. Мои узлыавтоматически загружать последнюю версию сайта из репозитория при запуске

  2. Загружать обновления на все узлы (немедленно запускать обновление, если это возможно), даже те, которые добавляются динамически (следовательно, нет конфигурации за пределамичто AMI уже содержал).

1 Ответ

6 голосов
/ 19 ноября 2011

Что касается средств автоматизации, вы можете использовать кукол или шеф-повара, чтобы выполнить работу.Компании, стоящие за этими, также предлагают хостинговые услуги:

Лично мы используем скалярий для развертывания наших серверов и их автоматического масштабирования.

Если это не то, что вы хотите, вы можете, например, написать свои собственные сценарии для развертывания chef в экземпляре.Уже есть ресурс развертывания , который очень хорошо работает с git.Вероятно, я бы порекомендовал chef-solo, так как для этого не потребуется запускать chef-сервер (он также имеет множество зависимостей и требует управления) или что-то вроде littlechef , что позволяет запускать chef-серверная установка, но без бремени запуска chef-сервера.

Задача будет, например, настроить частный AMI, который Amazon использует для автоматического масштабирования.

Этот AMI будет иметьваши службы (HTTP и т. д.), ruby ​​и chef установлены (gem install chef) и все остальное, что вам нужно, а затем по очереди запустите сценарии для дальнейшей настройки вашего экземпляра и разверните код из GIT.

Если выПройдя по этому пути, вы, конечно, можете установить столько служб, сколько требуется для AMI, и тогда вам понадобится только chef для развертывания кода.

Вот пример для извлечения кода из GIT с использованием рецепта chef:

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

Это позволит проверить вашу производственную ветку из git.

Поскольку по умолчанию он запускается от имени root, ваш ключ развертывания должен быть в /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 и т. Д.

Дайте мне знать, если вам нужно больше указателей!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...