Как настроить Apache с помощью Ansible в Ubuntu 14.04

Вступление

  • Apache * - один из самых популярных веб-серверов, используемых в настоящее время в Интернете. Его легко установить и настроить в дистрибутивах Linux, таких как Ubuntu и Debian, так как он входит в репозитории пакетов и включает конфигурацию по умолчанию, которая работает «из коробки».

  • Ansible * - это инструмент автоматизации, который позволяет удаленно настраивать системы, устанавливать программное обеспечение и выполнять сложные задачи на большом количестве серверов без необходимости входа на каждый из них вручную. В отличие от других альтернатив, Ansible устанавливается на одном хосте, который может быть даже вашим локальным компьютером, и использует SSH для связи с каждым удаленным хостом. Это позволяет невероятно быстро настраивать новые серверы, поскольку на каждом новом сервере нет обязательных пакетов для установки. Он невероятно прост в использовании и понимании, поскольку использует playbooks в формате + yaml + с использованием простого синтаксиса на основе модулей.

Предпосылки

Для этого урока мы установим Ansible на новую мастер-каплю Ubuntu 14.04 и используем ее для настройки Apache на второй капле. Тем не менее, имейте в виду, что одним из преимуществ Ansible является то, что вы можете установить его на свой локальный компьютер и управлять другими узлами без необходимости вручную подключаться к ним по ssh.

Для этого урока вам понадобятся:

  • Две капли Ubuntu 14.04: одна главная капля с Ansible и одна вторичная капля, которая будет запускать Apache, настроенный через Ansible

  • Sudo некорневые пользователи для обеих капель.

  • Ansible установлен на мастер-капельке. Следуйте th theutorial (до Set Up SSH Keys раздел). Хотя это руководство было написано для Ubuntu 12.04, оно по-прежнему актуально для Ubuntu 14.04.

  • Ключи SSH для главной капли для авторизации на вторичной капле, что можно сделать, следуя this руководству на мастер капельку.

  • Активные записи DNS или https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-14-04-lts#step-six-%E2% 80% 94-set-up-local-hosts-file- (необязательно) [вручную настроить файл локальных хостов] на вашем локальном компьютере (используя IP-адрес вторичной капли), чтобы настроить и использовать виртуальные хосты, которые будет настроен.

  • Примечание *: этот учебник следует концепциям, объясненным в существующем учебнике: + https://www.digitalocean.com/community/tutorials/how-to-configure-the-apache-web-server-on-an-ubuntu- or-debian-vps [Как настроить веб-сервер Apache в Ubuntu или Debian VPS]. Пожалуйста, просмотрите этот учебник, если вам нужна дополнительная информация или вы хотите рассмотреть ручной процесс наряду с процессом Ansible.

Шаг 1 - Настройка Ansible

В этом разделе мы настроим Ansible для управления вашим сервером.

Первый шаг после установки Ansible - сообщить Ansible, с какими хостами разговаривать. Для этого нам нужно создать файл Ansible hosts. Файл Ansible hosts содержит группы хостов, на которые мы ссылаемся при запуске команд Ansible. По умолчанию это находится в + / etc / ansible / hosts +. Однако это применяется глобально в вашей системе и часто требует прав администратора. Вместо этого, чтобы упростить задачу, мы должны указать Ansible использовать локальный файл hosts.

Ansible всегда ищет файл + ansible.cfg + в локальном каталоге, из которого он запускается, и, если он найден, переопределяет глобальную конфигурацию с локальными значениями. Имея это в виду, все, что нам нужно сделать, это сказать Ansible, что мы хотим использовать файл hosts в локальном каталоге, а не в глобальном.

Создайте новый каталог (который мы будем использовать до конца этого урока).

mkdir ansible-apache

Перейдите в новый каталог.

cd ~/ansible-apache/

Создайте новый файл с именем + ansible.cfg + и откройте его для редактирования.

nano ansible.cfg

