WordPress + NGINX + PHP + MySQL на Ubuntu


Используемые термины: WordPress, NGINX, PHP, MySQL, Ubuntu.
Рассмотрим простой пример, как быстро развернуть веб-сервер для запуска WordPress. Наша система будет работать с использованием следующих компонентов:
- Операционная система Linux Ubuntu Server версии 22.04.
- Веб-сервер NGINX.
- Интерпретатор PHP.
- СУБД MySQL.
Рассмотрим процесс по шагам.
Предварительная настройка системы
Установка и настройка веб-сервера
Оптимизация веб-сервера
Загрузка и установка Wordpress
Настройка SSL
Примеры работы с плагинами из командной строки
Дополнительные материалы
Подготовка системы
Прежде чем перейти к развертыванию системы, выполним некоторые подготовительные работы.
Системные требования
На сайте WordPress изучаем системные требования. Нам необходимо убедиться, что наш сервер будет соответствовать версиям программных продуктов, которые требуются для его работы. Обращаем внимание на:
- Версию PHP.
- Версию СУБД.
- Веб сервер.
Фиксируем данные требования. Нам понадобится эта информация позже.
В нашем примере будет использоваться связка NGINX, PHP 8.3 и MySQL 8.
Обновление кэша репозиториев
В системах на базе DEB обязательно держать репозиторий в обновленном состоянии. В противном случае, мы можем получить ошибку при установке пакетов.
Выполняем команду:
apt update
Ждем немного, пока кэш обновится.
Настройка брандмауэра
Для корректной работы веб-сервера, как минимум, должен быть открыт http-порт. По умолчанию, 80.
В системах на базе DEB «из коробки» фаервол не имеет запрещающих правил и не требует отдельной настройки. Однако, если в вашей инфраструктуре брандмауэр настроен на запрет входящих пакетов, выполняем команду:
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
Если наш сайт будет работать по защищенному протоколу https, также открываем порт 443:
iptables -I INPUT -p tcp --dport 443 -j ACCEPT
Для сохранения правил можно использовать iptables-persistent:
apt install iptables-persistent
netfilter-persistent save
Настройка веб-сервера
Рассмотрим пошагово установку связки NGINX + PHP + MySQL.
NGINX
Мы условились, что будем использовать nginx. Устанавливаем его командой:
apt install nginx
Проверим работу веб-сервера. Открываем браузер и вводим в адресной строке http://<IP-адрес сервера>. В итоге мы должны увидеть заголовок «Welcome to nginx!»:
* в зависимости от Linux, данная страница может иметь различный дизайн.
На данном этапе этого достаточно. Идем дальше.
PHP (установка)
Как говорилось выше, важно учитывать системные требования и установить поддерживаемую версию PHP. Чтобы увидеть, какая версия может быть установлена из настроенных репозиториев, вводим:
apt search --names-only '^php[.0-9]{3}$'
а) Если текущие репозитории предлагают установку версии, которая поддерживаестся WordPress, можно устанавливать компоненты:
apt install php php-fpm php-mysqli php-curl php-dom php-imagick php-mbstring php-zip php-gd php-intl --no-install-recommends --no-install-suggests
б) Если рекомендованной PHP версии в репозитории нет, переходим к инструкции Установка разных версий PHP на Linux Ubuntu. Задаем переменную:
PHP_VER=8.3
* где 8.3 — установленная версия PHP.
А для установки расширений используем команду:
apt install php${PHP_VER}-fpm php${PHP_VER}-mysqli php${PHP_VER}-curl php${PHP_VER}-dom php${PHP_VER}-imagick php${PHP_VER}-mbstring php${PHP_VER}-zip php${PHP_VER}-gd php${PHP_VER}-intl --no-install-recommends --no-install-suggests
NGINX + PHP
Настроим, чтобы веб-сервер nginx запросы к скриптам php передавал на обработчик php-fpm.
Открываем настройку виртуального домена. По умолчанию, это файл:
vi /etc/nginx/sites-enabled/default
Приводим его к виду:
upstream php {
server unix:/run/php/php8.3-fpm.sock;
}
server {
listen 80 default_server;
server_name domain.tld;
root /var/www/wordpress;
index index.php;
client_max_body_size 256M;
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;
}
}
* где upstream - server — путь до сокетного файла обмена данными с php-fpm. Данный путь зависит от версии PHP.
Проверяем конфигурацию nginx и перечитываем ее:
nginx -t && nginx -s reload
Создаем каталог для сайта wordpress:
mkdir -p /var/www/wordpress
Создаем файл index.php:
echo "<?php phpinfo(); ?>" > /var/www/wordpress/index.php
Теперь открываем браузер и переходим по адресу http://<IP-адрес сервера> — мы должны увидеть страницу с полной информацией о php и его расширениях и настройках:
Связка php + nginx готова. Идем дальше.
Сервер баз данных
Для WordPress необходимо использовать MySQL, поэтому мы будем работать с этой СУБД.
Для начала, нам нужно установить репозиторий. Для этого с официального сайта нужно скачать deb файл. Переходим на страницу загрузки, скачиваем файл и переносим его на сервер или смотрим ссылку для загрузки. Если мы посмотрели страницу загрузки, скачиваем с ее помощью deb прямо на сервер командой:
curl -sLO https://dev.mysql.com/get/mysql-apt-config_0.8.34-1_all.deb
* в данном примере мы загружаем файл для версии 8.34-1.
Нам потребуется пакет для шифровки и дешифровки цифровых подписей:
apt install gnupg
Выполняем установку репозитория из загруженного deb-файла:
dpkg -i mysql-apt-config_*_all.deb
Если появятся всплывающие окна с выбором версии, оставляем значения по умолчанию (для LTS).
Обновляем кэш репозитория:
apt update
Для установки MySQL вводим:
apt install mysql-server
Заходим в командную оболочку SQL:
mysql
Создаем базу данных:
> CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
* в нашем примере база будет с именем wordpress.
Создаем пользователя и даем ему полные права на базу:
> CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'wordpress123';
> GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost;
* мы создаем пользователя wordpress с паролем wordpress123.
Выходим из командной оболочки:
> quit
В завершение настройки базы, проверим, что в php есть поддержка подключения к MySQL:
php -i | grep mysqlnd
Мы должны увидеть строку:
mysqlnd => enabled
База данных настроена и готова к работе.
Тюнинт веб-сервера
Рассмотрим некоторые настройки, которые стоит сделать для более стабильной и корректной работы сайта на Wordpress.
Настройка PHP
Открываем файл:
vi /etc/php/${PHP_VER}/fpm/php.ini
И правим следующее:
upload_max_filesize = 256M
...
post_max_size = 256M
...
short_open_tag = On
...
date.timezone = "Europe/Moscow"
...
error_reporting = E_ALL & ~E_NOTICE
* где:
- upload_max_filesize — максимально допустимый размер одного загружаемого файла;
- post_max_size — максимальный объем отправляемых на сервер данных;
- short_open_tag — разрешение использования короткого способа открытия php (<?);
- date.timezone — временная зона, которая будет использоваться веб-сервером, если ее не переопределить настройками в коде php или в файле .htaccess.
- error_reporting — устанавливает уровень отчетности об ошибках, которые должны быть показаны.
Перезапускаем php-fpm:
systemctl restart php${PHP_VER}-fpm
Настройка PHP-FPM
Открываем файл:
vi /etc/php/${PHP_VER}/fpm/pool.d/www.conf
И правим следующее:
pm.max_children = 30
...
pm.start_servers = 12
...
pm.min_spare_servers = 6
...
pm.max_spare_servers = 18
* где:
- max_children — максимальное количество одновременно работающих PHP-процессов.
- start_servers — количество PHP-процессов, запускаемых при старте PHP-FPM.
- min_spare_servers — минимальное количество простаивающих (spare) процессов, ожидающих запросы.
- max_spare_servers — максимальное количество простаивающих процессов.
Перезапускаем php-fpm:
systemctl restart php${PHP_VER}-fpm
Установка WordPress
На этапе выше мы подготовили веб-сервер для работы CMS. Сама установка выполняется путем распаковки скриптов PHP и запуска мастера установки.
Скачиваем на сервер последнюю версию WordPress:
curl -sLO https://ru.wordpress.org/latest-ru_RU.tar.gz
Распакуем скачанный архив в ранее созданный каталог:
tar -zxf latest-ru_RU.tar.gz -C /var/www/wordpress/ --strip-components 1
В качестве владельца для каталога зададим пользователя www-data:
chown -R www-data:www-data /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
Готово.
Работа с плагинами из командной строки
WordPress может быть значительно модернизирован с помощью плагинов. Проще всего с ними работать через графический интерфейс. Однако, в случае необходимости, можно использовать утилиту командной строки wp-cli.
Для начала ее нужно установить. Скачиваем файл:
curl -sLO https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
Даем разрешение файлу на запуск:
chmod +x wp-cli.phar
Переносим его в каталог /usr/local/bin и переименовываем в wp:
mv wp-cli.phar /usr/local/bin/wp
Теперь переходим в каталог, где находится наш сайт:
cd /var/www/wordpress
Можно работать с плагинами. Приведу несколько полезных команд.
1. Показать список плагинов, установленных в системе:
wp plugin list --allow-root
Нужно отметить, что перечень плагинов можно также получить, посмотрев в каталог plugins:
ls wp-content/plugins/
2. Установка плагина:
wp plugin install <plugin-slug> --activate
* где plugin-slug — имя плагина.
Или если нужно установить конкретную версию плагина, добавляем опции version и force:
wp plugin install <plugin-slug> --version=1.2.3 --force
3. Для включения плагина используем команду activate:
wp plugin activate <plugin-slug>
А для отключения — deactivate:
wp plugin deactivate <plugin-slug>
4. Обновить плагины можно командой:
wp plugin update --all
Читайте также
Данный материал также может быть полезен:
1. Как вручную обновить Wordpress.
2. Развертывание Wordpress в Docker и установка его в командной строке.
3. Wordpress + NGINX + PHP + MariaDB на Rocky Linux.
4. Создание или редактирование администратора в различных CMS через базу данных или командную строку.