Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Оцените статью

Пакеты в Ubuntu по умолчанию настроены на работу с серверами, имеющими довольно много оперативной памяти. Нам нужно жёстко ограничить потребление памяти для работы на Mikro VPS. Запускать будем мой блог у которого честно говоря очень мало посетителей 🙂

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

Обновим список пакетов и установим необходимые компоненты:

# apt update && sudo apt upgrade -y
# apt install nginx mysql-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip php-bcmath unzip curl redis-server certbot python3-certbot-nginx -y

Оптимизация MySQL (MariaDB / MySQL 8.0)

MySQL по умолчанию настроен на работу с серверами, имеющими много RAM. Нам нужно жёстко ограничить его потребление памяти.

Создайте файл конфигурации для оптимизации:

# nano /etc/mysql/conf.d/lowmem.cnf

Вставьте следующие параметры (для VPS с 1–2 ГБ RAM). Это отключает Performance Schema (главный «пожиратель» памяти) и уменьшает размеры буферов:

[mysqld]
# Отключаем мониторинг производительности ради экономии ~100–200 МБ RAM
performance_schema = OFF

# Производительность
max_connections = 50
key_buffer_size = 16M
tmp_table_size = 16M
max_heap_table_size = 16M
thread_cache_size = 10

# InnoDB
innodb_buffer_pool_size = 64M
innodb_log_file_size = 16M
innodb_buffer_pool_instances = 1
innodb_flush_method = O_DIRECT

# Кэширование
table_open_cache = 32
table_definition_cache = 64

# Сетевые
net_buffer_length = 16K
read_buffer_size = 16K
read_rnd_buffer_size = 8K
sort_buffer_size = 16K
join_buffer_size = 8K

# Кэширование таблиц
table_open_cache = 64
table_definition_cache = 128

# Сетевые настройки
net_buffer_length = 16K
read_buffer_size = 16K
read_rnd_buffer_size = 8K
sort_buffer_size = 16K
join_buffer_size = 8K

# Логирование
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2

# Другие оптимизации
thread_cache_size = 4

Перезапустите MySQL:

# systemctl restart mysql

Проверка: используйте htop или free -h. Потребление MySQL должно упасть со стандартных ~400–500 МБ до ~100–150 МБ.

Настройка PHP‑FPM

Нам нужно уменьшить количество рабочих процессов PHP, так как каждый процесс занимает около 30–50 МБ RAM.

Откройте конфиг пула (обычно www.conf):

# nano /etc/php/8.3/fpm/pool.d/www.conf

(Если версия PHP другая, например 8.2, измените путь соответственно.)

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

; Вместо static или dynamic используем ondemand
pm = ondemand

; Максимум процессов (всего!). При 2 ГБ RAM ставьте не более 20–30.
pm.max_children = 10

; Сколько детей простаивает перед завершением (секунды)
pm.process_idle_timeout = 10s

; Сколько запросов обработает один процесс перед перезапуском (борьба с утечками памяти)
pm.max_requests = 250

Настройка php.ini (опционально, но полезно):

# nano /etc/php/8.3/fpm/php.ini

Найдите строку memory_limit и установите разумный минимум:

memory_limit = 64M

Для WordPress этого достаточно, если нет тяжёлых плагинов вроде Elementor.

Перезапустите PHP‑FPM:

# systemctl restart php8.3-fpm

Настройка Redis

Redis будет хранить объекты WordPress в памяти.

Редактируем конфиг Redis:

# nano /etc/redis/redis.conf

Найдите параметр maxmemory. Установите лимит, чтобы Redis не съел всю память сервера (например, 64 МБ или 128 МБ):

maxmemory 64mb

Выберите политику вытеснения (eviction policy). Для кэширования WordPress лучше всего подходит allkeys-lru:

maxmemory-policy allkeys-lru

Это значит: когда память кончится, Redis удалит наименее используемые ключи.

Перезапустите Redis:

# systemctl restart redis-server

Важно: убедитесь, что Redis слушает только localhost (bind 127.0.0.1), чтобы избежать доступа извне без пароля.

Настройка Nginx

Создадим конфигурацию сервера для WordPress с поддержкой FastCGI Cache (кеширование HTML‑страниц).

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

# nano /etc/nginx/sites-available/wordpress

Вставьте следующий код (замените мой домен на свой).