В этом файле мы хотим добавить параметр конфигурации + hostfile + со значением + hosts + в группе + [defaults] +. Скопируйте следующее в файл + ansible.cfg +, затем сохраните и закройте его.

[defaults]
hostfile = hosts

Далее необходимо написать файл + hosts +. Для файла hosts доступно много опций. Однако мы можем начать с чего-то очень простого.

Создайте файл + hosts + и откройте его для редактирования.

nano hosts

Скопируйте следующее в файл + hosts +.

[apache]
ansible_ssh_user=

Это определяет группу хостов с именем + apache +, которая содержит один хост. Замените «» на имя хоста или IP-адрес вторичного сервера, а «» на ваше имя пользователя SSH. Теперь Ansible должен иметь возможность подключиться к вашему серверу.

  • Примечание *: Компонент + ansible_ssh_user = + является необязательным, если вы используете Ansible от имени того же пользователя, что и целевой хост.

Чтобы проверить, что Ansible работает и может общаться с вашим хостом, вы можете выполнить простую команду + ansible +. Ansible поставляется с множеством default modules, но хорошим местом для начала является модуль ping. Он проверяет, может ли он подключиться к каждому хосту, что облегчает проверку правильности файла + hosts +.

Основное использование команды + ansible + принимает группу хостов и имя модуля: + ansible <group> -m <module> +. Чтобы запустить команду + ping +, введите следующую команду.

ansible apache -m ping

Вывод должен выглядеть так:

111.111.111.111 | success >> {
   "changed": false,
   "ping": "pong"
}

Еще один полезный для тестирования модуль Ansible - это модуль command. Он запускает пользовательские команды на хосте и возвращает результаты. Чтобы запустить команду + command + с помощью + echo +, команды Unix, которая выводит строку на терминал, введите следующую команду.

ansible apache -m command -a "/bin/echo hello sammy"

Вывод должен выглядеть так:

111.111.111.111 | success | rc=0 >>
hello sammy

Это базовое использование Ansible. Настоящая сила исходит от создания пьес, содержащих несколько заданий Ansible. Мы расскажем о следующих.

Шаг 2 - Создание Playbook

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

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

Давайте создадим базовую версию playbook команды + hello sammy + выше.

Создайте файл с именем + apache.yml + и откройте его для редактирования.

nano apache.yml

Скопируйте следующий текст в файл, затем сохраните и закройте его.

---
- hosts: apache
 tasks:
   - name: run echo command
     command: /bin/echo hello sammy

Объявление + hosts: apache + находится вверху, что говорит Ansible, что мы используем группу хостов + apache +. Это эквивалентно передаче его через команду + ansible +. Далее идет список задач. В этом примере у нас есть одна задача с именем + run echo command +. Это просто описание, предназначенное для пользователя, чтобы понять, что делает задача. Наконец, строка + command: / bin / echo hello sammy + запускает модуль + command + с аргументами + / bin / echo hello sammy +.

Команда + ansible-playbook + используется для запуска playbooks, и самое простое использование: + ansible-playbook +. Мы можем запустить только что созданную пьесу с помощью следующей команды.

ansible-playbook apache.yml

Вывод должен выглядеть следующим образом.

PLAY [apache] *****************************************************************

GATHERING FACTS ***************************************************************
ok: [111.111.111.111]

TASK: [run echo command] ******************************************************
changed: [111.111.111.111]

PLAY RECAP ********************************************************************
111.111.111.111            : ok=2    changed=1    unreachable=0    failed=0

Здесь важно отметить, что playbooks не возвращают выходные данные модуля, поэтому в отличие от прямой команды, которую мы использовали в шаге 1, мы не можем видеть, действительно ли печатался + hello sammy +. Это означает, что Playbooks лучше подходят для задач, где вам не нужно видеть результат. Ansible скажет вам, если во время выполнения модуля произошла ошибка, так что вам, как правило, нужно полагаться только на это, чтобы знать, если что-то пойдет не так.

Шаг 3 - Установка Apache

Теперь, когда мы представили Playbooks, мы напишем задачу по установке веб-сервера Apache.

