Как использовать Ansible для управления многосерверной конфигурацией с несколькими веб-сайтами?

Как использовать Ansible для управления многосерверной конфигурацией с несколькими веб-сайтами?

Я исследовал Ansible для предоставления новых серверов, и это работает отлично. Моя игра устанавливает MySQL, Nginx и все остальное. Теперь мне интересно, как лучше всего использовать его в качестве инструмента управления конфигурацией.

Мы запускаем несколько веб-сайтов на каждом сервере. Для меня это означает общую настройку Nginx на каждом сервере и конкретную конфигурацию, требуемую для каждого сайта/домена. Я имею в виду, что я могу обновить как общую настройку, так и конкретную конфигурацию независимо с помощью Ansible, когда мне это нужно (скажем, новые идеи или безопасность).

Что мне нужно сделать в этой ситуации? Нужно ли мне хранить переменную, которая содержит все сайты и на каком сайте они находятся? Или есть лучшие альтернативы?

решение1

Особенностью шаблона, которую вы можете с большой пользой использовать для этой цели, является его возможность создания шаблонов.

Theшаблонмодуль позволяет вам развернуть файл с уникальными значениями для каждого хоста. Имя хоста, над которым в данный момент ведется работа, хранится в переменных inventory_hostname и inventory_hostname_short (последняя является первым точечным компонентом имени хоста).

Вы можете хранить переменные, специфичные для хоста, в словаре в group_vars/all. Например:

www_sites: {
    host1: "www.mysite1.com",
    host2: "www.mysite2.com",
  }

Тогда шаблон для файла конфигурации nginx может включать что-то вроде следующих строк:

server {
  listen       80;
  server_name  {{ www_sites[inventory_hostname_short] }};
  access_log   logs/{{ www_sites[inventory_hostname_short] }}.access.log  main;

Документацию по языку шаблонов Jinja2, используемому Ansible, можно найти здесь.здесь.

решение2

Я использую vars для выполнения определенных действий с данным хостом. Мой совет — группируйте как можно больше хостов в группы и используйте групповые переменные. Помните, что Ansible playbooks отлично подходят для управления версиями в git или SVN, чтобы вы могли отслеживать свои изменения.

Вам может подойти использование vars_prompt, особенно если вы не запускаете свои сценарии по расписанию в cron.

Надеюсь это поможет!

Связанный контент