WordPress + NGINX + PHP + MySQL на Ubuntu

Обновлено Обновлено: Опубликовано Опубликовано:

Используемые термины: WordPressNGINXPHP, MySQLUbuntu.

Рассмотрим простой пример, как быстро развернуть веб-сервер для запуска WordPress. Наша система будет работать с использованием следующих компонентов:

  • Операционная система Linux Ubuntu Server версии 22.04.
  • Веб-сервер NGINX.
  • Интерпретатор PHP.
  • СУБД MySQL.

Рассмотрим процесс по шагам.

Подготовка системы

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

Системные требования

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

  1. Версию PHP.
  2. Версию СУБД.
  3. Веб сервер.

Фиксируем данные требования. Нам понадобится эта информация позже.

В нашем примере будет использоваться связка 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!»:

Заголовок 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 и его расширениях и настройках:

Страница phpinfo для проверки, что мы правильно настроили связку

Связка 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, пользователь wordpress и пароль wordpress123. Мы не создавали отдельного сервера баз данных, поэтому в качестве его адреса указываем localhost. Префикс базы можно не менять.

Кликаем по Отправить. Если мастер установки успешно подключится к базе, мы должны увидеть следующую страницу. Нажимаем на ней Запустить установку:

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

Укажем название нашего сайта, а также зададим имя пользователя и пароль для доступа к панели управления:

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

На последнем этапе система должна отобразить информацию об успешном завершении установки CMS:

Установка Wordpress завершена

Напоследок, зайдем в панель управления и перейдем в Инструменты - Здоровье сайта:

Проверка качества настройки сервера через панель администрирования Wordpress

Если во время проверки будут обнаружены ошибки, лучше их исправить.

Настройка https

Для настройки https нам нужно:

  • Поменять URL в WordPress.
  • Получить сертификат.
  • Настроить NGINX.
  • Открыть порт в брандмауэре.

Заходим в панель администрирования CMS. Переходим в Настройки - Общие:

Заходим в общие настройки wordpress

Меняем настройки для:

  • Адрес WordPress (URL).
  • Адрес сайта (URL).

Необходимо заменить http на https. Нажимаем Сохранить.

Получаем сертификат одним из способов:

  1. Покупаем.
  2. Получаем бесплатно от Let's Encrypt.
  3. Генерируем самоподписанный (подходит только для тестирования).

Файлы сертификата должны быть скопированы на сервер. После открываем конфигурационный файл 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 через базу данных или командную строку.

# Ubuntu # Интернет # Серверы
Дмитрий Моск — частный мастер
Была ли полезна вам эта инструкция?

Да            Нет