Поиск по сайту:

Как автоматизировать одновременное развертывание WordPress на нескольких серверах Linux с помощью Ansible. Часть 3


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

В текущем уроке мы объясним, как настроить WordPress на тех же удаленных серверах:

node1: 192.168.0.29
node2: 192.168.0.30

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

Я настоятельно рекомендую вам прочитать Часть 1 и Часть 2, прежде чем продолжить, чтобы убедиться, что вы знакомы с концепциями, связанными с Ansible.

Как установить и настроить инструмент автоматизации Ansible для управления ИТ – Часть 1

Как использовать сборники сценариев Anisble для автоматизации сложных задач на нескольких удаленных серверах — часть 2

Шаг 1. Знакомство с ролями Ansible

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

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

В нашем случае мы создадим две роли. Один из них (называемый wp-зависимости) будет использоваться для установки зависимостей WordPress (PHP и MariaDB – устанавливать не нужно. Apache, поскольку он уже установлен).

Другая роль (с именем wp-install-config) будет включать в себя все необходимые задачи, связанные с установкой и настройкой WordPress.

Шаг 2. Создание ролей Ansible

В состав Ansible входит утилита под названием ansible-galaxy, которая поможет нам создать структуру каталогов для наших ролей. Мы сделаем это в /etc/ansible/playbooks (который мы создали в Части 2), но теоретически вы можете настроить его в другом каталоге, если хотите.

cd /etc/ansible/playbooks
ansible-galaxy init wp-dependencies
ansible-galaxy init wp-install-config

Далее подтверждается вновь созданные роли.

ls -R /etc/ansible/playbooks

На изображении выше мы видим, что ansible-galaxy создал два каталога с тем же именем, что и наши роли, и другие подкаталоги (defaults, files). , обработчики, мета, задачи, шаблоны и переменные) и README.md внутри каждого из них.

Кроме того, во всех перечисленных ранее каталогах, за исключением файлов и шаблонов, был создан файл YAML с именем main.yml.

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

1. /etc/ansible/playbooks/wp-dependents/tasks/main.yml. Обратите внимание, что мы включили httpd на тот случай, если вы не ознакомились с предыдущими уроками этой серии.

---
tasks file for wp-dependencies
- name: Update packages (this is equivalent to yum update -y)
  yum: name=* state=latest

- name: Install dependencies for WordPress
  yum: name={{ item }} state=present
  with_items:
        - httpd
        - mariadb-server 
        - mariadb
        - php 
        - php-mysql
        - MySQL-python

- name: Ensure MariaDB is running (and enable it at boot)
  service: name=mariadb state=started enabled=yes

- name: Copy ~/.my.cnf to nodes
  copy: src=/root/.my.cnf dest=/root/.my.cnf

- name: Create MariaDB database
  mysql_db: name={{ wp_mysql_db }} state=present

- name: Create MariaDB username and password
  mysql_user:
        login_user=root
        login_password=YourMariaDBRootPasswordHere
        name={{ wp_mysql_user }}
        password={{ wp_mysql_password }}
        priv=*.*:ALL

2. /etc/ansible/playbooks/wp-dependents/defaults/main.yml

---
defaults file for wp-dependencies
  wp_mysql_db: MyWP
  wp_mysql_user: wpUser
  wp_mysql_password: wpP4ss

3. /etc/ansible/playbooks/wp-install-config/tasks/main.yml:

---
tasks file for wp-install-config
- name: Create directory to download WordPress
  command: mkdir -p /opt/source/wordpress

- name: Download WordPress
  get_url: url=https://www.wordpress.org/latest.tar.gz dest=/opt/source/wordpress/wordpress.tar.gz validate_certs=no

- name: Extract WordPress
  command: "tar xzf /opt/source/wordpress/wordpress.tar.gz -C /var/www/html --strip-components 1"

- name: Send config file
  copy: src=/root/wp-config-sample.php dest=/var/www/html/wp-config.php mode=0644

4. wp-config-sample.php (представленный в этом Pastebin) следующим образом и сохраните его на своем компьютере с контроллером Ansible (как вы можете видеть в последней директиве копирования выше). , я загрузил его в домашний каталог суперпользователя (/root/wp-config-sample.php).

Важно! Обратите внимание, что значения переменных DB_NAME, DB_USER и DB_PASSWORD > такие же, как в /etc/ansible/playbooks/wp-dependentities/defaults/main.yml:

…
/** The name of the database for WordPress */
define('DB_NAME', 'MyWP');

/** MySQL database username */
define('DB_USER', 'wpUser');

/** MySQL database password */
define('DB_PASSWORD', 'wpP4ss');
…

5. Для новых установок сервера базы данных, где пароль root пуст, как в этом случае, к сожалению, нам необходимо установить пароль для пользователя root индивидуально на каждом компьютере через mysql_secure_installation .

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

Убедитесь, что вы используете один и тот же пароль на всех хостах, затем скопируйте учетные данные в /root/.my.cnf (фактическое местоположение может отличаться в вашем случае, но во всех случаях оно должно совпадать со значением). параметра src для задачи Скопируйте ~/.my.cnf в узлы в /etc/ansible/playbooks/wp-dependentities/tasks/main.yml ).

В этом файле (см. выше) мы предположили, что пароль для root — YourMariaDBRootPassword.

6. Далее наша книга игр (/etc/ansible/playbooks/playbook.yml) будет выглядеть гораздо более организованной и простой по сравнению с предыдущим уроком:

cat playbook.yml

- hosts: webservers
  roles:
        - wp-dependencies
        - wp-install-config

Наконец, пришло время выполнить эти задачи, вызвав наш плейбук:

ansible-playbook playbook.yml

Теперь давайте проверим, можем ли мы получить доступ к странице администрирования WordPress, используя IP-адреса node1 192.168.0.29 и node2 192.168.0.30:

Вы можете просмотреть последние два шага в следующем скринкасте:

Как видите, вы можете настроить несколько установок WordPress практически без усилий, используя Ansible. Затем вы можете использовать соответствующий пользовательский интерфейс Администратора для настройки каждого сайта отдельно.

Заключительные соображения

Если вы используете другой дистрибутив для развертывания WordPress, названия пакетов могут отличаться, но все сводится к установке веб-сервера Apache, сервера базы данных MariaDB и модуля Python MySQL. В этом случае используйте систему управления программным обеспечением вашего дистрибутива, чтобы найти точное имя пакета, который вам нужно установить.

Краткое содержание

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

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

Желаем удачи и не стесняйтесь писать нам, если вам нужна помощь или у вас есть какие-либо комментарии или предложения!