WordPress часто упрекают в том, что система имеет низкую производительность и не масштабируется так же хорошо, как другие фреймворки.
При большом количестве посетителей сайты на WordPress замедляются и теряют стабильность. Замена виртуального сервера на более мощный, является одним из самых эффективных методов повышения производительности приложения.
В этом руководстве мы установим WordPress на облачной платформе Яндекса. Убедимся, что сайт на WordPress можно настроить для работы на сервере с MySQL-кластером и балансировкой сетевой нагрузки.
Создание группы виртуальных машин
Для установки сайта на сервер с кластером БД MySQL требуется создание группы виртуальных машин с общим шаблоном. В качестве примера будет создано две машины на основе образа LAMP из маркетплейса провайдера.
Создайте группу виртуальных машин:
- В консоли управления выберите каталог, в котором будет создана группа виртуальных машин,
- В списке сервисов выберите Compute Cloud,
- На панели слева выберите Группы виртуальных машин,
- Нажмите кнопку Создать группу.
Настройка группы виртуальных машин
Базовые параметры
Переходим к настройке. Задайте имя, сервисный аккаунт и укажите зоны доступности:
Шаблон виртуальной машины
Выбор образа/загрузочного диска
Выберите готовый образ виртуальной машины LAMP на вкладке Сloud Marketplace:
Вычислительные ресурсы
Минимальные требования для корректной работы сайта:
- vCPU — 2,
- Гарантированная доля vCPU — 20%,
- RAM — 2 ГБ.
Доступ
Укажите логин и SSH-ключ для доступа к серверу из терминала. Команды для создания и получения публичного ключа на устройствах Linux/Mac:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
Масштабирование
Оставьте настройки по умолчанию:
Интеграция с Network Load Balancer
Активируйте опцию, заполните имя и описание целевой группы:
Создание MySQL-кластера
Для создания нового кластера, выполните:
- В консоли управления выберите каталог, в котором нужно создать кластер БД,
- Выберите сервис Managed Service for MySQL,
- Нажмите кнопку Создать кластер.
Заполните имя кластера и выберите версию MySQL (LAMP по умолчанию работает с версией 5.7):
Выберите тип класса хоста s2.small
:
Задайте имя, логин и пароль для базы данных MySQL:
Добавьте еще один хост без публичного доступа в вашей подсети:
Выберите модуль аутентификации mysql_native_password
в настройках СУБД:
Настройка завершена. Нажмите кнопку Создать кластер.
Переходим к обзору хостов кластера после установки. Скопируйте имя хоста с ролью MASTER
для подключения к WordPress.
Настройка Apache
Для каждой виртуальной машины выполните настройку Apache согласно инструкции.
Включите поддержку .htaccess
:
sudo nano /etc/apache2/sites-available/000-default.conf
Добавьте правила для корневой директории:
<Directory /var/www/html>
AllowOverride All
Order allow,deny
allow from all
</Directory>
Результат:
<VirtualHost *:80 [::]:80>
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
<Directory /var/www/html>
AllowOverride All
Order allow,deny
allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Выполните перезапуск Apache:
sudo systemctl restart apache2
Установка WordPress
Перед установкой требуется обновить PHP до версии 7.4 и установить обязательные библиотеки на сервере для корректной работы WordPress.
Выполните установку WordPress на каждой из виртуальных машин в группе. Узнать их публичные адреса можно из общего списка на странице группы.
Создайте и перейдите в каталог для загрузки WordPress:
sudo mkdir /opt/latest/
cd /opt/latest/
Скачайте архив с файлами для установки:
sudo wget https://ru.wordpress.org/latest.tar.gz
Извлеките содержимое, удалите архив и перейдите в каталог:
sudo tar -xzvf latest.tar.gz
sudo rm latest.tar.gz
cd /opt/latest/wordpress/
Создайте служебный файл .htaccess
:
sudo nano .htaccess
Добавьте и сохраните код:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
Создайте файл wp-config.php
для настройки WordPress и задайте права доступа:
sudo cp wp-config-sample.php wp-config.php
sudo chmod 600 wp-config.php
Задайте права записи на файлы и каталоги:
sudo find ./ -type d -exec chmod 0755 {} \;
sudo find ./ -type f -exec chmod 0644 {} \;
Измените владельца и группу для всех файлов:
sudo chown -R www-data:www-data ./
Скопируйте файлы WordPress и перейдите в корневой каталог Apache:
sudo cp -a /opt/latest/wordpress/. /var/www/html/
cd /var/www/html/
Удалите индексный файл Apache:
sudo rm index.html
Настройка wp-config.php
Для подключения сайта к MySQL-кластеру требуется установка значений констант. Выполните в терминале:
sudo nano wp-config.php
Найдите строки:
/* Имя базы данных для WordPress */
define( 'DB_NAME', '%DB_NAME%' );
/* Имя пользователя MySQL */
define( 'DB_USER', '%DB_USER%' );
/* Пароль к базе данных MySQL */
define( 'DB_PASSWORD', '%DB_PASSWORD%' );
/* Имя сервера MySQL */
define( 'DB_HOST', '%DB_HOST%' );
Укажите в файле вместо:
%DB_NAME%
— имя базы данных database,%DB_USER%
— имя пользователя u0101,%DB_PASSWORD%
— пароль от базы данных,%DB_HOST%
— имя хоста MySQL в формате %FQDN%.mdb.yandexcloud.net.
Вместо %FQDN% подставьте имя хоста MySQL с ролью MASTER
, например:
rc1a53-53v441lqyi11rstf.mdb.yandexcloud.net
Не забудьте получить и добавить ключи безопасности. Сохраните файл конфигурации и откройте сайты по публичным IP-адресам для завершения установки WordPress через веб-браузер.
Создание сетевого балансировщика
Yandex Network Load Balancer позволяет создавать и настраивать балансировщики для обеспечения отказоустойчивости.
Чтобы создать сетевой балансировщик:
- В консоли управления откройте раздел Network Load Balancer,
- Нажмите кнопку Создать,
- В блоке Обработчики нажмите кнопку Добавить обработчик, и укажите параметры:
- Порт — 80,
- Целевой порт — 80.
- Нажмите кнопку Добавить,
- В блоке Целевые группы, укажите:
- Порог работоспособности — 5,
- Порог работоспособности — 5.
Проверьте статус балансировщика и перейдите на сайт используя адрес обработчика:
Для проверки отказоустойчивости вы можете вызвать сбой одной из виртуальных машин путем остановки сервера Apache. При верной настройке сайт сохранит доступность во время отключения одного из серверов в группе.