Это пошаговое руководство по развертыванию сайта под управлением WordPress 6.1.1 на выделенном сервере со стеком LEMP и менеджером процессов PHP-FPM, а также файрволом и поддержкой протокола HTTPS на основе Ubuntu Server 22.04.1 LTS
Технические требования
Требования к серверу включают несколько элементов: оперативная память, версия базы данных, вычислительная мощность, дисковое пространство и используемый веб-сервер.
Минимальные технические требования для установки WordPress:
Сервер | Nginx или Apache с модулем mod-rewrite |
Дисковое пространство | Не менее 1 GB |
PHP | Версия 7.4 или выше |
База данных | MySQL 5.015 или выше (MariaDB, версия 10.1 или выше) |
RAM | Не менее 512 MB |
CPU | Не менее 1.0 GHz |
В процессе создания этого материала был использован облачный сервер с тарифом Turbo-1 от компании REG.RU. Перед установкой веб-сервера, убедитесь в корректности настроек DNS для домена у вашего хостинг-провайдера.
Установка PHP 8.1
Подключитесь к серверу по SSH под логином root и обновите менеджер пакетов Ubuntu:
apt update
Установите PHP, менеджер процессов PHP-FPM и модуль для MySQL:
apt install php8.1-fpm php-mysql
Установите обязательные модули для корректной работы WordPress:
apt install php-curl php-json php-gd php-mbstring php-intl php-bcmath php-bz2 php-readline php-zip php-xml php-xmlrpc php-soap php-imagick
Проверьте корректность установки PHP:
php -v
Установка Nginx
Для стабильной работы WordPress установка дополнительных модулей в Nginx не требуется. Вы можете выполнить автоматическую установку сервера из репозитория Ubuntu или собрать его в ручную.
Вариант 1: автоустановка
Для установки сервера Nginx в Ubuntu, выполните:
apt install nginx
Вариант 2: сборка из исходников
Перейдите в папку:
cd /usr/local/src/
Разрешите загрузку deb-src, удалив символ комментария #
:
nano /etc/apt/sources.list
Обновите менеджер пакетов Ubuntu:
apt update
Скачайте исходники Nginx:
apt source nginx
Установите набор инструментов dpkg-dev:
apt install dpkg-dev
Установите зависимости для сборки:
apt build-dep nginx -y
Перейдите в директорию:
cd /usr/local/src/nginx-*/
Соберите пакет:
dpkg-buildpackage -b -uc -us
Проверьте наличие пакета на диске:
ls /usr/local/src/*.deb
Установите Nginx и проверьте его статус:
dpkg -i /usr/local/src/*.deb
systemctl status nginx
Настройка конфигурации
Создайте корневую директорию для сайта, где example.com
— его доменное имя:
mkdir -p /var/www/example.com/html
Добавьте конфигурацию Nginx c поддержкой менеджера процессов PHP-FPM:
nano /etc/nginx/sites-available/example.com.conf
Cодержание nginx.conf:
upstream example-php-handler {
server unix:/var/run/php/php8.1-fpm.sock;
}
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example.com/html;
index index.php;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass example-php-handler;
}
}
Создайте символьную ссылку на файл конфигурации для включения сайта:
ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/sites-enabled/
Для проверки синтаксиса конфигурации выполните:
nginx -t
Перезагрузите сервер:
systemctl restart nginx
Настройка протокола HTTPS
Для включения поддержки HTTPS, потребуется выпуск SSL-сертификата для домена и настройка перенаправлений на сервере.
Создайте ключ не менее 2048 бит:
openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Запишите параметры безопасности:
nano /etc/nginx/snippets/ssl-params.conf
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_session_tickets off;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
add_header Strict-Transport-Security "max-age=63072000" always;
Установите утилиту Snap:
apt install snapd
snap install core
Установите certbot:
snap install --classic certbot
Создайте символьную ссылку:
ln -s /snap/bin/certbot /usr/bin/certbot
Начните процесс получения сертификата в соответствии с конфигурацией сервера:
certbot certonly --nginx
Выполнение сценария:
- Enter email address (used for urgent renewal and security notices)
- Укажите действительный адрес эл. почты для получения уведомлений.
- You must agree in order to register with the ACME server. Do you agree?
Y
- Which names would you like to activate HTTPS for?
- 1 2
Измените конфигурацию Nginx для поддержки протокола HTTPS:
nano /etc/nginx/sites-available/example.com.conf
Cодержание nginx.conf:
upstream example-php-handler {
server unix:/var/run/php/php8.1-fpm.sock;
}
server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://example.com$request_uri;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name www.example.com;
return 301 https://example.com$request_uri;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include snippets/ssl-params.conf;
}
server {
listen 443 ssl;
listen [::]:443 ssl;
server_name example.com;
root /var/www/example.com/html;
index index.html index.php;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
include snippets/ssl-params.conf;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass example-php-handler;
}
}
Для проверки синтаксиса конфигурации выполните:
nginx -t
Перезагрузите сервер:
systemctl restart nginx
Создайте в корневой директории файл index.php:
nano /var/www/example.com/html/index.php
<?php
phpinfo();
?>
Откройте сайт и убедитесь, что сервер использует в качестве API — FPM/FastCGi:
А затем удалите файл:
rm /var/www/example.com/html/index.php
Установка MySQL Server 8
Установите MySQL Server:
apt install mysql-server
Начните новый сеанс:
mysql
Задайте пароль для пользователя root, где password
— пароль не менее чем из 8 символов с использованием цифр, смешанного регистра и специальных символов:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'password';
Завершите сеанс:
exit
Запустите сценарий оболочки для настройки параметров безопасности:
mysql_secure_installation
Выполнение сценария:
- Enter password for user root:
- Введите пароль пользователя root.
- Would you like to setup VALIDATE PASSWORD component?
- Y
- There are three levels of password validation policy:
- 2
- Change the password for root?
N
- Do you wish to continue with the password provided:
Y
- Remove anonymous users:
Y
- Disable root login remotely:
Y
- Remove test database and access to it:
Y
- Reload privilege tables now:
Y
Проверьте корректность установки MySQL:
systemctl status mysql
Создание базы данных
Начните новый сеанс:
mysql -p
Создайте новую базу данных, где database_name
— имя базы данных:
CREATE DATABASE database_name DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Создайте нового пользователя, где database_user
— имя пользователя, user_password
— пароль:
CREATE USER 'database_user'@'localhost' IDENTIFIED BY 'user_password';
Предоставьте пользователю права доступа ко всем таблицам в database_name:
GRANT ALL ON database_name.* TO 'database_user'@'localhost';
Сбросьте привилегии:
FLUSH PRIVILEGES;
Завершите сеанс:
exit
Установка phpMyAdmin
Установите приложение из репозитория:
apt install phpmyadmin
Выполнение сценария:
- Web server to reconfigure automatically?
- Изменение конфигурации не требуется, наведите курсор на
<ОК>
нажатием клавишиTab
и нажмитеEnter
.
- Configure database for phpmyadmin with dbconfig-common?
<YES>
- MySQL application password for phpmyadmin:
- Задайте пароль и нажмите
<ОК>
.
- Password confirmation:
- Повторите пароль и нажмите
<ОК>
.
В случае возникновения ошибки ERROR 1819 (HY00), выберите пункт ignore
:
Для исправления ошибки: отключите компонент проверки паролей или понизьте уровень требований в MySQL. После установки phpMyAdmin восстановите прежние настройки.
Создайте символьную ссылку:
ln -s /usr/share/phpmyadmin/ /var/www/example.com/html/
Наберите адрес phpMyAdmin в адресной строке браузера и авторизуйтесь под логином root:
https://example.com/phpmyadmin
Установка Uncomplicated Firewall
Если в вашем образе Ubuntu Server утилита UFW уже установлена, включите файрвол и разрешите сервисы: Nginx Full, OpenSSH.
В иных случаях, установите утилиту для конфигурирования межсетевого экрана:
apt install ufw
Добавьте Nginx в список приложений доступных для использования. Для этого создайте файл:
nano /etc/ufw/applications.d/nginx
Запишите конфигурацию:
[Nginx HTTP]
title=Web Server
description=Enable NGINX HTTP traffic
ports=80/tcp
[Nginx HTTPS] \
title=Web Server (HTTPS) \
description=Enable NGINX HTTPS traffic
ports=443/tcp
[Nginx Full]
title=Web Server (HTTP, HTTPS)
description=Enable NGINX HTTP and HTTPS traffic
ports=80,443/tcp
Добавьте OpenSSH в список приложений UFW. Для этого создайте файл:
nano /etc/ufw/applications.d/open-ssh-server
[OpenSSH]
title=Secure shell server, an rshd replacement
description=OpenSSH is a free implementation of the Secure Shell protocol.
ports=22/tcp
Проверьте список доступных приложений:
ufw app list
Включите файрвол:
ufw enable
- Command may disrupt existing ssh connections. Proceed with operation (y|n)?
Y
Разрешите сервисы:
ufw allow 'Nginx Full'
ufw allow 'OpenSSH'
Проверьте статус:
ufw status
Установка WordPress
Перейдите в корневую директорию сайта:
cd /var/www/example.com/html/
Загрузите последнюю версию WordPress:
wget https://ru.wordpress.org/latest-ru_RU.tar.gz
Выполните процесс разархивирования:
tar -xzvf latest-ru_RU.tar.gz
Перенесите файлы из папки wordpress в корень сайта:
mv wordpress/* /var/www/example.com/html
Удалите загруженный архив и папку wordpress:
rm latest-ru_RU.tar.gz
rm -rf wordpress/
Измените владельца файлов:
chown -R www-data:www-data /var/www/example.com/html
Измените права доступа к файлам и папкам:
find . -type f -exec chmod 644 {} +
find . -type d -exec chmod 755 {} +
Выполните настройку конфигурации WordPress в файле wp-config.php, для этого создайте файл:
cp wp-config-sample.php wp-config.php
nano wp-config.php
И заполните значения констант:
- DB_NAME,
- DB_USER,
- DB_PASSWORD.
Получите уникальный ключи и соли аутентификации по ссылке: https://api.wordpress.org/secret-key/1.1/salt/.
И впишите их в wp-config.php:
Откройте сайт в браузере и выполните установку WordPress, авторизуйтесь в панели администратора и перейдите на экран Здоровье сайта для проверки корректности установки:
В руководстве приведена демонстрационная версия файла конфигурации Nginx для WordPress. Установите заголовки безопасности HTTP, настройте правила кэширования и сжатия статических файлов самостоятельно перед публикацией сайта в Интернете.