Назад | Перейти на главную страницу

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

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

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

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

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

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

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

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

В шаблон модуль позволяет развернуть файл с уникальными значениями для каждого хоста. Имя хоста, над которым в настоящее время работают, хранится в переменных 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, можно найти Вот.