Установка WordPress на Ubuntu 24.04 с Nginx: пошаговая инструкция | AdminWiki

Установка WordPress на Ubuntu с Nginx: Полное руководство для разработчиков

17 декабря 2025 9 мин. чтения #devops #linux #nginx #ubuntu #wordpress #веб-разработка

Представь, что тебе нужно развернуть быстрый и безопасный WordPress-сайт на Ubuntu сервере. В этом руководстве разберём базовый подход к установке WordPress на Ubuntu с использованием Nginx вместо Apache. Мы разберем каждый шаг — от настройки сервера до оптимизации производительности.

Что тебе понадобится перед началом

  • Новый сервер Ubuntu 24.04 LTS с PHP 8.3 из штатных репозиториев; пример не предназначен для обновления уже работающего сайта
  • Доступ по SSH с правами sudo
  • Домен с DNS A/AAAA, указывающими на сервер; удалите лишние AAAA, если IPv6 не настроен
  • Базовые знания командной строки Linux
Важно: Все команды в этом руководстве выполняются от имени пользователя с правами sudo. Если ты используешь root, убери "sudo" из команд.

Шаг 1: Обновление системы и установка базовых пакетов

Если сервер ещё не выбран, для отдельного WordPress-сайта можно рассмотреть VPS в Timeweb Cloud (партнёрская ссылка), сравнив ресурсы, стоимость и бэкапы. Перед изменениями сохрани данные, проверь SSH и консоль восстановления. Сначала обновим пакеты и установим необходимые инструменты:

bash
sudo apt update
sudo apt upgrade -y
sudo apt install -y curl wget gnupg2 software-properties-common

Шаг 2: Установка и настройка Nginx для WordPress

Nginx — наш выбор для высокой производительности. Установим его и настроим базовую конфигурацию:

bash
sudo apt install -y nginx
sudo systemctl start nginx
sudo systemctl enable nginx

Настройка Nginx для WordPress

Создадим конфигурационный файл для нашего сайта. Замени example.com на твой домен:

bash
sudo nano /etc/nginx/sites-available/wordpress

Добавь следующую конфигурацию:

nginx
server {
    listen 80;
    listen [::]:80;
    
    server_name example.com www.example.com;
    root /var/www/wordpress;
    index index.php index.html index.htm;
    client_max_body_size 64m;
    
    location / {
        try_files $uri $uri/ /index.php?$args;
    }
    
    # Запрет исполнения PHP в загрузках должен идти до общего PHP location.
    location ~* /wp-content/uploads/.*\.php$ { deny all; }
    location = /wp-config.php { deny all; }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    location ~ /\.ht {
        deny all;
    }
    
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
    
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires max;
        log_not_found off;
    }
}
Внимание: Не забудь заменить example.com на твой реальный домен и путь к PHP-FPM сокету в соответствии с установленной версией PHP.

Для нового сайта создай symlink, если его ещё нет. Не открывай установщик WordPress посторонним: до завершения настройки ограничь доступ к сайту доверенной сетью или своим IP. При HTTP-проверке Certbot разреши отдельно challenge-путь, не снимая защиту установщика. Проверяем синтаксис:

bash
sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

Шаг 3: Установка MySQL/MariaDB и создание базы данных

WordPress требует базу данных. Установим MariaDB (совместимую с MySQL) и создадим БД:

bash
sudo apt install -y mariadb-server mariadb-client
sudo mysql_secure_installation

Создадим базу данных и пользователя для WordPress:

bash
sudo mariadb
# Следующий SQL-блок выполняется внутри MariaDB, не в shell.

В консоли MariaDB выполни SQL ниже. Замени пароль новым уникальным значением, не используй пример буквально; тот же секрет позже укажи в wp-config.php. Для нового проекта база и пользователь ещё не должны существовать.

CREATE DATABASE wordpress_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wordpress_user'@'localhost' IDENTIFIED BY 'REPLACE_WITH_UNIQUE_PASSWORD';
GRANT ALL PRIVILEGES ON wordpress_db.* TO 'wordpress_user'@'localhost';
EXIT;

