Создание плейбука Ansible для Drupal в Ubuntu 14.04

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

Для запуска команд на удалённой системе Ansible использует только SSH, потому клиентам не нужно дополнительное программное обеспечение (агенты). Любой сервер с открытым SSH-портом можно добавить в систему Ansible.

Кроме того, Ansible использует YAML. Этот язык проще, чем более мощные языки программирования, которые используются другими инструментами.

Drupal – это популярная CMS. Установка Drupal занимает немало времени, но этот процесс легко автоматизировать. Данное руководство поможет разработать плейбук Ansible для автоматизации установки Drupal и всех зависимостей в Ubuntu 14.04.

Требования

  • Сервер Ubuntu 14.04 с доступом SSH; на этом сервере будут установлены Ansible и Drupal.
  • Опционально: дополнительный сервер Ubuntu 14.04 для удалённой установки Drupal.
  • Пользователь sudo (на каждом сервере, если серверов несколько). Используйте одно и то же имя пользователя и пароль на всех серверах, на которых нужно установить Drupal.
  • Базовые навыки работы с Drupal. Больше информации можно найти в статье Установка Drupal+Apache на Ubuntu 14.04.

1: Установка Ansible

Пакетов Ansible нет в стандартном репозитории системы. Потому нужно добавить архив ppa:rquillo/ansible.

sudo add-apt-repository ppa:rquillo/ansible

Обновите индекс пакетов:

sudo apt-get install ansible

2: Создание каталога для плейбуков

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

Плейбуки рекомендуется хранить в специальном каталоге. Создайте каталог MyPlaybooks:

mkdir ~/MyPlaybooks

Создайте отдельный каталог для нового плейбука, который будет называться drupal_setup.

mkdir ~/MyPlaybooks/drupal_setup

3: Создание файла hosts

Обычно плейбуки используют файл hosts; он содержит имена доступных серверов.

В данном руководстве система Drupal будет установлена на localhost и дополнительный сервер drupal_server. При необходимости добавьте в файл больше серверов. Помните: каждый добавляемый сервер должен быть доступен по SSH.

Создайте и откройте файл hosts:

nano ~/MyPlaybooks/drupal_setup/hosts

Он должен содержать такой код:

[drupal_hosts] localhost
drupal_server_ip

Примечание: Вместо drupal_server_ip укажите IP второго сервера.

Вы можете добавить в файл неограниченное количество IP-адресов.

С помощью этого плейбука вы можете установить Drupal на любое количество серверов Ubuntu 14.04.

Примечание: Файл hosts нужно обновить, если вы захотите в дальнейшем использовать этот плейбук для настройки дополнительных серверов Drupal. При этом нужно удалить добавленные ранее серверы из списка и внести в него IP-адреса новых серверов, а затем повторно запустить плейбук.

Сохраните и закройте файл.

4: Создание роли для apt-get update

Создайте новый каталог для хранения всех ролей плейбука.

mkdir ~/MyPlaybooks/drupal_setup/roles

Команду apt-get update нужно запускать перед установкой любой программы. Создайте каталог для роли update.

mkdir ~/MyPlaybooks/drupal_setup/roles/update

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

mkdir ~/MyPlaybooks/drupal_setup/roles/update/tasks

Создайте файл main.yml. С помощью этого файла можно определить поведение Ansible во время выполнения этой роли.

nano ~/MyPlaybooks/drupal_setup/roles/update/tasks/main.yml

В файле используйте модуль Ansible apt, который будет обновлять систему:

---
- name: apt-get update the server
apt: update_cache=yes

Убедитесь, что файл не содержит лишних пробелов, а затем сохраните и закройте его.

5: Создание роли для PHP

Создайте каталог для роли php:

mkdir ~/MyPlaybooks/drupal_setup/roles/php

Создайте каталог tasks для этой роли:

mkdir ~/MyPlaybooks/drupal_setup/roles/php/tasks

Для работы Drupal необходим веб-сервер, который использует PHP. В данном руководстве используется Apache. При установке PHP Apache устанавливается автоматически, потому вам не придётся запускать дополнительных команд.

Создайте и откройте в редакторе файл main.yml для роли php:

nano ~/MyPlaybooks/drupal_setup/roles/php/tasks/main.yml

Добавьте модуль apt для установки PHP5, библиотеки PHP5 GD и других зависимостей.

---
- name: Install PHP and associated packages
apt: name=php5 state=latest
- name: Install PHP GD library
apt: name=php5-gd state=latest
notify:
- Restart Apache

