Подтвердить что ты не робот

Пример Настройка макета для стека рельсов? (nginx, лак, тонкий, postgres, memcached, redis)

Я только начинаю с Puppet. Примерные пошаговые руководства и учебные пособия были полезны для того, чтобы помочь мне понять полезность "Кукольный" и базовый набор инструментов, но мне сложно описать полный стек. Даже расширенный учебник, похоже, не дал мне четкой картины того, что должно произойти.

Есть ли какие-нибудь полные примеры стеков рельсов, из которых я мог бы учиться?

4b9b3361

Ответ 1

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

http://forge.puppetlabs.com/ - это каноническое расположение модулей, которые люди хотят разделить. С помощью быстрого сканирования я нашел модули для nginx, varnish и postgres.

Для базовой настройки вы хотите начать с Puppet Best Practices.

Оттуда вы поедете (по крайней мере), захотите создать модуль для nginx, лака, тонкого, postgres, memcached, redis и модуля сайта (вероятно, названный в честь вашего сайта).

В ваших узлах .pp каждая система будет иметь довольно простое назначение роли. ( "включить роль" )

В вашем модуле "сайт" вам понадобится подкласс для каждой системной роли (я предполагаю, что у вас будет несколько наборов серверов, а внутри набора они будут в основном идентичны Я также предполагаю, что у вас, вероятно, будет более одного из перечисленных выше). Вам также может потребоваться класс site:: commonvariables (или что-то в этом роде) для вещей (например, списки серверов в роли, пароли и т.д.), Которые могут понадобиться для нескольких других модулей или классов. Кажется, что лучшие методы имеют следующие роли: роль в области вспомогательного модуля /services, где имена больше похожи на s_role, поэтому вы можете следовать этой схеме именования/размещения. Эти классы ролей будут включать классы для фактических компонентов, которые необходимы для этих ролей, определения вызовов и т.д.

Для каждого из 6 компонентов, которые вы упомянули, у вас будет модуль. Внутри этого модуля вы, скорее всего, захотите иметь что-то вроде "серверного" и "клиентского" подкласса. И, возможно, третий класс, включенный клиентом и сервером для вещей, необходимых для обоих (общие библиотеки и т.д.). И внутри подкласса сервера определите, что устанавливает определенные экземпляры (virtualhosts, базы данных и т.д.). (если это абсолютно только сервер, возможно, пропустите этот уровень подкласса).

Итак, например:

  • модуль postgres (манифесты, файлы, шаблоны и т.д.)
    • класс postgres (в init.pp): может быть, пустой класс, возможно, вещи, необходимые клиенту и серверу
      • postgres:: client class: установить клиентские библиотеки postgres
      • postgres:: server class: установите код сервера postgres, убедитесь, что служба postgres запущена, настройте ее, настройте резервные копии и т.д.
        • postgres:: server:: database define: внутри класса сервера определяется определение, которое принимает такие параметры, как имя базы данных, имя пользователя, пароль и создает базу данных и пользователя и дает пользователю доступ к БД. Возможно, это два или три отдельных определяет, в зависимости от того, как вы предпочитаете моделировать вещи.

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