Повара развертывания?

Я заинтересован переключиться с Капистрано на шеф-повара, но у меня есть несколько вопросов, связанных со всеми частями.

Я следил за http://wiki.opscode.com/display/chef/Quick+Start и могу запустить экземпляры EC2 с knife. Что касается развертывания кода, похоже, что я хочу делать то, что в http://wiki.opscode.com/display/chef/Deploy+Resource, единственная проблема в том, что нигде на этой странице нет он упоминает, в каком каталоге/файле должен быть размещен блок развертывания /to/path.

Другая проблема, с которой я столкнулась, - это понять, как развернуть изменения кода после того, как сервер настроен. Возможно, я просто привык к моему текущему рабочему процессу (git push && cap deploy), но самое лучшее, что я могу сказать, это то, что после того, как я совершу свои изменения, я должен ssh на сервер и запустить sudo chef-client? что-то об этом не так. Нет ли кепкового эквивалента, т.е. chef deploy?

Наконец (и, возможно, это немного сложнее), я ищу для развертывания нескольких приложений rails на одном сервере. Кажется разумным сохранить какой-то файл конфигурации шеф-повара в репо каждого приложения, описывающего особенности его развертывания, но я не уверен, как это будет взаимодействовать с сервером chef-repo/host. Будет ли каждое приложение играть роль? И из моего понимания того, как все работает, мне также немного неловко с мыслью, что "chef-client" будет пытаться развернуть все приложения при запуске. С git push && cap deploy я уверен, что я развертываю. В то время как некоторые другие репозитории приложений могут не находиться в состоянии развертывания. Будет ли способ развертывать только одно приложение в этой настройке?

Ответ 1

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

Чтобы развернуть приложение на всех серверах приложений, предположив, что вы следовали пути поваренной книги для приложений в режиме opscode rails, вы можете просто сделать следующее:

knife ssh role:t<appserver-role> chef-client -xroot -P<pass>

Это запустит chef-client как root на всех ваших серверах приложений. Он использует API поиска шеф-повара, чтобы найти все узлы с этой ролью и запустить их на них.

Это довольно мощный.

Ответ 2

Я написал следующую статью, в которой описывается, как развернуть Ruby on Rails с помощью шеф-повара.

http://tech.hulu.com/blog/2012/07/06/automating-system-provisioning-and-application-deployment-with-chef/

Ну... в этой статье речь идет не только о Rails, но и львиная доля в этом примере - о развертывании Rails.

Существует также кулинарная книга сообщества, которая называется "прикладной" кулинарной книгой, которая может использоваться для развертывания Ruby on Rails. По сравнению с этой кулинарной книгой, пример в этой статье должен быть немного легче понять для новых людей. Однако, как только вы привыкнете к этому, используя пример в статье, вам обязательно нужно посмотреть кулинарную книгу приложения, чтобы узнать, имеет ли это смысл для вас.

Ответ 3

Предложение об использовании ножа ssh для развертывания по требованию абсолютно правильно. Если бы я мог подробнее разобраться с использованием Chef в качестве решения для развертывания (особенно по сравнению с такими инструментами, как Capistrano). Шеф-повар разработан как инструмент для управления конфигурацией и системной интеграции, частью чего является то, что все, что работает в системе, должно быть идемпотентным.

Иногда возникают проблемы при использовании развертывания шеф-повара для повторного запуска всего, когда происходит работа шеф-повара. Имейте в виду, что Capistrano работает, сообщая системе "сделайте это", шеф-повар работает, сообщая системе "быть этим", поэтому какая версия приложения и какая схема базы данных должна использоваться, как правило, определяются в атрибутах и ​​пакетах данных. Когда Chef запускается, если приложение уже развернуто, а база данных уже имеет правильную схему, ничего не должно происходить, действия должны выполняться только в том случае, если система еще не находится в нужном состоянии. Вот почему даже при повторном запуске нескольких приложений все не должно быть проблемой.

Ответ 4

По моему опыту, лучше сохранить capistrano, поскольку у него есть некоторые функции RoR, которые вам придется реплицировать с шеф-поваром. Шеф-повар - очень гибкий инструмент, и вы можете много сделать с ним, чтобы он мог заменить многие другие инструменты. Я лично считаю целевые инструменты более полезными.

Capistrano addons для Unicorn, Asset Syncs с S3 и другими (например, https://github.com/bokmann/dunce-cap) всегда очень полезны.

Как более простой способ развертывания и управления приложениями Ruby on Rails, я также могу предложить http://www.cloud66.com

Отказ от ответственности: я работаю для Cloud 66.