Обычно в Ubuntu установка Apache - это простой случай установки пакета + apache2 + через + apt-get +. Чтобы сделать это через Ansible, мы используем модуль apt Ansible. Модуль + apt + содержит ряд опций для специализированных функций + apt-get +. Интересующие нас варианты:

  • * имя *: имя устанавливаемого пакета, либо одно имя пакета, либо список пакетов.

  • * state *: Принимает либо + latest,` + absent`, либо + present. Последняя гарантирует, что установлена ​​последняя версия, подарок просто проверяет, установлена ​​ли она, а отсутствующая удаляет ее, если она установлена.

  • * update_cache *: Обновляет кеш (через + apt-get update +), если он включен, чтобы обеспечить его актуальность.

  • Примечание *: Менеджеры пакетов, кроме + apt + have модули тоже. На каждой странице модуля есть примеры, которые обычно охватывают все основные варианты использования, что позволяет легко понять, как использовать каждый модуль. Редко приходится искать инструкции по использованию в другом месте.

Теперь давайте обновим нашу + apache.yml + playbook с модулем + apt + вместо модуля + command +. Снова откройте файл + apache.yml + для редактирования.

nano apache.yml

Удалите текст, который есть в данный момент, и скопируйте в него следующий текст.

---
- hosts: apache
 sudo: yes
 tasks:
   - name: install apache2
     apt: name=apache2 update_cache=yes state=latest

Строка + apt + устанавливает пакет + apache2 + (+ name = apache2 +) и гарантирует, что мы обновили кеш (+ update_cache = yes +). Хотя это необязательно, включая + state = latest +, явно указывать, что он должен быть установлен, - это хорошая идея.

Если ваша Playbook не работает как + root на каждом хосте,` + sudo i` потребуется для обеспечения правильных привилегий. Ansible поддерживает + sudo + как часть простой опции в Playbook. Его также можно применить с помощью команды + ansible-playbook + и на уровне каждой задачи.

Теперь запустите playbook.

ansible-playbook apache.yml --ask-sudo-pass

Флаг + - ask-sudo-pass + запросит у вас пароль sudo на вторичной капле. Это необходимо, потому что для установки требуются права суперпользователя; другие команды, которые мы выполняли до сих пор, не выполнялись.

Вывод должен выглядеть следующим образом.

PLAY [apache] *****************************************************************

GATHERING FACTS ***************************************************************
ok: [111.111.111.111]

TASK: [install apache2] *******************************************************
changed: [111.111.111.111]

PLAY RECAP ********************************************************************
111.111.111.111            : ok=2    changed=1    unreachable=0    failed=0

Если вы посещаете имя хоста или IP-адрес вашего вторичного сервера в своем браузере, теперь вы должны получить * Apache2 Ubuntu Default Page *, чтобы приветствовать вас. Это означает, что у вас есть работающая установка Apache на вашем сервере, и вы еще не подключились к нему вручную, чтобы выполнить команду.

Важной концепцией, на которую следует обратить внимание, является idempotence, которая лежит в основе поведения Ansible-модулей. Идея состоит в том, что вы можете запускать одну и ту же команду несколько раз, но если все было настроено при первом запуске, то все последующие запуски не вносят изменений. Почти все модули Ansible поддерживают его, включая модуль + apt +.

Например, снова запустите ту же команду playbook.

ansible-playbook apache.yml --ask-sudo-pass

Вывод должен выглядеть следующим образом. Обратите внимание на раздел + изменен = 0 +.

PLAY [apache] *****************************************************************

GATHERING FACTS ***************************************************************
ok: [111.111.111.111]

TASK: [install apache2] *******************************************************
: [111.111.111.111]

PLAY RECAP ********************************************************************
111.111.111.111            : ok=2        unreachable=0    failed=0

Это говорит о том, что пакет + apache2 + уже установлен, поэтому ничего не изменилось. При работе со сложными плейбуками на многих хостах очень полезна возможность идентифицировать разные хосты. Например, если вы заметили, что хост * всегда * нуждается в обновлении определенной конфигурации, вероятно, на этом хосте есть пользователь или процесс, который его меняет. Без идемпотентности этого никогда не заметят.

