Как настроить удаленную базу данных для оптимизации производительности сайта с MySQL в Ubuntu 18.04

0 Акции
0
0
0
0

Введение

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

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

Предпосылки
  • Два сервера Ubuntu 18.04. Как объяснялось в руководстве «Начальная настройка сервера в Ubuntu 18.04», на каждом из них должен быть пользователь без прав root с привилегиями sudo и включённым брандмауэром UFW. На одном из этих серверов будет размещаться ваш сервер MySQL, и в этом руководстве мы будем называть его сервером базы данных. Другой будет удалённо подключаться к вашему серверу базы данных и выполнять функции веб-сервера. Аналогично, в этом руководстве мы будем называть его веб-сервером.
  • На вашем веб-сервере установлены Nginx и PHP. Наше руководство по установке Linux, Nginx, MySQL и PHP (стек LEMP) в Ubuntu 18.04 поможет вам в этом процессе. Обратите внимание, что шаг 2, посвящённый установке MySQL, следует пропустить, так как вам нужно установить MySQL на сервер базы данных.
  • MySQL установлен на вашем сервере баз данных. Чтобы настроить его, следуйте нашему руководству по установке MySQL в Ubuntu 18.04.
  • При желании (но настоятельно рекомендуется) на ваш веб-сервер можно установить TLS/SSL-сертификаты от Let's Encrypt. Вам потребуется приобрести доменное имя и настроить DNS-записи для сервера, но сами сертификаты бесплатны. В нашем руководстве «Как защитить Nginx с помощью Let's Encrypt в Ubuntu 18.04» показано, как получить эти сертификаты.

Шаг 1 — Настройте MySQL для прослушивания удаленных подключений

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

Большинство изменений конфигурации сервера MySQL можно внести в файл mysqld.cnf, который по умолчанию хранится в каталоге /etc/mysql/mysql.conf.d/. Откройте этот файл на сервере базы данных с правами root в любом удобном редакторе. Мы будем использовать nano:

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

Этот файл разделён на разделы, которые отмечены метками в квадратных скобках ([ и ]). Найдите раздел с названием mysqld:

. . .
[mysqld]
. . .

В этом разделе найдите параметр bind-address. Он сообщает программному обеспечению базы данных, какой сетевой адрес прослушивать для подключений.

По умолчанию это значение равно 127.0.0.1, что означает, что MySQL настроен на поиск только локальных подключений. Вам необходимо изменить это значение, указав внешний IP-адрес, по которому будет доступен ваш сервер.

Если оба ваших сервера находятся в центре обработки данных с возможностью использования частной сети, используйте IP-адрес частной сети сервера базы данных. В противном случае вы можете использовать его публичный IP-адрес:

[mysqld]
. . .
bind-address = db_server_ip

Поскольку вы будете подключаться к базе данных через Интернет, рекомендуется использовать зашифрованные соединения для защиты данных. Если вы не зашифруете соединение с MySQL, любой в сети сможет перехватить конфиденциальную информацию между вашим веб-сервером и сервером базы данных. Чтобы зашифровать соединения с MySQL, добавьте следующую строку после обновлённой строки bind-address:

[mysqld]
. . .
require_secure_transport = on
. . .

Закончив, сохраните и закройте файл. Если вы используете nano, нажмите CTRL+X, Y, а затем ENTER.

Для работы SSL-подключений необходимо создать ключи и сертификаты. В MySQL есть команда, которая автоматически их настраивает. Выполните следующую команду, чтобы создать необходимые файлы. Кроме того, она сделает их доступными для чтения сервером MySQL, указав UID пользователя MySQL:

sudo mysql_ssl_rsa_setup --uid=mysql

Чтобы заставить MySQL обновить конфигурацию и считать новую информацию SSL, перезапустите базу данных:

sudo systemctl restart mysql

Чтобы убедиться, что сервер теперь прослушивает внешний интерфейс, выполните следующую команду netstat:

sudo netstat -plunt | grep mysqld
Output
tcp 0 0 db_server_ip:3306 0.0.0.0:* LISTEN 27328/mysqld

netstat выводит статистику о сетевой системе вашего сервера. Этот вывод показывает, что процесс mysqld подключен к db_server_ip через порт 3306, стандартный порт MySQL, и подтверждает, что сервер прослушивает соответствующий интерфейс.

Затем откройте этот порт на брандмауэре, чтобы разрешить трафик:

sudo ufw allow mysql

Это все изменения конфигурации, которые вам необходимо внести в MySQL. Далее мы рассмотрим, как настроить базу данных и несколько профилей пользователей, один из которых вы будете использовать для удалённого доступа к серверу.

Шаг 2 — Настройка базы данных WordPress и удаленных учетных данных

Несмотря на то, что MySQL в настоящее время прослушивает внешний IP-адрес, в настоящее время не настроены ни удалённо подключенные пользователи, ни базы данных. Давайте создадим базу данных для WordPress и несколько пользователей, которые смогут к ней получить доступ.

