Использование MySQL на отдельном сервере с приватной сетью VPS

Приватную сеть - функционал, доступный пользователям VPS - можно использовать для вынесения MySQL на отдельный сервер. В этом случае веб-сервер обрабатывает запросы от клиентов и через приватное подключение обменивается данными с базой.

Это может быть полезно в случае, когда база данных требует значительное количество ресурсов сервера. При переносе MySQL на отдельный сервер появляется возможность выделить для работы базы данных практически все ресурсы, доступные серверу, и не повредить этим работе прочих приложений.

Ниже мы приведём пример разворачивания такого проекта - мы будем устанавливать WordPress с подключением базы данных на другом сервере. Для этого мы используем два сервера с Ubuntu 20.04.

Подготовка серверов

  • Перейдите в Панель Управления аккаунтом и создайте два VPS. Подробнее о создании сервера Вы можете прочитать здесь.
  • На первый сервер установите Ubuntu 20.04 и LEMP-стек. Далее мы будем обозначать этот сервер как VPS 1, на нём будет располагаться веб-сервер. На второй сервер установите Ubuntu 20.04 - мы будем обозначать его как VPS 2, на нём будет располагаться база данных.
  • Подключите VPS 1 и VPS 2 к приватной сети по инструкции "Как подключить VPS к приватной сети".

Установка MySQL-сервера

  • Подключитесь по протоколу SSH к VPS 2, используя его внешний IP. Подробнее этот процесс описан в нашей статье.
  • Установите на сервер MySQL. Вы можете сделать это с помощью команд:
sudo apt-get update
sudo apt-get install mysql-server
  • Установите root-пароль для MySQL. Для этого используйте клиент MySQL. Подключитесь к серверу:
mysql -u root
  • Выполните команду изменения доступа к серверу, где MyNewPass - выбранный Вами пароль:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
  • Отправьте команду MySQL-серверу для того, чтобы он переприменил настройки доступа:
mysql> FLUSH PRIVILEGES;

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

  • Перейдите в конфигурационный файл MySQL:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

В этом файле найдите раздел [mysqld] и измените в нём значения bind-address и mysqlx-bind-address , указав вместо 127.0.0.1 IP-адрес VPS 2 во внутренней сети. В нашем примере этот раздел выглядит следующим образом:

[mysqld]
#
# * Basic Settings
#
user = mysql
# pid-file = /var/run/mysqld/mysqld.pid
# socket = /var/run/mysqld/mysqld.sock
# port = 3306
# datadir = /var/lib/mysql
 
 
# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 10.16.0.3
mysqlx-bind-address = 10.16.0.3
  • Сохраните и закройте файл. Перезапустите MySQL-сервер командой:
sudo systemctl restart mysql
  • Подключитесь к MySQL. Для этого введите команду:
mysql -u root -p

Если ранее Вы не устанавливали root-пароль для MySQL, то в ответ на запрос пароля потребуется просто нажать Enter. После успешного подключения Вы увидите в терминале приглашение ко вводу данных.

  • Создайте БД для проекта. Укажите имя БД. Например, в нашем примере БД будет названа beget_test:
CREATE DATABASE beget_test;
  • Далее потребуется создать два пользователя для только что созданной БД: для локального и для удалённого подключения. Начнём с создания локального пользователя.

Вам потребуется придумать имя пользователя и пароль. В нашем примере имя пользователя - begetuser, пароль для него - testpassword.

CREATE USER 'begetuser'@'localhost' IDENTIFIED BY 'testpassword';
  • Присвойте пользователю права на любые изменения в базе данных:
GRANT ALL PRIVILEGES ON beget_test.* TO 'begetuser'@'localhost';
  • Создайте пользователя для удалённого подключения. В качестве хоста укажите приватный IP, присвоенный VPS 1.

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

Вы можете использовать те же логин и пароль, которые устанавливали для локального пользователя. В нашем случае имя пользователя - так же begetuser, IP, с которого будет производиться подключение к БД - 10.16.0.2, пароль для пользователя - testpassword.

CREATE USER 'begetuser'@'10.16.0.2' IDENTIFIED BY 'testpassword';
  • Этому пользователю также нужно выдать права на любые изменения в базе данных:
GRANT ALL PRIVILEGES ON beget_test.* TO 'begetuser'@'10.16.0.2';
  • Чтобы изменения вступили в силу, обновите привилегии для пользователей:
FLUSH PRIVILEGES;

Пользователи созданы. Теперь Вы можете выйти из MySQL при помощи команды exit.

Проверка подключения к MySQL-серверу

  • Протестируйте локальное подключение к базе:
mysql -u begetuser -p

Если подключение прошло успешно, Вы можете выйти из MySQL при помощи команды exit.

  • Проверьте, что удалённое подключение также работает корректно. Перейдите на VPS 1 и подключитесь к БД, находящейся на VPS 2:
mysql -u begetuser -h 10.16.0.3 -p

После ключа - h укажите приватный IP VPS 2.

Если возникнет такая ошибка:

ERROR 1130 (HY000): Host '10.16.0.2' is not allowed to connect to this MySQL server

вероятнее всего, в конфигурации MySQL на стороне VPS 2 не был изменен конфигурационный файл или не перезапущен сервер MySQL.

Установка WordPress

  • После предыдущего шага останьтесь на VPS 1 и скачайте установочный пакет WordPress с официального сайта с помощью команды:
curl -O https://wordpress.org/latest.tar.gz
  • Распакуйте архив:
tar xzvf latest.tar.gz
  • Создайте копию конфигурационного файла и переименуйте её, чтобы WordPress смог её обработать:
cp wordpress/wp-config-sample.php wordpress/wp-config.php
  • Откройте конфигурационный файл WordPress и укажите данные для подключения к базе:
nano wordpress/wp-config.php

Что указывать в переменных:

  • DB_NAME - имя базы данных;
  • DB_USER - имя пользователя MySQL для удалённого подключения;
  • DB_PASSWORD - пароль от базы данных;
  • DB_HOST - приватный IP VPS 2.
// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'beget_test' );
 
/** MySQL database username */
define( 'DB_USER', 'begetuser' );
 
/** MySQL database password */
define( 'DB_PASSWORD', 'testpassword' );
 
/** MySQL hostname */
define( 'DB_HOST', '10.16.0.3' );
 
/** Database charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );
 
/** The database collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

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

  • Скопируйте папку с файлами WordPress в корневую папку nginx:
sudo cp -a wordpress/* /var/www/html
  • Измените владельца файлов на www-data, чтобы Nginx смог корректно их обрабатывать:
sudo chown -R www-data:www-data /var/www/html
  • Перейдите в файл /etc/nginx/sites-enabled/default и добавьте index.php в строку под комментарием:
# Add index.php to the list if you are using PHP

Должно получиться вот так:

# Add index.php to the list if you are using PHP
index index.php index.html index.htm index.nginx-debian.html;

После этого используйте команду systemctl restart nginx, чтобы перезагрузить Nginx.

  • Откройте браузер и перейдите по адресу http://внешний-ip-vps1/wp-admin/install.php. Вы можете увидеть внешний IP VPS 1 в Панели управления аккаунтом, выбрав нужный VPS из списка слева.

Откроется страница установщика WordPress.

  • Выберите язык установки, нажмите "Продолжить" и заполните данные в появившейся форме. Не забудьте скопировать пароль от панели администратора сайта!
  • Нажмите на кнопку "Войти" и введите имя пользователя и пароль, указанные Вами на предыдущем шаге.
  • Готово! Проект развёрнут.

9
7449