Шаг 4 - Настройка модулей Apache

Теперь, когда Apache установлен, нам нужно разрешить использование модуля Apache.

Давайте удостоверимся, что модуль + mod_rewrite + включен для Apache. С помощью SSH это легко сделать с помощью + a2enmod + и перезапуска Apache. Однако мы также можем сделать это очень легко с помощью Ansible, используя модуль apache2_module и обработчик задач для перезапуска + apache2 +.

Модуль + apache2_module + принимает две опции:

  • * name * - Имя модуля для включения, например + rewrite +.

  • * state * - либо + present +, либо + absent +, в зависимости от того, нужно ли включить или отключить модуль.

Откройте + apache.yml + для редактирования.

nano apache.yml

Обновите файл, чтобы включить эту задачу. Теперь файл должен выглядеть так:

---
- hosts: apache
 sudo: yes
 tasks:
   - name: install apache2
     apt: name=apache2 update_cache=yes state=latest

Однако нам нужно перезапустить + apache2 + после включения модуля. Один из вариантов - добавить задачу для перезапуска + apache2 +, но мы не хотим, чтобы она запускалась каждый раз, когда мы применяем наш playbook. Чтобы обойти это, нам нужно использовать task handler. Способ работы обработчиков заключается в том, что задача может быть уведомлена о том, что обработчик уведомляется, когда он изменился, и обработчик запускается только тогда, когда задача была изменена.

Для этого нам нужно добавить опцию + notify + в задачу + apache2_module +, а затем мы можем использовать модуль service для перезапуска + apache2 + в обработчике.

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

---
- hosts: apache
 sudo: yes
 tasks:
   - name: install apache2
     apt: name=apache2 update_cache=yes state=latest

   - name: enabled mod_rewrite
     apache2_module: name=rewrite state=present

Теперь перезапустите playbook.

ansible-playbook apache.yml --ask-sudo-pass

Вывод должен выглядеть так:

PLAY [apache] *****************************************************************

GATHERING FACTS ***************************************************************
ok: [111.111.111.111]

TASK: [install apache2] *******************************************************
ok: [111.111.111.111]







PLAY RECAP ********************************************************************
111.111.111.111            : ok=4        unreachable=0    failed=0

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

Шаг 5 - Настройка параметров Apache

Теперь, когда у нас есть работающая установка Apache с включенными необходимыми модулями, нам нужно настроить Apache.

По умолчанию Apache прослушивает порт 80 для всего HTTP-трафика. Ради учебника, давайте предположим, что мы хотим, чтобы Apache прослушивал порт 8081. В конфигурации Apache по умолчанию в Ubuntu 14.04 x64 есть два файла, которые необходимо обновить:

/etc/apache2/ports.conf
   Listen 80

/etc/apache2/sites-available/000-default.conf
   <VirtualHost *:80>

Для этого мы можем использовать модуль lineinfile. Этот модуль невероятно мощный и, благодаря использованию множества различных параметров конфигурации, он позволяет вам выполнять всевозможные изменения в существующем файле на хосте. Для этого примера мы будем использовать следующие параметры:

  • * dest * - файл, который будет обновлен как часть команды.

  • * regexp * - Регулярное выражение, которое будет использоваться для соответствия существующей строке, подлежащей замене.

  • * line * - строка для вставки в файл, заменяющая строку + regexp + или новая строка в конце.

  • * состояние * - либо + присутствует +, либо + отсутствует +.

  • Примечание *: Модуль + lineinfile + добавит строку в конец файла, если он не соответствует существующей строке с + regexp +. Опции + insertbefore + и + inserttafter + могут указывать строки для добавления до или после, а не в конце, если это необходимо.

Чтобы обновить порт с + 80 + до + 8081 +, нам нужно найти существующие строки, которые определяют порт + 80 +, и изменить их для определения порта + 8081 +.

Откройте файл + apache.yml + для редактирования.

nano apache.yml

Исправьте дополнительные строки, чтобы файл выглядел так:

---
- hosts: apache
 sudo: yes
 tasks:
   - name: install apache2
     apt: name=apache2 update_cache=yes state=latest

   - name: enabled mod_rewrite
     apache2_module: name=rewrite state=present
     notify:
       - restart apache2











 handlers:
   - name: restart apache2
     service: name=apache2 state=restarted

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

Теперь запустите playbook.

ansible-playbook apache.yml --ask-sudo-pass

Как только Ansible завершит работу, вы сможете посетить свой хост в своем браузере, и он ответит на порт + 8081 +, а не на порт + 80 +. В большинстве веб-браузеров этого легко достичь, добавив +: port + в конец URL: + http: //111.111.111.111: / +.

Модуль + lineinfile + является очень мощным и позволяет очень легко изменять существующие конфигурации. Единственный улов заключается в том, что вам нужно знать, чего ожидать от файлов, которые вы изменяете с ним, но он поддерживает широкий спектр опций, которые поддерживают самые простые варианты использования.

Шаг 6 - Настройка виртуальных хостов

Ansible содержит несколько модулей, которые позволяют копировать локальный (в Ansible) файл шаблона на хосты. Два наиболее часто используемых модуля для этой цели - модуль copy и модуль template. Модуль + copy + копирует файл как есть и не вносит в него никаких изменений, тогда как более мощный модуль + template + копирует весь шаблон и применяет подстановку переменных к областям, которые вы указываете, используя двойные фигурные скобки (т.е. + {{variable}} +).

В этом разделе мы будем использовать модуль template для настройки нового виртуального хоста на вашем сервере. Изменений будет много, поэтому мы расскажем о них по частям и включим весь обновленный файл + apache.yml + в конце этого шага.

Создать конфигурацию виртуального хоста

Первым шагом является создание новой конфигурации виртуального хоста. Мы создадим файл конфигурации виртуального хоста на главной капле и загрузим его на дополнительную каплю с помощью Ansible.

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

<VirtualHost *:>
   ServerAdmin webmaster@
   ServerName
   ServerAlias www.
   DocumentRoot /var/www/
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Создайте новый файл с именем + virtualhost.conf +.

nano virtualhost.conf

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

<VirtualHost *:>
   ServerAdmin webmaster@
   ServerName
   ServerAlias www.
   DocumentRoot /var/www/
   ErrorLog ${APACHE_LOG_DIR}/error.log
   CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Использовать переменные шаблона

Затем нам нужно обновить нашу книгу воспроизведения, чтобы вытолкнуть шаблон и использовать переменные.

Первым шагом является добавление раздела в playbook для переменных. Он называется + vars + и находится на том же уровне, что и + hosts,` + sudo`, + tasks и` + handlers`. Нам нужно поместить обе переменные, использованные в шаблоне выше, и в процессе мы вернем порт на «+ 80 +».

---
- hosts: apache
 sudo: yes



 tasks:
   - name: install apache2
...

Переменные могут использоваться в задачах и шаблонах, поэтому мы можем обновить наши существующие модули + lineinfile +, чтобы использовать указанный + http_port + вместо жестко закодированного + 8081 +, который мы указали ранее. Переменная должна быть добавлена ​​в строку, а опция + regexp + должна быть обновлена, чтобы она не искала определенный порт. Изменения будут выглядеть так:

lineinfile: dest=/etc/apache2/ports.conf regexp="" line="Listen " state=present
lineinfile: dest=/etc/apache2/sites-available/000-default.conf regexp="" line="<VirtualHost *:>"

Добавить шаблон модуля

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

  • * dest * - Путь к файлу назначения для сохранения обновленного шаблона на хосте (хостах), т.е. + / etc / apache2 / sites-available / {{domain}}. conf +.

  • * src * - исходный файл шаблона, т.е. + Virtualhost.conf +.

Применение их к вашей книге игр приведет к следующей задаче:

