Введение
Всегда наступают моменты, когда нам необходимо настроить новые серверы. Это может быть связано с распределением рабочей нагрузки или если нам просто требуется больше серверов. При настройке новых серверов пользователям необходимо использовать автоматизацию серверов для их конфигурации. Это делается для того, чтобы свести к минимуму ручное вмешательство. Ansible — это один из инструментов управления конфигурацией, который можно использовать для автоматической настройки нового сервера, что снижает вероятность человеческих ошибок при ручной настройке сервера.
Ansible — это многофункциональный инструмент с простой архитектурой. Он облегчает настройку серверов с помощью скриптов. Благодаря своей лаконичной архитектуре Ansible не требует установки какого-либо другого программного обеспечения на узлах.
В этом руководстве мы покажем вам, как использовать Ansible для автоматизации установки WordPress со стеком LAMP, работающим на сервере Ubuntu. WordPress — это CMS, которая используется для создания блогов и веб-сайтов с использованием PHP в качестве языка программирования и базы данных MySQL для хранения данных. После установки WordPress пользователи могут администрировать сайт с помощью веб-интерфейса.
Предварительные требования
- Поскольку это руководство основано на Ubuntu, вам понадобится установленная последняя версия Ubuntu с правами sudo. Если у вас не установлена Ubuntu, вы можете воспользоваться нашим руководством Как настроить сервер Ubuntu.
- Нам также понадобится управляющий узел Ansible. На нем должен быть настроен управляющий узел с правами sudo и включенным брандмауэром. Установка и настройка Ansible на Ubuntu 20.04 содержит подробное руководство по настройке Ansible.
- Нам также понадобятся удаленные хосты Ansible, работающие под управлением последней версии Ubuntu. Хосты по сути являются управляемыми узлами в Ansible.
Краткое описание действий Ansible Playbook
В этом разделе мы увидим, что делает наш Ansible Playbook при его выполнении. Эта процедура является альтернативой ручной настройке, описанной здесь: Как установить WordPress с LAMP на Ubuntu 20.04.
При запуске Playbook Ansible выполнит следующие действия:
- Установит aptitude — предпочтительный менеджер пакетов для Ansible.
- Установит и настроит расширения PHP и пакеты LAMP.
- Создаст новый Apache VirtualHost для веб-сайта WordPress.
- Включит модуль mod_rewrite и отключит веб-сайт по умолчанию, предлагаемый Apache.
- Установит пароль для пользователя root в MySQL.
- Удалит анонимные учетные записи MySQL и тестовую базу данных.
- Создаст нового пользователя и новую базу данных. Они будут использоваться веб-сайтом WordPress.
- Настроит UFW для разрешения HTTP-трафика на настроенном порту ( 80 по умолчанию).
- Скачает и распакует WordPress.
- Настроит права доступа и владельцев для директорий.
- Настроит новый файл wp-config.php с использованием его шаблона.
Руководство по Ansible Playbook для WordPress на LAMP
Сначала нам нужно будет получить playbook WordPress на LAMP и его зависимости из репозитория do-community/ansible-playbooks. Мы клонируем этот репозиторий внутри управляющего узла Ansible.
Вы можете запустить команду git pull как указано ниже:
|
1 2 3 4 5 |
cd ~ git clone https://github.com/do-community/ansible-playbooks.git cd ansible-playbooks |
Убедитесь, что у вас обновленная копия вышеупомянутого репозитория. Это на случай, если вы клонировали репозиторий ранее. Ниже описано, как получить обновление:
|
1 2 3 |
cd ~/ansible-playbooks git pull |
Теперь нам нужно найти файлы внутри папки wordpress-lamp_ubuntu . Имя этой папки может отличаться в зависимости от используемой вами версии Ubuntu. С первого взгляда вы увидите следующую структуру в этом каталоге:

Ниже кратко описано назначение этих файлов:
- files/apache.conf.j2: Apache использует VirtualHost. Этот файл используется для указания настроек для VirtualHost.
- files/wp-config.php.j2: Этот файл содержит настройки для конфигурации WordPress.
- vars/default.yml: Он настраивает параметры playbook.
- playbook.yml: Если есть задачи, которые необходимо выполнить на удаленном сервере, этот файл используется для их настройки.
- readme.md: Руководство по использованию playbook.
Нам нужно отредактировать файл переменных плейбука, чтобы настроить установку. Сначала откройте vars/default.yaml файл, который находится внутри вышеупомянутого каталога:
|
1 2 3 |
cd wordpress-lamp_ubuntu1804 nano vars/default.yml |
Этот файл довольно длинный. В нем есть ряд конфигураций, которые помогут нам с установкой:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
--- #System Settings php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #MySQL Settings mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #HTTP Settings http_host: "your_domain" http_conf: "your_domain.conf" http_port: "80" |
Здесь нас интересуют следующие переменные:
- php_modules: Массив, содержащий расширения PHP, которые должны быть установлены для поддержки вашей настройки WordPress. Если вы хотите установить больше модулей, вы можете указать их здесь.
- mysql_root_password: Пароль для учетной записи root MySQL.
- mysql_db: Указывает имя базы данных MySQL, которую будет использовать WordPress.
- mysql_user: Имя пользователя MySQL, которое должно быть создано для WordPress.
- mysql_password: Пароль для нового пользователя MySQL.
- http_host: Доменное имя или IP-адрес сервера.
- http_conf: Имя конфигурационного файла, который будет создан в Apache.
- http_port: HTTP-порт для этого виртуального хоста. Этот порт используется для доступа к веб-сайту. Значение по умолчанию — 80.
Затем введите значения в указанный выше файл, сохраните и закройте его. Для пользователей, использующих редактор nano, нажмите CTRL+X, Y, и нажмите ENTER.
Теперь вы готовы запустить этот плейбук. Вы можете запустить его на одном или нескольких серверах. Если вы хотите запустить этот плейбук на каком-то конкретном сервере, вы можете использовать флаг -l. Кроме того, если вам нужно указать пользователя для подключения к удаленному серверу, укажите его с помощью флага -u .
Предположим, мы хотим выполнить наш плейбук на одном сервере, srvr1, используя пользователя u1, мы можем запустить команду ниже:
|
1 |
ansible-playbook playbook.yml -l server1 -u cloudsigma |
После запуска вышеуказанной команды вы получите вывод, подобный следующему:
|
1 2 3 4 5 6 7 8 9 |
PLAY [all] ******************************************************************************** TASK [Gathering Facts] ******************************************************************************** ok: [server1] TASK [Install prerequisites] ******************************************************************************** ok: [server1] |
Дождитесь завершения выполнения плейбука. Затем перейдите к server_name в вашем веб-браузере:
|
1 |
http://server_host_or_ip/ |
Вы увидите экран:

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

После этого введите информацию и нажмите Install WordPress. Это займет некоторое время, после чего вы увидите экран, подобный приведенному ниже:

Выберите Login для входа на свой веб-сайт и настройки параметров:

Содержимое плейбука Ansible
Помните о папке wordpress-lamp_ubuntu . Она содержит несколько файлов внутри. Давайте разберем их по очереди:
● vars/default.yml
Этот файл содержит значения, которые используются для настройки параметров вашего веб-сайта WordPress:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
#Настройки системы php_modules: [ 'php-curl', 'php-gd', 'php-mbstring', 'php-xml', 'php-xmlrpc', 'php-soap', 'php-intl', 'php-zip' ] #Настройки MySQL mysql_root_password: "mysql_root_password" mysql_db: "wordpress" mysql_user: "sammy" mysql_password: "password" #Настройки HTTP http_host: "ваш_домен" http_conf: "ваш_домен.conf" http_port: "80" |
● files/apache.conf.j2
Этот файл используется для настройки VirtualHost в Apache:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<VirtualHost *:{{ http_port }}> ServerAdmin webmaster@localhost ServerName {{ http_host }} ServerAlias www.{{ http_host }} DocumentRoot /var/www/{{ http_host }} ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined <Directory /var/www/{{ http_host }}> Options -Indexes </Directory> <IfModule mod_dir.c> DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm </IfModule> </VirtualHost> |
● files/wp-config.php.j2
Этот файл используется для настройки WordPress. Он содержит уникальные ключи и соли, сгенерированные хэш-функциями:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
<?php /** * Базовая конфигурация для WordPress * * Скрипт создания wp-config.php использует этот файл во время * установки. Вы можете не использовать веб-сайт, а просто * скопировать этот файл под именем "wp-config.php" и заполнить значения. * * Этот файл содержит следующие конфигурации: * * * Настройки MySQL * * Секретные ключи * * Префикс таблиц базы данных * * ABSPATH * * @link https://codex.wordpress.org/Editing_wp-config.php * * @package WordPress */ // ** Настройки MySQL: вы можете получить эту информацию у вашего хостинг-провайдера ** // /** Имя базы данных для WordPress */ define( 'DB_NAME', '{{ mysql_db }}' ); /** Имя пользователя базы данных MySQL */ define( 'DB_USER', '{{ mysql_user }}' ); /** Пароль к базе данных MySQL */ define( 'DB_PASSWORD', '{{ mysql_password }}' ); /** Имя сервера MySQL */ define( 'DB_HOST', 'localhost' ); /** Кодировка базы данных для создания таблиц. */ define( 'DB_CHARSET', 'utf8' ); /** Сопоставление базы данных. Если не уверены, не меняйте. */ define( 'DB_COLLATE', '' ); /** Доступ к файловой системе **/ define('FS_METHOD', 'direct'); /**#@+ * Уникальные ключи и соли для аутентификации. * * Измените их на уникальные фразы! * Вы можете сгенерировать их с помощью {@link https://api.wordpress.org/secret-key/1.1/salt/ службы секретных ключей WordPress.org} * Вы можете изменить их в любой момент, чтобы аннулировать все существующие файлы cookie. Это заставит всех пользователей войти в систему заново. * * @since 2.6.0 */ define( 'AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_KEY', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'SECURE_AUTH_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'LOGGED_IN_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); define( 'NONCE_SALT', '{{ lookup('password', '/dev/null chars=ascii_letters length=64') }}' ); /**#@-*/ /** * Префикс таблиц базы данных WordPress. * * Вы можете использовать несколько установок в одной базе данных, если укажете для каждой * уникальный префикс. Пожалуйста, используйте только цифры, буквы и знаки подчеркивания! */ $table_prefix = 'wp_'; /** * Для разработчиков: режим отладки WordPress. * * Измените это значение на true, чтобы включить отображение уведомлений во время разработки. * Настоятельно рекомендуется, чтобы разработчики плагинов и тем использовали WP_DEBUG * в своих средах разработки. * * Для получения информации о других константах, которые можно использовать для отладки, * посетите Кодекс. * * @link https://codex.wordpress.org/Debugging_in_WordPress */ define( 'WP_DEBUG', false ); /* Это всё, дальнейшее редактирование не требуется! Успешной работы. */ /** Абсолютный путь к директории WordPress. */ if ( ! defined( 'ABSPATH' ) ) { define( 'ABSPATH', dirname( __FILE__ ) . '/' ); } /** Инициализирует переменные WordPress и подключает файлы. */ require_once( ABSPATH . 'wp-settings.php' ); |
● playbook.yml
Этот файл содержит все задачи, определенные в этой конфигурации. Он начинается со списка серверов, на которые нацелена эта конфигурация. Он включает в себя vars/default.yml файл переменных для загрузки параметров конфигурации:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
--- - hosts: all become: true vars_files: - vars/default.yml tasks: - name: Установить зависимости apt: name=aptitude update_cache=yes state=latest force_apt_get=yes tags: [ system ] - name: Установить LAMP пакеты apt: name={{ item }} update_cache=yes state=latest loop: [ 'apache2', 'mysql-server', 'python3-pymysql', 'php', 'php-mysql', 'libapache2-mod-php' ] tags: [ system ] - name: Установить PHP расширения apt: name={{ item }} update_cache=yes state=latest loop: "{{ php_modules }}" tags: [ system ] # Настройка Apache - name: Создать корневой каталог документов file: path: "/var/www/{{ http_host }}" state: directory owner: "www-data" group: "www-data" mode: '0755' tags: [ apache ] - name: Настроить виртуальный хост Apache VirtualHost template: src: "files/apache.conf.j2" dest: "/etc/apache2/sites-available/{{ http_conf }}" notify: Перезапустить Apache tags: [ apache ] - name: Включить модуль rewrite shell: /usr/sbin/a2enmod rewrite notify: Перезапустить Apache tags: [ apache ] - name: Включить новый сайт shell: /usr/sbin/a2ensite {{ http_conf }} notify: Перезапустить Apache tags: [ apache ] - name: Отключить сайт Apache по умолчанию shell: /usr/sbin/a2dissite 000-default.conf notify: Перезапустить Apache tags: [ apache ] # Настройка MySQL - name: Установить пароль rootpassword mysql_user: name: root password: "{{ mysql_root_password }}" login_unix_socket: /var/run/mysqld/mysqld.sock tags: [ mysql, mysql-root ] - name: Удалить все анонимные учетные записи пользователей mysql_user: name: '' host_all: yes state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Удалить the тестовую базу данных MySQL testdatabase mysql_db: name: test state: absent login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Создать базу данных для WordPress mysql_db: name: "{{ mysql_db }}" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] - name: Создать MySQL пользователя для WordPress mysql_user: name: "{{ mysql_user }}" password: "{{ mysql_password }}" priv: "{{ mysql_db }}.*:ALL" state: present login_user: root login_password: "{{ mysql_root_password }}" tags: [ mysql ] # Настройка UFW - name: "UFW - Разрешить HTTP на порту {{ http_port }}" ufw: rule: allow port: "{{ http_port }}" proto: tcp tags: [ system ] # Настройка WordPress - name: Скачать и распаковать последнюю версию WordPress unarchive: src: https://wordpress.org/latest.tar.gz dest: "/var/www/{{ http_host }}" remote_src: yes creates: "/var/www/{{ http_host }}/wordpress" tags: [ wordpress ] - name: Установить владельца file: path: "/var/www/{{ http_host }}" state: directory recurse: yes owner: www-data group: www-data tags: [ wordpress ] - name: Установить права доступа для директорий shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type d -exec chmod 750 {} \\;" tags: [ wordpress ] - name: Установить права доступа для файлов shell: "/usr/bin/find /var/www/{{ http_host }}/wordpress/ -type f -exec chmod 640 {} \\;" tags: [ wordpress ] - name: Настроить up wp-config template: src: "files/wp-config.php.j2" dest: "/var/www/{{ http_host }}/wordpress/wp-config.php" tags: [ wordpress ] handlers: - name: Перезагрузить Apache service: name: apache2 state: reloaded - name: Перезапустить Apache service: name: apache2 state: restarted |
Вы можете изменить эти файлы по мере необходимости в соответствии с вашими конкретными потребностями для создаваемого веб-сайта.
Заключение
В этом руководстве мы продемонстрировали, как можно автоматизировать установку и настройку веб-сайта WordPress, работающего на стеке LAMP, в последней версии операционной системы Ubuntu с помощью Ansible.
Дополнительные руководства по работе с Ansible вы можете найти в следующих статьях в нашем блоге:
- Использование Ansible с CloudSigma
- Автоматизация настройки сервера с помощью Ansible и Ubuntu 20.04
- Установка и настройка LAMP на Ubuntu 20.04 с помощью Ansible
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.