Шаг 4: Установка PHP и необходимых расширений

WordPress требует PHP с определенными расширениями. Для Ubuntu 24.04 используем PHP 8.3; проверь совместимость тем и плагинов:

bash
sudo apt install -y php8.3-fpm php8.3-mysql php8.3-curl \
php8.3-gd php8.3-mbstring php8.3-xml \
php8.3-zip php8.3-opcache php8.3-intl

Настройка PHP-FPM для оптимальной производительности

Отредактируем настройки PHP-FPM для лучшей производительности WordPress:

bash
sudo nano /etc/php/8.3/fpm/php.ini

Найди и измени следующие параметры:

ini
memory_limit = 256M
upload_max_filesize = 64M
post_max_size = 72M
max_execution_time = 300
max_input_time = 300
bash
sudo php-fpm8.3 -t && sudo systemctl reload php8.3-fpm

Шаг 5: Установка WordPress

Для нового сайта проверь, что /var/www/wordpress пуст. Не распаковывай архив поверх существующей установки без отдельного плана обновления и бэкапа. Скачай WordPress с официального сайта:

bash
sudo mkdir -p /var/www/wordpress
cd /var/www/wordpress
sudo wget https://wordpress.org/latest.tar.gz
sudo tar -xzvf latest.tar.gz --strip-components=1
sudo rm latest.tar.gz

Настроим права доступа:

bash
sudo chown -R root:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress -type f -exec chmod 644 {} \;
sudo install -d -o www-data -g www-data -m 755 /var/www/wordpress/wp-content/uploads

Настройка wp-config.php

Создадим файл конфигурации WordPress:

bash
cd /var/www/wordpress
sudo cp wp-config-sample.php wp-config.php
sudo chown root:www-data wp-config.php
sudo chmod 640 wp-config.php
sudo nano wp-config.php

Обнови следующие строки с твоими данными:

php
define('DB_NAME', 'wordpress_db');
define('DB_USER', 'wordpress_user');
define('DB_PASSWORD', 'REPLACE_WITH_UNIQUE_PASSWORD');
define('DB_HOST', 'localhost');

Замени существующие восемь define ключей и солей в wp-config.php, не добавляй дубликаты. Сгенерируй уникальные значения на https://api.wordpress.org/secret-key/1.1/salt/):

php
define('AUTH_KEY',         'вставь_свой_уникальный_ключ');
define('SECURE_AUTH_KEY',  'вставь_свой_уникальный_ключ');
define('LOGGED_IN_KEY',    'вставь_свой_уникальный_ключ');
define('NONCE_KEY',        'вставь_свой_уникальный_ключ');
define('AUTH_SALT',        'вставь_свой_уникальный_ключ');
define('SECURE_AUTH_SALT', 'вставь_свой_уникальный_ключ');
define('LOGGED_IN_SALT',   'вставь_свой_уникальный_ключ');
define('NONCE_SALT',       'вставь_свой_уникальный_ключ');

Шаг 6: Настройка SSL/TLS (HTTPS)

Для безопасности настроим SSL с помощью Let's Encrypt:

bash
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d example.com -d www.example.com

Проверь установленный таймер/cron Certbot и тестовое продление. Команда ниже только тестирует процесс, а не создаёт расписание:

bash
sudo certbot renew --dry-run

Шаг 7: Завершение установки через веб-интерфейс

После проверки HTTPS открой https://твой-домен и заверши установку, пока доступ к установщику ограничен. Затем проверь вход администратора и сними временное ограничение для посетителей. Не вводи пароль по открытому HTTP.

Данные для входа в мастер установки:

  • Название сайта: Придумай название
  • Имя пользователя: Не используй "admin"
  • Пароль: Сгенерируй сложный пароль
  • Email: Твой реальный email

Оптимизация производительности WordPress на Nginx

Кэширование в Nginx