- name: create virtual host file
 template: src=virtualhost.conf dest=/etc/apache2/sites-available/{{ domain }}.conf

Включить виртуальный хост

Почти сделано! Теперь нам нужно включить виртуальный хост в Apache. Это можно сделать двумя способами: запустив команду + sudo a2ensite example.com + или вручную вставив символическую ссылку в файл конфигурации в + / etc / apache2 / sites-enabled / +. Первый вариант безопаснее, так как позволяет Apache контролировать процесс. Для этого модуль + command + снова используется.

Использование довольно просто, как мы обнаружили выше:

- name: a2ensite {{ domain }}
 command: a2ensite {{ domain }}
 notify:
 - restart apache2

Предотвратить лишнюю работу

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

Это делается с помощью опции + create +, которая позволяет сообщить модулю, какой файл создается во время выполнения модуля. Если файл существует, модуль не запустится. Поскольку Apache создает символическую ссылку, когда сайты включены, проверка на это решает проблему.

Изменения будут выглядеть так:

- name: a2ensite {{ domain }}
 command: a2ensite {{ domain }}


 notify:
 - restart apache2

Важно отметить использование в задаче раздела + args +. Это необязательный способ перечисления опций модуля, и в этом случае устраняется путаница между тем, что является опцией модуля, и самой командой.

Финал + apache.yml + Playbook

Теперь давайте применим эти изменения. Откройте + apache.yml +.

nano apache.yml

Со всеми вышеизложенными изменениями измените ваш + apache.yml + playbook так, чтобы он выглядел следующим образом.

---
- hosts: apache
 sudo: yes
 vars:
   http_port: 80
   domain: example.com
 tasks:
   - name: install apache2
     apt: name=apache2 update_cache=yes state=latest

   - name: enabled mod_rewrite
     apache2_module: name=rewrite state=present
     notify:
       - restart apache2

   - name: apache2 listen on port {{ http_port }}
     lineinfile: dest=/etc/apache2/ports.conf regexp="^Listen " line="Listen {{ http_port }}" state=present
     notify:
       - restart apache2

   - name: apache2 virtualhost on port {{ http_port }}
     lineinfile: dest=/etc/apache2/sites-available/000-default.conf regexp="^<VirtualHost \*:" line="<VirtualHost *:{{ http_port }}>"
     notify:
       - restart apache2

   - name: create virtual host file
     template: src=virtualhost.conf dest=/etc/apache2/sites-available/{{ domain }}.conf

   - name: a2ensite {{ domain }}
     command: a2ensite {{ domain }}
     args:
       creates: /etc/apache2/sites-enabled/{{ domain }}.conf
     notify:
       - restart apache2

 handlers:
   - name: restart apache2
     service: name=apache2 state=restarted

Сохраните и закройте файл, затем запустите playbook.

ansible-playbook apache.yml --ask-sudo-pass

Если вы сейчас откроете имя хоста или IP-адрес вашей дополнительной капли в вашем браузере, вы увидите, что она снова отвечает на порт + 80 +, а не на порт + 8081 +. Далее посетите домен (т.е. + example.com +) мы указали для нового виртуального хоста. Поскольку мы еще не добавили никаких файлов, на нем должна отображаться страница с ошибкой Apache + 404 +, а не страница приветствия Apache. Если это так, ваш виртуальный хост работает правильно, и вы все еще не включили SSH во вторичный дроплет, чтобы выполнить одну команду.

Шаг 7 - Использование Git Repository для вашего сайта

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

Каждому веб-сайту нужен контент, и, хотя это нормально для SSH и клонирования Git-репозитория вручную для настройки нового веб-сайта, Ansible предоставляет нам инструменты, необходимые для его автоматического выполнения. В этом примере модуль git сделает то, что требуется.

Модуль + git + имеет много опций, причем соответствующие для этого урока следующие:

  • * dest * - Путь на хосте, на который будет извлечен репозиторий.

  • * repo * - URL-адрес хранилища, который будет клонирован. Это должно быть доступно хосту.

  • * update * - если установлено значение + no +, это предотвращает обновление хранилища Ansible, когда он уже существует.

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

