Пакеты в 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, оставляя запас для операционной системы и пиковых нагрузок.




