Сайт на WordPress с кластером БД MySQL
С помощью этой инструкции вы научитесь разворачивать сайт на базе CMS WordPress с кластером баз данных под управлением СУБД MySQL в инфраструктуре Yandex Cloud.
Чтобы настроить веб-сайт на WordPress с MySQL-кластером:
- Подготовьте облако к работе.
- Создайте виртуальную машину для WordPress.
- Создайте кластер БД MySQL.
- Настройте веб-сервер Nginx.
- Установите WordPress и дополнительные компоненты.
- Завершите настройку WordPress.
- Настройте DNS.
- Проверьте работу веб-сайта.
Если сайт вам больше не нужен, удалите все используемые им ресурсы.
Подготовьте облако к работе
Перед работой нужно зарегистрироваться в Yandex Cloud и создать платежный аккаунт:
- Перейдите в консоль управления, затем войдите в Yandex Cloud или зарегистрируйтесь, если вы еще не зарегистрированы.
- На странице биллинга убедитесь, что у вас подключен платежный аккаунт, и он находится в статусе
ACTIVE
илиTRIAL_ACTIVE
. Если платежного аккаунта нет, создайте его.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака.
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
В стоимость поддержки веб-сайта на WordPress с MySQL-кластером входит:
- плата за постоянно запущенную виртуальную машину (см. тарифы Yandex Compute Cloud);
- плата за кластер базы данных MySQL (см. тарифы Yandex Managed Service for MySQL);
- плата за использование динамического или статического внешнего IP-адреса (см. тарифы Yandex Virtual Private Cloud).
- плата за публичные DNS-запросы и зоны (см. тарифы Yandex Cloud DNS).
Создайте виртуальную машину для WordPress
Чтобы создать виртуальную машину:
-
На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Виртуальная машина.
-
В поле Имя введите имя виртуальной машины:
wp-mysql-tutorial-web
. -
Выберите зону доступности, в которой будет находиться виртуальная машина.
-
В блоке Образы из Cloud Marketplace нажмите кнопку Выбрать. Выберите публичный образ Debian 11, Ubuntu 20.04 LTS или CentOS 7.
-
В блоке Вычислительные ресурсы:
- Выберите платформу.
- Укажите необходимое количество vCPU и объем RAM:
- vCPU — 2.
- Гарантированная доля vCPU — 20%.
- RAM — 2 ГБ.
-
В блоке Сетевые настройки выберите сеть и подсеть, к которым нужно подключить виртуальную машину. Если нужной сети или подсети еще нет, вы можете создать их прямо на странице создания ВМ.
-
В поле Публичный адрес оставьте значение Автоматически, чтобы назначить виртуальной машине случайный внешний IP-адрес из пула Yandex Cloud, или выберите статический адрес из списка, если вы зарезервировали его заранее.
-
Укажите данные для доступа на виртуальную машину:
-
В поле Логин введите имя пользователя, например,
yc-user
. -
В поле SSH-ключ вставьте содержимое файла открытого ключа.
Пару ключей для подключения по SSH необходимо создать самостоятельно, см. раздел о подключении к виртуальным машинам по SSH.
Внимание
IP-адрес и имя хоста (FQDN) для подключения к машине назначатся ей при создании. Если вы выбрали вариант Без адреса в поле Публичный адрес, вы не сможете обращаться к ВМ из интернета.
-
-
Нажмите кнопку Создать ВМ.
Создание виртуальной машины может занять несколько минут. Когда виртуальная машина перейдет в статус RUNNING
, вы можете переходить к следующему шагу.
При создании виртуальной машине назначается публичный IP-адрес и имя хоста (FQDN). Эти данные можно использовать для доступа по SSH.
Создайте кластер БД MySQL
-
На странице каталога в консоли управления нажмите кнопку Создать ресурс и выберите Кластер MySQL.
-
В поле Имя введите имя кластера:
wp-mysql-tutorial-db-cluster
. -
В блоке Класс хоста выберите s2.small.
-
В блоке Размер хранилища укажите 10 ГБ.
-
В блоке База данных:
- В поле Имя БД введите
wp-mysql-tutorial-db
. - В поле Имя пользователя введите
wordpress
. - В поле Пароль введите пароль, который вы будете использовать для доступа к базе.
- В поле Имя БД введите
-
В блоке Сетевые настройки:
- В списке Сеть выберите сеть, к которой будет подключен кластер.
-
В блоке Хосты добавьте еще два хоста в других зонах доступности. При создании хостов не включайте для них Публичный доступ.
-
В блоке Настройки СУБД нажмите кнопку Настроить.
В поле Default authentication plugin выберите пункт mysql_native_password и нажмите кнопку Сохранить.
-
Нажмите кнопку Создать кластер.
Создание кластера БД может занять несколько минут.
Настройте веб-сервер Nginx
После того как виртуальная машина wp-mysql-tutorial-web
перейдет в статус RUNNING
:
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
-
Подключитесь к виртуальной машине по протоколу SSH. Для этого можно использовать утилиту
ssh
в Linux и macOS и программу PuTTY для Windows.Рекомендуемый способ аутентификации при подключении по SSH — с помощью пары ключей. Не забудьте настроить использование созданной пары ключей: закрытый ключ должен соответствовать открытому ключу, переданному на виртуальную машину.
-
Установите Nginx, менеджер процессов PHP-FPM и дополнительные пакеты:
Debian/UbuntuCentOSsudo apt-get update sudo apt-get install -y nginx-full php-fpm php-mysql sudo systemctl enable nginx
sudo yum -y install epel-release sudo yum -y install nginx sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm sudo yum -y --enablerepo=remi-php74 install php php-mysql php-xml php-soap php-xmlrpc php-mbstring php-json php-gd php-mcrypt sudo yum -y --enablerepo=remi-php74 install php-fpm sudo systemctl enable nginx sudo systemctl enable php-fpm
-
Задайте настройки веб-сервера в конфигурационных файлах Nginx:
Debian/UbuntuCentOS-
Вы можете отредактировать файл с помощью редактора
nano
:sudo nano /etc/nginx/sites-available/wordpress
-
Приведите файл к виду:
server { listen 80 default_server; root /var/www/wordpress; index index.php; server_name <DNS-имя сервера>; location / { try_files $uri $uri/ =404; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
-
Разрешите запуск вашего сайта:
sudo rm /etc/nginx/sites-enabled/default sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
Вы можете отредактировать файлы
nginx.conf
иwordpress.conf
с помощью редактораnano
:-
Откройте файл
nginx.conf
:sudo nano /etc/nginx/nginx.conf
-
Приведите файл к виду:
user nginx; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; events { worker_connections 1024; } http { log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; include /etc/nginx/mime.types; default_type application/octet-stream; include /etc/nginx/conf.d/*.conf; }
-
Откройте файл
wordpress.conf
:sudo nano /etc/nginx/conf.d/wordpress.conf
-
Приведите файл к виду:
server { listen 80 default_server; root /usr/share/nginx/wordpress/; index index.php; server_name <DNS-имя сервера>; location / { try_files $uri $uri/ =404; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
-
Установите WordPress и дополнительные компоненты
-
Загрузите и распакуйте последнюю версию WordPress:
Debian/UbuntuCentOSwget https://wordpress.org/latest.tar.gz tar -xzf latest.tar.gz mv wordpress/wp-config-sample.php wordpress/wp-config.php sudo mv wordpress /var/www/wordpress sudo chown -R www-data:www-data /var/www/wordpress
curl https://wordpress.org/latest.tar.gz --output latest.tar.gz tar -xzf latest.tar.gz mv wordpress/wp-config-sample.php wordpress/wp-config.php sudo mv wordpress /usr/share/nginx/wordpress sudo chown -R nginx:nginx /usr/share/nginx/wordpress/
Измените настройки SELinux:
sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/wordpress(/.*)?" sudo semanage fcontext -a -t httpd_sys_rw_content_t "/usr/share/nginx/wordpress(/.*)?" sudo restorecon -R /usr/share/nginx/wordpress sudo setsebool -P httpd_can_network_connect 1
-
Получите ключи безопасности WordPress:
curl -s https://api.wordpress.org/secret-key/1.1/salt/
Сохраните вывод команды — полученные ключи будут нужны на следующем шаге.
-
Добавьте ключи безопасности в конфигурационный файл WordPress
wp-config.php
. Вы можете отредактировать файл с помощью редактораnano
:Debian/UbuntuCentOSsudo nano /var/www/wordpress/wp-config.php
sudo nano /usr/share/nginx/wordpress/wp-config.php
Замените блок конфигурации на значения, полученные на предыдущем шаге:
define('AUTH_KEY', 't vz,|............R lZ5]'); define('SECURE_AUTH_KEY', '@r&pPD............dK-A%='); define('LOGGED_IN_KEY', '%6TuLl............9>/dNE'); define('NONCE_KEY', 'DO(u.H............$?ja-e'); define('AUTH_SALT', '|G Vo<............Xeb.~y'); define('SECURE_AUTH_SALT', 'Y5tIYA............7Lxf8J'); define('LOGGED_IN_SALT', 'gR]>WZ............<>|;YY'); define('NONCE_SALT', '=]nQIb............HLT2:9');
-
Перейдите к блоку конфигурации подключения к кластеру
wp-mysql-tutorial-db-cluster
:// ** MySQL settings - You can get this info from your web host ** // /** The name of the database for WordPress */ define( 'DB_NAME', '<DB_NAME>' ); /** MySQL database username */ define( 'DB_USER', '<DB_USER>' ); /** MySQL database password */ define( 'DB_PASSWORD', '<DB_PASSWORD>' ); /** MySQL hostname */ define( 'DB_HOST', '<DB_HOST>' );
Укажите в файле вместо:
-
<DB_NAME>
— имя БДwp-mysql-tutorial-db
. -
<DB_USER>
— имя пользователяwordpress
. -
<DB_PASSWORD>
— пароль, заданный при создании кластера БД. -
<DB_HOST>
— имя хоста MySQL видаXXXX-XXXXXXXXXX.mdb.yandexcloud.net
.Чтобы узнать FQDN хоста MySQL:
Консоль управленияCLI- Перейдите на страницу кластера MySQL.
- На вкладке Базы данных нажмите значок .
- Выберите Подключиться.
- Найдите строчку
mysql --host=ХХХХ-ХХХХХХХХХХ.mdb.yandexcloud.net
, гдеХХХХ-ХХХХХХХХХХ.mdb.yandexcloud.net
— это FQDN хоста с рольюMASTER
.
Получите список хостов и скопируйте
NAME
хоста с рольюMASTER
:yc managed-mysql host list --cluster-name <имя кластера MySQL>
+-----------------------------+----------------------+---------+--------+---------------+-----------+ | NAME | CLUSTER ID | ROLE | HEALTH | ZONE ID | PUBLIC IP | +-----------------------------+----------------------+---------+--------+---------------+-----------+ | rc1a-...mdb.yandexcloud.net | c9quhb1l32unm1sdn0in | MASTER | ALIVE | ru-central1-a | false | | rc1b-...mdb.yandexcloud.net | c9quhb1l32unm1sdn0in | REPLICA | ALIVE | ru-central1-b | false | +-----------------------------+----------------------+---------+--------+---------------+-----------+
-
-
Перезапустите Nginx и PHP-FPM:
Debian/UbuntuCentOSsudo systemctl restart nginx.service sudo systemctl restart php7.4-fpm.service
sudo systemctl restart nginx.service sudo systemctl restart php-fpm.service
Завершите настройку WordPress
-
В блоке Сеть на странице виртуальной машины в консоли управления найдите публичный IP-адрес виртуальной машины.
-
Перейдите по адресу виртуальной машины в браузере.
-
Выберите язык и нажмите кнопку Продолжить.
-
Заполните информацию для доступа к сайту:
- Укажите любое название сайта, например,
wp-your-project
. - Укажите имя пользователя, которое будет использоваться для входа в административную панель, например,
admin
. - Укажите пароль, который будет использоваться для входа в административную панель.
- Укажите вашу электронную почту.
- Укажите любое название сайта, например,
-
Нажмите кнопку Установить WordPress.
-
Если установка прошла успешно, нажмите кнопку Войти.
-
Войдите на сайт, используя указанные на прошлых шагах имя пользователя и пароль. После этого откроется административная панель, в которой можно приступать к работе с вашим сайтом.
Настройте DNS
Если у вас есть зарегистрированное доменное имя, воспользуйтесь сервисом Cloud DNS для управления доменом.
В инструкции ниже описана настройка DNS для доменного имени example.com
.
Добавьте зону
Чтобы добавить публичную зону:
- Откройте раздел Cloud DNS в каталоге, где требуется создать зону DNS.
- Нажмите кнопку Создать зону.
- Задайте настройки зоны:
- Имя зоны:
example-zone-1
. - Зона:
example.com.
. Укажите ваш зарегистрированный домен. - Тип — Публичная.
- Имя зоны:
- Нажмите кнопку Создать.
Добавьте ресурсные записи
Создайте в публичной зоне записи DNS:
- В блоке Сеть на странице ВМ в консоли управления найдите публичный IP-адрес ВМ.
- Создайте запись типа А:
- Откройте раздел Cloud DNS в каталоге, где находится зона
example.com
. - Выберите зону
example.com
из списка. - Нажмите кнопку Создать запись.
- Задайте параметры записи:
- Имя: оставьте пустым.
- Тип записи: оставьте значение
А
. - TTL (время кэширования записи): оставьте значение по умолчанию.
- Значение: введите публичный адрес вашей ВМ.
- Нажмите кнопку Создать.
- Откройте раздел Cloud DNS в каталоге, где находится зона
- Создайте запись типа CNAME:
- Выберите зону
example.com
из списка. - Нажмите кнопку Создать запись.
- Задайте параметры записи:
- Имя:
www
. - Тип записи: выберите значение
CNAME
. - TTL (время кэширования записи): оставьте значение по умолчанию.
- Значение: введите
example.com
.
- Имя:
- Нажмите кнопку Создать.
- Выберите зону
Делегируйте доменное имя
Делегирование — это перенос ответственности с серверов регистратора на ваши серверы. Для домена создаются ресурсные записи типа NS (ns1.yandexcloud.net
и ns2.yandexcloud.net
).
Чтобы делегировать домен, укажите для него DNS-серверы в личном кабинете регистратора.
Делегирование происходит не сразу. Серверы интернет-провайдеров обычно обновляют записи до 24 часов (86400 секунд). Это обусловлено значением TTL, в течение которого кэшируются записи для доменов.
Проверить делегирование домена можно с помощью сервиса Whois или утилиты dig
:
dig +short NS example.com
Результат:
ns2.yandexcloud.net.
ns1.yandexcloud.net.
Проверьте работу сайта
Чтобы проверить работу сайта, введите в браузере его IP-адрес или доменное имя:
http://<публичный IP-адрес виртуальной машины>
.http://www.example.com
.
Для входа в панель управления WordPress используйте адрес http://www.example.com/wp-admin/
.
Как удалить созданные ресурсы
Чтобы перестать платить за развернутый сайт:
Если вы зарезервировали для ВМ статический публичный IP-адрес, удалите его.