open_file_cache кэширует файловые дескрипторы и метаданные, а не HTML WordPress. При необходимости добавь в server-блок и проверь nginx -t перед reload:

nginx
# Добавь в server блок:
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;

Настройка кэширования в WordPress

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

  • WP Rocket (премиум)
  • W3 Total Cache (бесплатный)
  • WP Super Cache (бесплатный)

Мониторинг и обслуживание

Задача Команда Частота
Обновление системы sudo apt update && sudo apt upgrade Еженедельно
Обновление WordPress Администратором через контролируемое развёртывание после бэкапа и теста; код root-owned не обновляется PHP-процессом При выходе обновлений
Проверка логов sudo tail -f /var/log/nginx/error.log При проблемах
Резервное копирование Согласованный дамп MariaDB + файлы сайта и wp-config.php, отдельная защищённая копия вне сервера; проверка восстановления Ежедневно

Для бэкапа останови изменения сайта, загрузки и фоновые задания на время согласованного снимка. Выполни дамп wordpress_db через mariadb-dump, затем сохрани файлы сайта и конфигурацию в закрытом каталоге вне document root. --single-transaction даёт согласованность для InnoDB, но не гарантирует согласованный дамп нетранзакционных таблиц. Проверь код возврата, размер копии и восстановление в отдельную БД/каталог; только после успешной проверки отправляй защищённую копию вне сервера. Расписание выбирай по допустимой потере данных, а не автоматически «раз в день».

Часто задаваемые вопросы (FAQ)

Почему выбирать Nginx вместо Apache для WordPress?

WordPress поддерживает Nginx и Apache. Выбор зависит от конфигурации, кэша, PHP, базы и нагрузки; универсального выигрыша Nginx нет. В этом руководстве используется Nginx с PHP-FPM.

Как настроить мультисайтовость WordPress на Nginx?

Multisite требует включения сети WordPress, выбора поддоменов или подкаталогов, DNS/сертификатов и соответствующих rewrite-правил Nginx. Одного wildcard server_name недостаточно; используй отдельную инструкцию WordPress Multisite и сначала проверь миграцию на копии сайта.

Как оптимизировать загрузку изображений в WordPress на Nginx?

Уменьши размеры и разрешение исходников, используй поддерживаемые современные форматы и responsive images. Gzip/brotli полезны прежде всего для текстовых ресурсов и не заменяют оптимизацию уже сжатых JPEG/PNG/WebP. Проверяй результат по размерам файлов и загрузке страницы.

Как защитить WordPress от брутфорс атак на Nginx?

Ограничение запросов требует двух частей: limit_req_zone объявляется в контексте http, а limit_req с именем этой зоны применяется в нужном контексте server/location. Сохрани существующую обработку PHP через FastCGI: отдельный location для wp-login.php без неё может сломать вход или раскрыть PHP-код. Подбери rate/burst по нагрузке, проверь конфигурацию nginx -t и протестируй вход на копии сайта перед включением; дополнительно используй MFA и защиту учётных записей.

Профессиональный совет: Для продакшн-среды настрой мониторинг (Prometheus + Grafana) и алертинг. Используй CI/CD для автоматического развертывания обновлений WordPress.

Заключение

После проверки HTTPS, входа, загрузки файлов и восстановления бэкапа можно оценивать готовность сайта. Это базовая настройка. Для продакшн-среды обязательно:

  • Настрой firewall, сначала разрешив фактический SSH-порт и проверив второй сеанс; затем доступ 80/443 и план отката
  • Внедри систему резервного копирования
  • Настрой мониторинг ресурсов сервера
  • Регулярно обновляй WordPress и плагины
  • Используй CDN для статического контента

Скорость, безопасность и масштабирование зависят от обновлений, плагинов, ресурсов и измерений нагрузки; одна базовая конфигурация этого не гарантирует. Для высоконагруженных проектов рассмотри возможность добавления кэширующего прокси (Varnish) и балансировщика нагрузки.

Поделиться: