Развертывание веб-приложения PHP на нескольких экземплярах EC2 за Elastic Load Balancer - PullRequest
9 голосов
/ 15 февраля 2011

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

Дело:
Я запускаю веб-приложение, которое распространяется черезнесколько экземпляров AWS EC2 за AWS Elastic Load Balancer

Предполагаемые цели:
a) При развертывании нового кода приложения (php) он должен автоматически распространяться на все экземпляры EC2.
b) При новом EC2экземпляры добавлены, они должны автоматически «загрузиться» с последним кодом приложения

Мои мысли пока:
ad a)
phing (http://phing.info), вероятно, ответ на эту часть. Я бы, вероятно,добавьте несколько целей для каждого экземпляра EC2, и при запуске развертывания он будет развернут на всех машинах, возможно, к сожалению, не параллельно, но это может быть даже полезно при его сценарии таким образом, что экземпляр EC2 «приостанавливается» в балансировщике нагрузки,модернизированный, «без паузы» снова и к следующему экземпляру.

ad b)
не уверен, как бы я достигИве это.в обычной «аппаратной настройке» у меня, вероятно, был том «кода приложения» на сетевом устройстве хранения данных, и при добавлении нового сервера я просто подключал этот том.при развертывании нового кода приложения у меня была только одна операция развертывания на этом томе.поэтому мне нужно какое-то «центральное хранилище», откуда недавно загруженная машина / экземпляр загружает свой код приложения.я думал о git, но в конце концов git не является инструментом развертывания и, вероятно, его не следует использовать как один.

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

Спасибо,

Джошуа

Ответы [ 4 ]

3 голосов
/ 16 февраля 2011

Это можно сделать с помощью phing.Однако я не уверен, почему вы хотите, чтобы новые экземпляры автоматически получали код приложения?Вы получаете дополнительный экземпляр очень часто?А для того, чтобы a) мог развернуть код в нескольких экземплярах, ему все равно нужно их знать?

Для этой установки требуется главный сервер развертывания и используется стратегия push.Главный сервер нуждается в phing, любых необходимых пакетах phing и необязательно ssh-ключах для экземпляров EC2.

Предложение для a)

(Это всего лишьобщий план требуемых задач phing)

  • Получить список экземпляров (либо файл конфигурации, либо дополнительные параметры)
  • Экспорт кода приложения из хранилища на главный сервер (например, SubVersion)
  • Tar appcode
  • scp tarball для всех экземпляров EC2 (в папку развертывания)
  • С rsh распаковка tarball на экземплярах EC2
  • С rsh обновить символическую ссылку на экземплярах EC2, чтобы папка веб-сервера указывала на новую папку развертывания
  • Очистить все кеши на веб-сервере

Выше может быть вызвано после создания нового выпуска.

Предложение для б) Этого можно достичь, запуская скрипт phing каждые пару часов, позволяя ему войти в систему в экземпляры EC2 и проверить код приложения.Если он не найдет его, он развернет последний финальный выпуск.Это, конечно, требует, чтобы экземпляры EC2 были правильно настроены в отношении веб-серверов, файлов конфигурации и т. Д. (Однако это также может быть достигнуто удаленной оболочкой через phing).

Ранее я использовал подобные настройки, но не пробовал его с такими сервисами, как EC2.

0 голосов
/ 12 октября 2012

Phing - это отличный инструмент для управления задачами развертывания, который в значительной степени охватывает большую часть (a).

Мы используем OpsCode Chef для управления инфраструктурой.У него есть цель deploy_revision, которая поддерживает как репозитории SVN, так и Git для развертывания кода приложения, а нож (основной инструмент командной строки Chef) имеет плагин EC2, который позволяет с помощью одной команды раскрутить новый EC2экземпляр с теми ролями и средами, которые вы определили в Chef, и разверните код приложения.

Для управления этим с несколькими экземплярами EC2 за ELB мы использовали библиотеку Python boto для записиочень простые сценарии, которые подключаются к ELB, получают список всех экземпляров, прикрепленных к этому ELB, и по одному удаляют экземпляр из ELB, запускают обновление Chef для этого экземпляра (который развертывает новый код приложения и любую конфигурацию компьютера).изменения), повторно присоединяет экземпляр к ELB и переходит к следующему экземпляру.

0 голосов
/ 24 июня 2012

Я считаю, что phing - хороший инструмент для этого. Capistrano также может помочь.

Я развернул свое приложение в очень похожей среде. До сих пор я использовал простые сценарии bash, но, вероятно, я буду двигаться к решению на основе phing, в основном из-за трудностей, возникающих при разработке сценариев оболочки (вам нужно знать новый синтаксис, который не очень гибок упомянуть кроссплатформенность) и наличие параллельной обработки, которая присутствует в phing.

0 голосов
/ 15 февраля 2011

a) Взгляните на Capistrano и, поскольку вы не используете Ruby (и RoR), используйте плагин railsless-deploy . Capistrano может развертываться на нескольких серверах.

b) У меня не было никакого опыта с этим, но я не удивлюсь, если для Capistrano не будет плагина / драгоценного камня, который мог бы сделать это для вас.

...