Начните с подключения к MySQL как пользователь root MySQL:

sudo mysql

В командной строке MySQL создайте базу данных, которую будет использовать WordPress. Рекомендуется дать этой базе данных узнаваемое имя, чтобы вы могли легко найти её в дальнейшем. Назовём её WordPress:

CREATE DATABASE wordpress;

Теперь, когда база данных создана, следующим шагом будет создание пары пользователей. Мы создадим локального пользователя и удалённого пользователя, связанного с IP-адресом веб-сервера.

Сначала создайте локального пользователя wpuser и сопоставьте эту учетную запись только с попытками локального подключения, используя localhost в объявлении:

CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'password';

Затем предоставьте этой учетной записи полный доступ к базе данных WordPress:

GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';

Теперь этот пользователь может выполнять любые операции с базой данных WordPress, но эта учётная запись не может использоваться удалённо, поскольку она сопоставляет только подключения с локального компьютера. Поэтому создайте сопутствующую учётную запись, которая будет сопоставлять подключения исключительно с вашего веб-сервера. Для этого вам потребуется IP-адрес вашего веб-сервера.

Обратите внимание, что необходимо использовать IP-адрес, относящийся к той же сети, которую вы настроили в файле mysqld.cnf. Это означает, что если вы указали IP-адрес частной сети в файле mysqld.cnf, необходимо ввести частный IP-адрес вашего веб-сервера в двух командах ниже. Если вы настроили MySQL на использование общедоступного интернета, необходимо сопоставить его с общедоступным IP-адресом веб-сервера.

CREATE USER 'remotewpuser'@'web_server_ip' IDENTIFIED BY 'password';

После создания удаленной учетной записи предоставьте ей те же права, что и локальному пользователю:

GRANT ALL PRIVILEGES ON wordpress.* TO 'remotewpuser'@'web_server_ip';

Наконец, очистите привилегии, чтобы MySQL знал, что пора начать их использовать:

FLUSH PRIVILEGES;

Затем выйдите из команды MySQL, введя:

exit

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

Шаг 3 — Проверка удаленных и локальных подключений

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

Сначала проверьте локальное соединение с сервером базы данных, попытавшись войти в свою новую учетную запись:

mysql -u wpuser -p

При появлении запроса введите пароль, установленный для этой учетной записи.

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

exit

Затем войдите на свой веб-сервер, чтобы проверить удаленные соединения:

ssh sammy@web_server_ip

Для доступа к удалённой базе данных необходимо установить на веб-сервере клиентские инструменты MySQL. Для начала обновите локальный кэш пакетов, если вы ещё этого не сделали:

sudo apt update

Затем установите клиентские инструменты MySQL:

sudo apt install mysql-client

После этого подключитесь к серверу базы данных с помощью следующей команды:

mysql -u remotewpuser -h db_server_ip -p

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

Вам будет предложено ввести пароль для учётной записи remotewpuser. После его ввода, если всё работает как надо, вы увидите приглашение MySQL. Убедитесь, что соединение использует SSL, с помощью следующей команды:

status

Если соединение действительно использует SSL, строка SSL: укажет на это, как показано здесь:

Output
--------------
mysql Ver 14.14 Distrib 5.7.18, for Linux (x86_64) using EditLine wrapper
Connection id: 52
Current database:
Current user: [email protected]
SSL: Cipher in use is DHE-RSA-AES256-SHA
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 5.7.18-0ubuntu0.16.04.1 (Ubuntu)
Protocol version: 10
Connection: 203.0.113.111 via TCP/IP
Server characterset: latin1
Db characterset: latin1
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3306
Uptime: 3 hours 43 min 40 sec
Threads: 1 Questions: 1858 Slow queries: 0 Opens: 276 Flush tables: 1 Open tables: 184 Queries per second avg: 0.138
--------------

Убедившись, что вы можете подключиться удаленно, завершите выполнение команды:

exit

Таким образом, вы проверили локальный доступ и доступ с веб-сервера, но не убедились, что другие соединения запрещены. Для дальнейшей проверки сделайте то же самое с третьего сервера, для которого вы не настроили отдельную учётную запись пользователя, чтобы убедиться, что другому серверу доступ не предоставляется.

Обратите внимание, что вам, возможно, придется установить клиентские приложения MySQL, как вы это делали выше, прежде чем запускать следующую команду для попытки подключения:

mysql -u wordpressuser -h db_server_ip -p

Это не должно завершиться успешно и должно вернуть ошибку, подобную этой:

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

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

После успешного тестирования удаленного соединения вы можете приступить к установке WordPress на свой веб-сервер.

Шаг 4 — Установка WordPress

Чтобы продемонстрировать возможности вашего нового сервера MySQL с удалённым управлением, мы покажем вам пошаговую инструкцию по установке и настройке WordPress — популярной системы управления контентом — на вашем веб-сервере. Для этого вам потребуется скачать и распаковать программное обеспечение, настроить параметры подключения, а затем запустить его через веб-установщик WordPress.