Для целей данного руководства существует простой Git-репозиторий с единственной страницей + index.html +, который можно клонировать на вашем хосте. Если у вас уже есть другой общедоступный репозиторий, содержащий аналогичные, вы можете заменить его. Имея это в виду, задача + git + будет выглядеть так:

- name: clone basic html template
 git: repo= dest= update=no

Однако, если вы запустили Playbook сейчас, вы, вероятно, получите ошибку. Сначала нам нужно установить пакет + git +, чтобы Ansible мог использовать его для клонирования репозитория. Задача + apt + должна быть обновлена ​​для установки как пакета + apache2 +, так и пакета + git . Проверка документации http://docs.ansible.com/apt_module.html[apt] показывает, что опция ` name +` принимает только один пакет, так что это не поможет. Вместо этого нам нужно использовать список предметов.

Ansible предоставляет возможность указать список элементов для циклического прохождения и применить задачу к каждому. Они задаются с помощью опции + with_items + как часть задачи, и наша задача + apt + будет обновлена, чтобы выглядеть следующим образом:

- name: install packages
 apt: name= update_cache=yes state=latest

Список элементов использует переменную + item + и будет выполнять задачу для каждого элемента в списке.

Снова откройте + apache.yml +.

nano apache.yml

Обновите playbook, чтобы соответствовать следующему:

---
- hosts: apache
 sudo: yes

 vars:
   http_port: 80
   domain: example.com

 tasks:







   - name: enabled mod_rewrite
     apache2_module: name=rewrite state=present
     notify:
       - restart apache2

   - name: apache2 listen on port {{ http_port }}
     lineinfile: dest=/etc/apache2/ports.conf regexp="^Listen " line="Listen {{ http_port }}" state=present
     notify:
       - restart apache2

   - name: apache2 virtualhost on port {{ http_port }}
     lineinfile: dest=/etc/apache2/sites-available/000-default.conf regexp="^<VirtualHost \*:" line="<VirtualHost *:{{ http_port }}>"
     notify:
       - restart apache2

   - name: create virtual host file
     template: src=virtualhost.conf dest=/etc/apache2/sites-available/{{ domain }}.conf

   - name: a2ensite {{ domain }}
     command: a2ensite {{ domain }}
     args:
       creates: /etc/apache2/sites-enabled/{{ domain }}.conf
     notify:
       - restart apache2




 handlers:
   - name: restart apache2
     service: name=apache2 state=restarted

Сохраните файл и запустите playbook.

ansible-playbook apache.yml --ask-sudo-pass

Он должен установить + git + и успешно клонировать репозиторий. Теперь вы должны увидеть что-то, кроме ошибки 404, когда вы посещаете виртуальный хост из шага 6. Не забудьте проверить, что не виртуальный хост все еще возвращает страницу по умолчанию.

Таким образом, теперь у вас установлен Git, и базовая HTML-страница была клонирована через Git на ваш новый виртуальный хост. Все еще не требуется никаких ручных команд SSH. Если вам нужен только основной HTML-сайт, и он находится в общедоступном Git-репозитории, то все готово!

Заключение

Мы только что создали Ansible Playbook, чтобы автоматизировать весь процесс настройки вашего хоста для запуска веб-сервера Apache с виртуальными хостами и репозиторием Git. Все это было достигнуто без необходимости входа непосредственно на сервер, и самое приятное, что вы можете запустить новую Playbook на большинстве серверов Ubuntu для достижения того же результата.

  • Примечание *: если на вашем хосте уже установлен и изменен Apache, вам, скорее всего, потребуется обработать каждую из модификаций, чтобы вернуть его в требуемое состояние. С другой стороны, Ansible исправит эти изменения только в том случае, если они существуют, поэтому их можно хранить в основном Playbook!

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

Вы можете просмотреть Ansible Module List, чтобы увидеть, на что еще способен Ansible.

Related