После установки PHP GD нужно перезапустить Apache. Потому в эту роль нужно добавить обработчик.

Все обработчики роли хранятся в отдельном каталоге. Создайте каталог handlers для текущей роли:

mkdir ~/MyPlaybooks/drupal_setup/roles/php/handlers

Создайте и откройте файл main.yml:

nano ~/MyPlaybooks/drupal_setup/roles/php/handlers/main.yml

Добавьте в него такой код:

---
- name: Restart Apache
service: name=apache2 state=restarted

Настройка PHP и Apache завершена.

6: Создание роли для MySQL

Для хранения данных Drupal необходима СУБД. В данном руководстве используется MySQL.

Создайте каталог для этой роли и её задач:

mkdir -p ~/MyPlaybooks/drupal_setup/roles/mysql/tasks

Первой задачей этой роли будет установка MySQL и зависимостей. Создайте и откройте файл setup.yml:

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/setup.yml

В этом файле используется модуль apt для установки:

  • mysql-server
  • libapache2-mod-auth-mysql
  • php5-mysql

Добавьте в файл следующий код:

---
- name: Install MySQL server
apt: name=mysql-server state=latest
- name: Install Apache module for MySQL authentication
apt: name=libapache2-mod-auth-mysql state=latest
- name: Install MySQL module for PHP
apt: name=php5-mysql state=latest

Этой роли нужен ещё один файл задачи. Системе Drupal нужна отдельная БД MySQL; чтобы настроить создание этой БД, нужно создать новую задачу, файл create_db.yml.

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/create_db.yml

Ansible предоставляет модули для управления MySQL. В данном случае используются следующие модули:

  • mysql_db – для создания БД для Drupal.
  • mysql_user – для создания нового пользователя и передачи ему прав на БД.

Прежде чем использовать модули mysql_db или mysql_user, нужно настроить установку на удалённый хост пакета Python MySQLdb. Для этого используйте модуль apt.

Добавьте в этот файл такой код:

---
- name: Install Python MySQLdb
apt: name=python-mysqldb state=latest
- name: Create the Drupal database
mysql_db: db={{ db_name }} state=present
- name: Create the Drupal user
mysql_user: >
name={{ db_user }}
password={{ db_password }}
priv={{ db_name }}.*:ALL
host=localhost

Строки, помещённые в {{ }}, обозначают переменные. В данной задаче есть переменные {{ db_user }}, {{ db_password}} и {{ db_name }}. Значения этих переменных можно установить позже.

Сейчас нужно сообщить Ansible о двух задачах роли. Для этого создайте файл main.yml:

nano ~/MyPlaybooks/drupal_setup/roles/mysql/tasks/main.yml

Добавьте в файл следующий код:

---
- include: setup.yml
- include: create_db.yml

7: Создание роли для Drupal

Теперь всё готово к установке Drupal.

Создайте все каталоги для роли и задач:

mkdir -p ~/MyPlaybooks/drupal_setup/roles/drupal/tasks

Создайте и отредактируйте файл задачи main.yml:

nano ~/MyPlaybooks/drupal_setup/roles/drupal/tasks/main.yml

Данная задача выполняет следующие действия:

  • Устанавливает git на удалённый хост. Для этого используется модуль git.
  • С помощью того же модуля git клонирует последнюю стабильную версию Drupal из репозитория http://git.drupal.org/project/drupal.git. Загруженные файлы будут помещены в /var/www/html/drupal.
  • Создаёт файлы settings.php и services.yml на основе стандартных файлов.
  • Обновляет привилегии на settings.php, services.yml и sites/default/files.

Вставьте в файл:

---
- name: Install git
apt: name=git state=latest
- name: Clone Drupal
git: >
repo=http://git.drupal.org/project/drupal.git
dest=/var/www/html/drupal/
update=no
- name: Create settings.php
command: cp /var/www/html/drupal/sites/default/default.settings.php /var/www/html/drupal/sites/default/settings.php
- name: Create services.yml
command: cp /var/www/html/drupal/sites/default/default.services.yml /var/www/html/drupal/sites/default/services.yml
- name: Update permissions of settings.php
file: path=/var/www/html/drupal/sites/default/settings.php mode=777
- name: Update permissions of services.yml
file: path=/var/www/html/drupal/sites/default/services.yml mode=777
- name: Update permissions of files directory
file: >
path=/var/www/html/drupal/sites/default/files
mode=777
state=directory
recurse=yes

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