server {
    listen 80;
    listen [::]:80;
    server_name interlan.xyz;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name interlan.xyz;

    access_log /var/log/nginx/domain_manager_access.log;
    error_log  /var/log/nginx/domain_manager_error.log;

    ssl_certificate     /etc/letsencrypt/live/interlan.xyz/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/interlan.xyz/privkey.pem;
    ssl_dhparam         /etc/ssl/mail/dhparam.pem;
    ssl_protocols       TLSv1.2 TLSv1.3;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_cache   shared:SSL_domains:10m;
    ssl_session_timeout 10m;

    add_header X-Frame-Options       SAMEORIGIN;
    add_header X-Content-Type-Options nosniff;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";

    client_max_body_size 100M;
    client_body_timeout 300s;
    client_header_timeout 300s;
    proxy_connect_timeout 300s;
    proxy_send_timeout 300s;
    proxy_read_timeout 300s;

    root /var/www/interlan.xyz;
    index index.php index.html index.htm;

    # --- БЕЗОПАСНОСТЬ ---
    location = /favicon.ico { log_not_found off; access_log off; }
    location = /robots.txt { log_not_found off; access_log off; allow all; }
    location ~* \.(css|gif|ico|jpeg|jpg|js|png)$ {
        expires max;
        log_not_found off;
    }

    # --- ОСНОВНОЙ ЛОКЕЙШН ---
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # --- PHP-FPM ---
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;

        # Параметры для снижения нагрузки и памяти:
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;

    }

}

Проверьте синтаксис и перезагрузите конфигурацию:

# nginx -t 
# systemctl reload nginx

Установка WordPress и интеграция Redis

Скачивание WP:

# mkdir -p /var/www/wordpress
# cd /var/www/wordpress
# wget https://ru.wordpress.org/latest-ru_RU.tar.gz
# tar -xzf latest-ru_RU.tar.gz --strip-components=1
# chown -R www-data:www-data /var/www/wordpress
# find /var/www/wordpress -type d -exec chmod 755 {} \;
# find /var/www/wordpress -type f -exec chmod 644 {} \;

Настройка Redis Object Cache (внутри WordPress):

  • Установите плагин «Redis Object Cache» через админку WP.
  • После активации перейдите в Settings → Redis. Если вы оставили настройки Redis по умолчанию (127.0.0.1:6379), он подключится автоматически.
  • Включите кеширование кнопкой Enable Object Cache.

Рекомендация: в файле wp-config.php добавьте константу для надёжности:

define('WP_REDIS_HOST', '127.0.0.1');
define('WP_REDIS_PORT', 6379);

Итоговые рекомендации по памяти

С такой конфигурацией потребление ресурсов будет выглядеть примерно так (на старте):

  • Nginx: ~10–20 МБ (очень лёгкий).
  • PHP‑FPM: ~3 активных процесса по ~30 МБ = ~90 МБ (растёт только при нагрузке благодаря ondemand).
  • MySQL: ~80–120 МБ (благодаря отключённому Performance Schema).
  • Redis: ~10–30 МБ (ограничено жёстко параметром maxmemory).

Итого: около 250–350 МБ RAM на «холостом ходу». Это позволяет комфортно работать на дешёвом VPS с 1 ГБ RAM, оставляя запас для операционной системы и пиковых нагрузок.

Похожие записи

Интеграция Gitea и Keycloak: пошаговое руководство

В современном мире разработки программного обеспечения безопасность и управление доступом к репозиториям кода играют ключевую роль. Gitea — это лёгкая и гибкая платформа для хостинга IT-проектов и их совместной разработки,…

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

VS Code AI Chat — это расширение, которое позволяет разработчикам взаимодействовать с моделями искусственного интеллекта (AI) прямо в редакторе Visual Studio Code. В стандартной конфигурации оно работает с OpenAI API,…

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Читать еще статьи

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Установка и оптимизация WordPress на Ubuntu 24.04 (LEMP + Redis) на VPS с ограниченным объёмом RAM

Интеграция Gitea и Keycloak: пошаговое руководство

Интеграция Gitea и Keycloak: пошаговое руководство

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

Настройка VS Code AI Chat для работы со сторонним OpenAI провайдером.

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

ProxyChains специфическая работа с прокси-серверами в UNIX/Linux-системах

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда

Полное руководство по установке и настройке мониторинга с Grafana и Prometheus: от установки до первого дашборда

Резервное копирование баз данных MySQL в Linux: краткое руководство с примерами

Резервное копирование баз данных MySQL в Linux: краткое руководство с примерами