На вашем веб-сервере загрузите последнюю версию WordPress в корневой каталог:

cd ~
curl -O https://wordpress.org/latest.tar.gz

Извлеките файлы, в результате чего в корневом каталоге будет создан каталог под названием wordpress:

tar xzvf latest.tar.gz

WordPress включает пример файла конфигурации, который мы будем использовать в качестве отправной точки. Сделайте копию этого файла, удалив «-» из его имени, чтобы WordPress мог его загрузить:

cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php

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

Чтобы получить безопасные значения из генератора секретных ключей WordPress, введите:

curl -s https://api.wordpress.org/secret-key/1.1/salt/

В результате будет выведено несколько ключей. Вы сразу же добавите их в файл wp-config.php:

Output
define('AUTH_KEY', 'L4|2Yh(giOtMLHg3#] DO NOT COPY THESE VALUES %G00o|te^5YG@)');
define('SECURE_AUTH_KEY', 'DCs-k+MwB90/-E(=!/ DO NOT COPY THESE VALUES +WBzDq:7U[#Wn9');
define('LOGGED_IN_KEY', '*0kP!|VS.K=;#fPMlO DO NOT COPY THESE VALUES +&[%8xF*,18c @');
define('NONCE_KEY', 'fmFPF?UJi&(j-{8=$- DO NOT COPY THESE VALUES CCZ?Q+_~1ZU~;G');
define('AUTH_SALT', '@qA7f}2utTEFNdnbEa DO NOT COPY THESE VALUES t}Vw+8=K%20s=a');
define('SECURE_AUTH_SALT', '%BW6s+d:7K?-`C%zw4 DO NOT COPY THESE VALUES 70U}PO1ejW+7|8');
define('LOGGED_IN_SALT', '-l>F:-dbcWof%4kKmj DO NOT COPY THESE VALUES 8Ypslin3~d|wLD');
define('NONCE_SALT', '4J(<`4&&F (WiK9K#] DO NOT COPY THESE VALUES ^ZikS`es#Fo:V6');

Скопируйте полученный вывод в буфер обмена, затем откройте файл конфигурации в текстовом редакторе:

nano ~/wordpress/wp-config.php

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

. . .
define('AUTH_KEY', 'put your unique phrase here');
define('SECURE_AUTH_KEY', 'put your unique phrase here');
define('LOGGED_IN_KEY', 'put your unique phrase here');
define('NONCE_KEY', 'put your unique phrase here');
define('AUTH_SALT', 'put your unique phrase here');
define('SECURE_AUTH_SALT', 'put your unique phrase here');
define('LOGGED_IN_SALT', 'put your unique phrase here');
define('NONCE_SALT', 'put your unique phrase here');
. . .

Удалите эти строки и вставьте значения, скопированные из командной строки.

Затем введите данные для подключения к удалённой базе данных. Эти строки конфигурации находятся в начале файла, прямо над местом, куда вы вставили ключи. Не забудьте использовать тот же IP-адрес, который вы использовали ранее при тестировании удалённой базы данных:

. . .
/** The name of the database for WordPress */
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'remotewpuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
/** MySQL hostname */
define('DB_HOST', 'db_server_ip');
. . .

И наконец, в любом месте файла добавьте следующую строку, которая сообщит WordPress о необходимости использовать SSL-соединение с нашей базой данных MySQL:

define('MYSQL_CLIENT_FLAGS', MYSQLI_CLIENT_SSL);

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

Затем скопируйте файлы и каталоги из каталога ~/wordpress в корневой каталог документов Nginx. Обратите внимание, что эта команда включает флаг -a, который гарантирует перенос всех существующих разрешений:

sudo cp -a ~/wordpress/* /var/www/html

После этого вам останется только изменить владельца файла. Измените владельца всех файлов в корневом каталоге на www-data, пользователя веб-сервера Ubuntu по умолчанию:

sudo chown -R www-data:www-data /var/www/html

После этого WordPress будет установлен, и вы сможете приступить к веб-процедуре настройки.

Шаг 5 — Настройка WordPress через веб-интерфейс

WordPress имеет веб-интерфейс для настройки. В ходе установки система задаст вам несколько вопросов и установит все необходимые таблицы в вашу базу данных. Здесь мы покажем вам основные этапы настройки WordPress, которые вы можете использовать в качестве отправной точки для создания собственного сайта, использующего удалённую базу данных.

Перейдите по доменному имени (или публичному IP-адресу), связанному с вашим веб-сервером:

http://example.com

Вы увидите страницу выбора языка для установщика WordPress. Выберите нужный язык и нажмите на главную страницу установки:

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

Результат

Следуя этому руководству, вы настроили базу данных MySQL для приема SSL-подключений с удалённой установки WordPress. Команды и методы, используемые в этом руководстве, применимы к любому веб-приложению, написанному на любом языке программирования, но конкретные детали реализации могут отличаться. Подробнее см. в документации к базе данных вашего приложения или языка.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может понравиться