8: Объединение ролей

На данный момент у вас есть все необходимые роли. Теперь нужно объединить их.

Создайте файл site.yml. Этот файл и будет выполнять Ansible, чтобы автоматически установить Drupal.

nano ~/MyPlaybooks/drupal_setup/site.yml

В этом файле нужно указать следующие данные:

  • Указать хосты, на которых будет работать этот плейбук.
  • Настроить плейбук для запуска только через sudo.
  • Установить значения по умолчанию для переменных, используемых в различных ролях.
  • Запустить все роли.

Добавьте в файл такой код:

---
- hosts: drupal_hosts
sudo: yes
vars:
- db_name: drupal
- db_user: drupal_user
- db_password: drupal_db_pass
roles:
- update
- php
- mysql
- drupal

Примечание: Вместо drupal_db_pass укажите пароль БД для Drupal. При необходимости можно изменить значения всех переменных.

9: SSH-соединение

Прежде чем запустить плейбук, нужно добавить в файл ~/.ssh/known_hosts запись о каждом хосте, указанном в файле hosts.

Для этого нужно подключиться к каждому серверу из файла ~/MyPlaybooks/drupal_setup/hosts по SSH.

Подключитесь к localhost по SSH:

ssh localhost

Если вы впервые подключаетесь к серверу таким образом, вы получите сообщение:

The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is b1:18:3d:19:15:21:39:5a:f7:9f:3c:37:68:ba:62:01.
Are you sure you want to continue connecting (yes/no)?

Выберите yes, на экране появится:

Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.

Чтобы подключиться к остальным серверам, используйте:

ssh drupal_sudo_user@drupal_server_ip

Примечание: Укажите имя пользователя и IP-адрес сервера. Напоминаем, что имя и пароль пользователя с доступом sudo должны быть одинаковыми на всех серверах, в том числе на localhost.

Вместо паролей можно использовать открытый ключ SSH.

Подключившись к каждому серверу, можно запустить плейбук.

10: Запуск плейбука

Теперь можно протестировать плейбук. Запустите его с помощью команды ansible-playbook.

  • Флаг –k запрашивает пароль SSH; если вы используете ключи вместо паролей, пропустите эту опцию.
  • Флаг -K запрашивает пароль пользователя sudo.

cd ~/MyPlaybooks/drupal_setup/
ansible-playbook -i hosts site.yml -kK

Введите пароль SSH и подождите, пока плейбук запустится. После этого на сервере появится свежая установки Drupal.

Запуск обычно занимает несколько минут. При этом Ansible сообщает о каждом своём действии.

Важно! Чтобы использовать этот плейбук в дальнейшем для установки Drupal на другие серверы, нужно удалить старый список IP-адресов в файле ~/MyPlaybooks/drupal_setup/hosts и добавить в файл IP-адреса новых серверов. В противном случае Ansible переустановит Drupal на тех серверах, где эта система уже установлена.

11: Настройка Drupal

Теперь можно настроить Drupal в веб-браузере. Откройте ссылку:

http://your_server_ip/drupal/

Следуйте подсказкам и инструкциям программы.

Примечание: Если вам нужна помощь в настройке Drupal, читайте это руководство.

Параметры БД – это переменные из раздела vars файла ~/MyPlaybooks/drupal_setup/site.yml.

12: Файл hosts

Теперь, когда система управления Drupal установлена на все серверы, указанные в файле ~/MyPlaybooks/drupal_setup/hosts, нужно удалить из этого файла все IP-адреса.

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

Устранение неполадок

Файлы YAML учитывают каждый пробел. Если плейбук не работает, скорее всего, вы случайно пропустили и поставили лишний пробел в файле .yml.

Если на экране появилось такое сообщение об ошибке:

fatal: [server-name] => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this.  Please add this host's fingerprint to your known_hosts file to manage this host.

То вы не добавили запись для одного или нескольких хостов в файл ~/.ssh/known_hosts.

Подключитесь к localhost или к удалённому серверу через SSH вручную, а затем повторно запустите плейбук.

Заключение

Теперь у вас есть сценарий для автоматизированной установки системы управления контентом Drupal и всех её зависимостей (включая Apache и MySQL). Однако, прежде чем использовать этот плейбук в производстве, рекомендуется добавить в него настройки безопасности. Можно также использовать в нём команды Drush для управления установкой Drupal.

Tags: , ,

Добавить комментарий