Wordpress + NGINX + PHP + MariaDB на Rocky Linux
Используемые термины: WordPress, NGINX, PHP, MariaDB, Rocky.
Рассмотрим простой пример, как быстро развернуть веб-сервер для запуска Wordpress. Наша система будет работать с использованием следующих компонентов:
- Веб-сервер NGINX.
- Интерпретатор PHP.
- СУБД MariaDB.
Установка и настройка данных компонентов будет выполнено под операционной системой Rocky Linux версии 9.
Предварительная настройка
Развертывание NGINX + PHP + MariaDB
Установка и запуск Wordpress
Настройка шифрования для http
Дополнительные материалы
Подготовка системы
Прежде чем перейти к развертыванию системы, выполним подготовительные работы.
Системные требования
На сайте Wordpress изучаем системные требования. Необходимо убедиться, что наш сервер будет соответствовать версиям программных продуктов, которые требуются для его работы. Обращаем внимание на:
- Версию PHP.
- Версию СУБД.
- Веб сервер.
Фиксируем данные требования. Нам понадобится данная информация позже.
В нашем примере будет рассмотрена связка NGINX, PHP 8.0 и MariaDB 10.5.
Брандмауэр
Для работы веб-сервера нам понадобится порт 80. Открываем его командой:
firewall-cmd --permanent --add-service=http
Применяем настройку:
firewall-cmd --reload
Настройка веб-сервера
Предполагается, что мы будем использовать веб-сервер NGINX, PHP и MariaDB. Рассмотрим установку данных компонентов по очереди.
NGINX
Выполняем установку:
dnf install nginx
Стартуем сервис nginx и разрешаем его автозапуск:
systemctl enable nginx --now
Проверим работу веб-сервера. Открываем браузер и вводим в адресной строке http://<IP-адрес сервера>. В итоге мы должны увидеть заголовок «Welcome to nginx!»:
* в зависимости от версии и типа Linux, данная страница может отличаться. Однако, это должна быть приветственная страница nginx, указывающая, что веб-сервер в рабочем состоянии.
PHP
Устанавливаем PHP и необходимые для работы Wordpress компоненты:
dnf install php php-fpm php-curl php-dom php-imagick php-mbstring php-zip php-gd php-intl
В моем случае была выполнена установке PHP версии 8.0. При желании, мы можем посмотреть это командой:
php -v
Вывод будет, примерно, такого вида:
PHP 8.0.30 (cli) (built: Aug 3 2023 17:13:08) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
with Zend OPcache v8.0.30, Copyright (c), by Zend Technologies
Разрешаем и запускаем php-fpm:
systemctl enable php-fpm --now
NGINX + PHP
Настроим виртуальный домен в NGINX и связку последнего с PHP. Предположим, что у нас сайт будет wordpress.dmosk.ru.
Создадим конфигурационный файл для настройки домена:
vi /etc/nginx/conf.d/wordpress.dmosk.ru.conf
upstream php {
server unix:/run/php-fpm/www.sock;
}
server {
listen 80;
server_name wordpress.dmosk.ru;
root /var/www/wordpress.dmosk.ru;
access_log /var/log/nginx/wordpress.dmosk.ru_access_log;
error_log /var/log/nginx/wordpress.dmosk.ru_error_log;
index index.php;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_intercept_errors on;
fastcgi_pass php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
expires max;
log_not_found off;
}
}
* за основу данной конфигурации взят пример с официальной страницы wordpress. Необходимо обратить внимание на следующее (выделено желтым):
- server_name — имя домена, на котором будет работать сайт Wordpress.
- root — путь до директории на сервере, где будут находиться скрипты сайта.
- access_log — путь до логов доступа.
- error_log — путь до логов с ошибками.
Проверяем конфигурацию nginx и перечитываем ее:
nginx -t && nginx -s reload
Создаем каталог, в котором должны находиться файлы Wordpress (то, что мы указали в директиве root):
mkdir -p /var/www/wordpress
Создадим в данном каталоге скрипт index.php:
echo "<?php phpinfo(); ?>" > /var/www/wordpress/index.php
* скрипт будет выводить информацию о PHP.
Открываем браузер и вводим адрес сайта (тот, что указан в директиве server_name). В итоге мы должны увидеть полную информацию об интерпретаторе PHP:
Так как в нашем примере создан виртуальный домен, необходимо обратиться к порталу, именно, по его имени. Данное имя должно разрешаться в IP-адрес сервера, где мы развернули веб-сервер. Для этого необходимо настроить DNS или использовать локальный файл hosts.
MariaDB
Устанавливаем СУБД и расширение для PHP:
dnf install mariadb-server php-mysqli
Разрешаем автозапуск сервиса mariadb и стартуем его:
systemctl enable mariadb --now
Также перезапустим php-fpm, чтобы появилась информация о расширении работы с mysql:
systemctl restart php-fpm
Заходим в оболочку SQL:
mysql
Создаем базу данных:
> CREATE DATABASE `wordpress` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
* в данном примере создастся база с названием wordpress. Однако, если сайтов на одном сервере будет несколько, лучше давать имена базам в соответствии с названием сайта.
Создадим пользователя и предоставим ему доступ к базе данных wordpress:
> CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'wordpress123';
> GRANT ALL PRIVILEGES ON `wordpress`.* TO 'wordpress'@'localhost';
* мы создадим пользователя wordpress, которому разрешено подключаться только с локального хоста (@localhost) и паролем wordpress123.
Выходим из SQL:
> quit
Проверим, что php видит расширение mysqlnd:
php -i | grep mysqlnd
Среди всего вывода мы должны увидеть такую строку:
mysqlnd => enabled
Веб-сервер готов для установки wordpress.
Установка wordpress
Скачиваем самый свежий архив CMS:
curl -sLO https://ru.wordpress.org/latest-ru_RU.tar.gz
Распаковываем его в каталог, созданный для wordpress:
tar -zxf latest-ru_RU.tar.gz -C /var/www/wordpress/ --strip-components 1
Зададим владельца на распакованные файлы:
chown -R apache:apache /var/www/wordpress
Открываем снова браузер и переходим на страницу сайта. Мы должны увидеть приветственное сообщение от wordpress. Нажимаем кнопку Вперед:
На следующей странице заполняем данные для подключения к базе данных:
* нами были созданы база данных wordpress, пользователь wordpress и пароль wordpress123. Мы не создавали отдельного сервера баз данных, поэтому в качестве его адреса указываем localhost. Префикс базы можно не менять.
Кликаем по Отправить. Если мастер установки успешно подключится к базе, мы должны увидеть следующую страницу. Нажимаем на ней Запустить установку:
Укажем название нашего сайта, а также зададим имя пользователя и пароль для доступа к панели управления:
Готово. Мастер сообщаем, что установка завершена. Переходим по ссылке Войти, чтобы оказаться на странице входа в панель управления:
Вводим логин и пароль для входа в CMS. Переходим на страницу Инструменты - Здоровье сайта:
Необходимо убедиться, что нет критических ошибок. При желании, можно выполнить рекомендации системы.
Настройка https
Для настройки https нам нужно:
- Поменять URL в Wordpress.
- Получить сертификат.
- Настроить NGINX.
- Открыть порт в брандмауэре.
Заходим в панель администрирования CMS. Переходим в Настройки - Общие:
Меняем настройки для:
- Адрес WordPress (URL).
- Адрес сайта (URL).
Необходимо заменить http на https. Нажимаем Сохранить.
Получаем сертификат одним из способов:
- Купить.
- Получить бесплатно в Let's Encrypt.
- Сгенерировать самоподписанный (подходит только для тестирования).
Файлы сертификата должны быть скопированы на сервер. После открываем конфигурационный файл nginx:
vi /etc/nginx/conf.d/wordpress.dmosk.ru.conf
Вносим изменения (выделено желтым):
...
server {
listen 80;
listen 443 ssl;
...
if ($scheme = 'http') {
return 301 https://$host$request_uri;
}
ssl_certificate /etc/letsencrypt/live/wordpress.dmosk.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/wordpress.dmosk.ru/privkey.pem;
...
* мы добавили директиву прослушивания 443 порта (listen), настроили редирект с http на https и прописали пути до файлов сертификатов (в вашем случае пути будут другими).
Проверяем корректность настройки nginx и перечитываем конфигурацию:
nginx -t && nginx -s reload
Открываем порт для https:
firewall-cmd --permanent --add-service=https
Применяем настройку:
firewall-cmd --reload
Готово.
Читайте также
Другие полезные инструкции:
1. Как вручную обновить Wordpress.
2. Получение бесплатного SSL сертификата Let's Encrypt.
3. Развертывание Wordpress в Docker и установка его в командной строке.
4. Создание или редактирование администратора в различных CMS через базу данных.