2008-10-13 2 views
17

У меня есть несколько пакетных процессов, которые запускаются за кулисами для сайта Linux/PHP. Они начинают расти по количеству и сложности, поэтому я хочу приложить к ним небольшой процесс.Рекомендации по развертыванию инструментов и сценариев для производства?

В моем исходном дереве есть куча файлов cpp и скриптов, организованных с разработкой, но не с развертыванием. После компиляции всех исполняемых файлов мне нужно поместить различные скрипты и двоичные файлы на кластер машин. Различные машины нуждаются в разных исполняемых файлах, сценариях и конфигурационных файлах для их пакетных процессов. У меня также есть несколько инструментов, которые я написал, которые принадлежат каждой машине. На данный момент этот процесс развертывания является ручным и подвержен ошибкам.

Я предполагаю, что я просто закончу сценарий, который работает в корне дерева источников и строит меньшее дерево всего, что необходимо для любой из машин. Затем я просто перейду к соответствующим машинам. Но мне любопытно, как другие люди управляют этим типом проблемы. Есть идеи?

+0

Wow 7 лет спустя ... В настоящее время существует множество инструментов, специально предназначенных для автоматизации приложений. Вот отличный стартовый ресурс, чтобы узнать больше: https://en.wikipedia.org/wiki/Application_release_automation – 2016-06-27 20:51:57

ответ

2

Создайте свои собственные пакеты в том формате, в котором используется ваш дистрибутив, например. Пакеты Debian (.deb). Они могут быть скопированы на каждый компьютер и установлены вручную, или вы можете настроить свой собственный репозиторий и добавить его в список источников.

Ваши пакеты должны быть настроены таким образом, чтобы содержащиеся в них сценарии касались конфигурационного файла, который отличается от каждого хоста, в зависимости от того, какие сценарии необходимо запускать на каждом из них.

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

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

1

Я должен часто развертывать PHP-скрипты и конфигурации Apache для нескольких клиентов. Поскольку все они запускают Debian Linux, я настроил репозиторий пакетов Debian на моем сервере, и все, что нужно сделать клиенту, это тип apt-get upgrade, и они получают последнюю версию.

3

Взгляните на cfengine tutorial, чтобы узнать, подходит ли cfengine как правильный инструмент для вашей ситуации. Это может быть слишком сложно для небольшого веб-сайта, но если в будущем вам понадобится больше компьютеров и больше настроек, в какой-то момент вы в конечном итоге будете использовать cfengine или что-то в этом роде.

0

Первое, что нужно сделать, это собрать все эти сценарии в репозиторий управления версиями (svn или git хороши), чтобы вы могли отслеживать изменения этих сценариев с течением времени.

Если вас интересует рубин, ознакомьтесь с Capistrano, он хорошо подходит для развертывания вещей на нескольких машинах в кластере и довольно прост в настройке. Он может читать файлы непосредственно из вашей системы контроля версий.

1

Puppet - еще один инструмент, который можно использовать в этой ситуации. Он похож на cfengine - вы создаете модель желаемого развертывания и кукольные фигуры, как получить среду в этом состоянии.

19

Здесь есть несколько категорий инструментов. Некоторые люди используют комбинацию инструментов из этих категорий. Иногда я использую, например, и Кукольный и Капистрано. См. Puppet or Capistrano - Use the Right Tool for the Job для обсуждения.

сценариев Средства, направленные на Развертывание приложения:

Общая картина с инструментами в этой категории является то, что вы создаете сценарий и/или конфигурационный файл, часто с наборами команд, похожих на Makefile, и инструмент передаст ssh в вашу производственную коробку, выполнит проверку вашего источника и выполнит любые другие действия.

Инструменты в этой области обычно имеют возможности для отката к предыдущей версии. Таким образом, они проведут проверку источника на каталог release /, и создадут символическую ссылку от «current» до «release /», если все будет хорошо. Если есть проблема, вы можете вернуться к предыдущей версии, выполнив команду, которая удалит «текущий» и свяжет ее с предыдущими версиями/каталогами.

  • Capistrano происходит из сообщества Rails, но является универсальным. Пользователи Capistrano могут быть заинтересованы в deprec, наборе рецептов развертывания для Capistrano.
  • Vlad the Deployer является альтернативой Capistrano, снова из сообщества Rails.
  • Напишите свой собственный сценарий оболочки или Makefile.

Варианты для получения файлов в окне производства:

  • Прямая выписка из источника. Не всегда возможно, если в ваших производственных коробках отсутствуют средства разработки, в частности инструменты для управления исходным кодом.
  • Проверьте источник локально, затем введите tar/zip. Используйте scp или rsync для копирования tarball. Это иногда предпочтительнее, например, для развертывания Amazon EC2, где сжатый tarball может сэкономить время/пропускную способность.
  • Проверьте источник на месте, затем перепрограммируйте его в коробку.

Упаковка Инструменты

Используйте систему упаковки вашей операционной системы, чтобы генерировать пакеты, содержащие файлы для вашего приложения. Создайте главный пакет, который имеет в качестве зависимостей другие необходимые вам пакеты. Примером этого является система RubyWorks, используемая для развертывания стека Rails и примерного приложения. Затем нужно использовать apt, yum/rpm, Windows msi или что-то другое для развертывания данной версии. Откат включает удаление и переустановку старой версии.

Общие инструменты, направленные на установке приложений/Configs и поддержка множества систем

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

  • Cfengine является инструментом в этой категории.
  • Puppet Цель - улучшить работу Cfengine. У него есть кривая обучения, но многие считают, что стоит потратить время, чтобы выяснить, как это сделать. Как только вы это сделаете, каждый блок периодически проверяет центральный сервер и проверяет, что все в актуальном состоянии. Если кто-то редактирует файл или изменяет разрешение, это обнаруживается и исправляется.Таким образом, в отличие от инструментов развертывания выше, Puppet не только ставит файлы в нужное вам место, но и гарантирует, что они останутся такими.
  • Chef немного моложе, чем Кукольный с аналогичным подходом.
  • Smartfrog - еще один инструмент в этой категории.
  • Ansible работает с простыми YAML файлов и не требует агентов, работающих на серверах он управляет

Для сравнения этих и многих других инструментов в этой категории можно найти в статье Википедии, Comparison of open source configuration management software.

+0

Отличный ответ, информативный и хорошо написанный. Просто примечание: прошло годы, и теперь Puppet тоже делает Windows. – Luke404 2013-01-25 16:30:35