Метрика

Настройка VDS сервера для WordPress и WooCommerce

Рубрики:VDS
Автор: Пряхин Станислав
Время прочтения: мин
Комментариев: нет
12.02.2025

Миграция WordPress сайта с WooCommerce на VDS сервер требует не только правильного переноса файлов и базы данных, но и актуальной настройки PHP, базы данных, кэша и PHP-FPM. В этой статье собран практичный чек-лист для WordPress и WooCommerce с учетом PHP 8.4.

Актуализация на 2026 год: для production-сайтов WordPress разумный минимум — PHP 8.3+, а PHP 8.4 уже находится в активной поддержке и поддерживается актуальными версиями WordPress. Перед переключением рабочего магазина на PHP 8.4 обязательно проверьте совместимость темы, WooCommerce, платежных модулей, интеграций доставки, обмена с 1С и кэш-плагинов на копии сайта.

План миграции WordPress на VDS

Этап 1: Подготовка к миграции

  1. Создайте полную резервную копию вашего сайта (файлы и база данных)
  2. Разверните VDS сервер с ISP Manager
  3. Настройте оптимальные параметры PHP
  4. Установите необходимые расширения PHP

Этап 2: Перенос данных

  1. Перенесите базу данных с помощью плагина Duplicator
  2. Выгрузите файлы сайта в архив и загрузите на новый сервер
  3. Распакуйте архив на новом сервере
  4. Настройте права доступа к файлам:
    # Установка прав 644 для всех файлов
    find /путь/к/вашему/сайту -type f -exec chmod 644 {} \;
    
    # Установка прав 755 для всех директорий
    find /путь/к/вашему/сайту -type d -exec chmod 755 {} \;
    
    # Установка правильного владельца файлов
    chown -R пользователь:группа /путь/к/вашему/сайту
                    

Этап 3: Настройка и тестирование

  1. Добавьте домен в ISP Manager
  2. Отредактируйте hosts-файл для локального тестирования
  3. Проверьте работу сайта перед сменой DNS
  4. Установите оптимизирующие плагины для использования расширений PHP

Оптимальные настройки PHP для WordPress с WooCommerce

Параметр Рекомендуемое значение Описание
PHP версия 8.4; минимум 8.3+ Используйте поддерживаемую ветку PHP. Для PHP 8.4 сначала проверьте совместимость темы, плагинов и интеграций на staging-копии.
max_input_vars 50000 Количество переменных ввода, важно для больших форм и каталогов
max_file_uploads 20 Количество файлов, которые можно загрузить за один раз
opcache.memory_consumption 256 Объем памяти для кэша скомпилированного кода в MB
opcache.max_accelerated_files 20000 Максимальное количество файлов в кэше OPcache
opcache.interned_strings_buffer 16 Память для интернированных строк; полезно для крупных WordPress/WooCommerce проектов
session.gc_probability 1 Вероятность запуска сборщика мусора сессий
session.use_strict_mode 1 Усиленная безопасность сессий
realpath_cache_size 8M Размер кэша реальных путей
realpath_cache_ttl 3600 Время жизни кэша реальных путей
max_execution_time 600 Максимальное время выполнения скрипта
max_input_time 600 Максимальное время обработки входных данных
memory_limit 256M–512M Для большинства магазинов достаточно 256M–512M. 1024M ставьте только для тяжелых импортов и после расчета памяти на PHP-FPM процессы.
post_max_size 128M–512M Подбирайте под размер импортов, резервных копий и обмена с 1С. Не завышайте без необходимости.
upload_max_filesize 128M–512M Должно быть не больше post_max_size и соответствовать реальным сценариям загрузки.

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

Для оптимальной работы WordPress с WooCommerce рекомендуется установить следующие расширения PHP:

Расширение Назначение Команда установки
imagick Оптимизация изображений apt install php8.4-imagick
redis Кэширование объектов apt install redis-server php8.4-redis
memcached Альтернативное кэширование apt install memcached php8.4-memcached
intl Поддержка многоязычности apt install php8.4-intl
opcache Кэширование PHP-кода Встроено в PHP, требует настройки
mysqli Работа с базами данных MySQL apt install php8.4-mysqli
mbstring Поддержка многобайтовых строк apt install php8.4-mbstring
curl HTTP-запросы к API, платежным шлюзам и службам доставки apt install php8.4-curl
soap Работа с SOAP API apt install php8.4-soap
xml Обработка XML apt install php8.4-xml
zip Работа с архивами, резервными копиями и импортами apt install php8.4-zip
gd Обработка изображений apt install php8.4-gd

Настройка OPcache для PHP 8.4

Для WordPress и WooCommerce основной прирост дает правильно настроенный OPcache. JIT в PHP 8.4 обычно не ускоряет типовой WordPress-сайт, потому что узкие места чаще находятся в базе данных, кэше объектов, внешних API, шаблонах и плагинах. Включайте JIT только после нагрузочного теста конкретного проекта. Пример настроек для файла /etc/php/8.4/fpm/conf.d/10-opcache.ini:

opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=20000
opcache.validate_timestamps=1
opcache.revalidate_freq=2
opcache.save_comments=1
opcache.jit=off
opcache.jit_buffer_size=0
    

Настройка плагинов WordPress для использования расширений

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

Расширение PHP Рекомендуемые плагины
Redis Redis Object Cache, WP Redis
Memcached W3 Total Cache, WP Rocket
Imagick EWWW Image Optimizer, Imagify, ShortPixel
OPcache WP-Optimize, Perfmatters

Оптимизация MySQL

Шаг 1: Создайте новый файл конфигурации MySQL.

Перейдите в директорию /etc/mysql/mysql.conf.d/ и создайте файл custom.cnf.

Этот файл позволит задать кастомные настройки MySQL без изменения основного конфигурационного файла.

Шаг 2: Добавьте в файл следующее содержимое:

[mysqld]
# Количество соединений
max_connections = 300

# Размер пакетов
max_allowed_packet = 64M

# Таймауты соединений
connect_timeout = 20
wait_timeout = 300
interactive_timeout = 300

# ========================
# Оптимизация InnoDB
# ========================
# Выделяем ~60% памяти под InnoDB буфер (3.5GB из 6GB)
innodb_buffer_pool_size = 3584M

# Количество пулов (1 на каждое ядро)
innodb_buffer_pool_instances = 4

# Размер лога транзакций
innodb_log_file_size = 512M
innodb_log_buffer_size = 64M

# Оптимизация производительности
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = 1
innodb_flush_method = O_DIRECT

# ========================
# Кэширование
# ========================
# Оптимизировано для 4 ядер
table_open_cache = 2048
thread_cache_size = 64

# Размеры временных таблиц
tmp_table_size = 128M
max_heap_table_size = 128M

# ========================
# Оптимизация сортировки
# ========================
sort_buffer_size = 4M
read_buffer_size = 4M
read_rnd_buffer_size = 8M

# ========================
# Логирование медленных запросов
# ========================
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
log_queries_not_using_indexes = 1

# ========================
# Дополнительные оптимизации
# ========================
# Оптимизация для SSD
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000

# Отключение обратного DNS-поиска
skip_name_resolve = 1

# Оптимизация для Join-запросов
join_buffer_size = 4M

# Оптимизация загрузки базы при старте
innodb_buffer_pool_dump_at_shutdown = 1
innodb_buffer_pool_load_at_startup = 1

Шаг 3: Сохраните файл и перезагрузите MySQL.

Выполните следующую команду:

sudo systemctl restart mysql

Важно! Перед внесением изменений убедитесь, что у вас есть резервная копия конфигурационного файла.

Отключение бинарных логов MySQL

Бинарные логи (binlog) в MySQL — это механизм, фиксирующий все изменения базы данных. Они необходимы для репликации и точечного восстановления, но если вы не используете эти функции, binlog-файлы будут только занимать место. В некоторых случаях они могут стремительно «съесть» весь диск — особенно если сайт активно работает с базой данных.

Шаг 1: Проверка, включён ли бинарный лог

Выполните команду:

sudo mysql -e "SHOW VARIABLES LIKE 'log_bin';"

Если результат: log_bin | ON, значит бинарные логи включены.

Шаг 2: Отключение бинарных логов

  1. Откройте конфигурационный файл MySQL:
    sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
  2. Найдите секцию [mysqld] и добавьте строку:
    skip-log-bin
  3. Если есть строка log_bin = ..., закомментируйте её:
    # log_bin = /var/log/mysql/mysql-bin.log
  4. Сохраните файл и перезапустите MySQL:
    sudo systemctl restart mysql

Шаг 3: Проверка отключения

Снова выполните команду:

sudo mysql -e "SHOW VARIABLES LIKE 'log_bin';"

Теперь должно быть: log_bin | OFF.

Шаг 4: Безопасная очистка старых binlog-файлов

Не удаляйте binlog-файлы вручную через rm: так легко повредить индекс бинарных логов или удалить файл, который еще нужен серверу. Используйте штатную очистку MySQL:

sudo mysql -e "PURGE BINARY LOGS BEFORE DATE_SUB(NOW(), INTERVAL 7 DAY);"

Перед очисткой убедитесь, что репликация, point-in-time recovery и внешние резервные копии не используют эти логи.

Совет: Если вы используете репликацию или PITR (point-in-time recovery) — не отключайте бинарные логи. Вместо этого настройте автоудаление:
binlog_expire_logs_seconds = 604800
max_binlog_size = 100M
    
Важно: Убедитесь, что у вас есть доступ к конфигурационным файлам и root-права. Ошибки в конфигурации могут не дать MySQL стартовать.

Оптимальные параметры PHP-FPM для WooCommerce

Шаг 1: Найдите и отредактируйте конфигурационный файл PHP-FPM для конкретного сайта.

В ISPmanager и кастомных конфигурациях он обычно находится по пути:

/etc/php/8.4/fpm/pool.d/your-site.conf

Для интернет-магазинов на WooCommerce с интеграцией 1С критично не количество PHP-процессов, а баланс между PHP-FPM и возможностями MySQL. Избыточное число процессов приводит к 100% загрузке CPU MySQL и росту load average.

Шаг 2: Для сервера с 4 ядрами и 8 GB RAM рекомендуется следующая сбалансированная конфигурация:


pm = dynamic

pm.max_children = 20
pm.start_servers = 6
pm.min_spare_servers = 4
pm.max_spare_servers = 10
pm.max_requests = 500
pm.process_idle_timeout = 10s

request_terminate_timeout = 600s

Шаг 3: Настройки памяти и тайм-аутов PHP (актуально для импорта и обмена с 1С):


php_admin_value[max_execution_time] = 600
php_admin_value[max_input_time] = 600
php_admin_value[memory_limit] = 256M

Шаг 4: Сохраните файл и перезапустите PHP-FPM:

sudo php-fpm8.4 -t && sudo systemctl restart php8.4-fpm

Важно: Не увеличивайте pm.max_children без расчета памяти. Оценка: среднее потребление одного PHP-FPM процесса × pm.max_children должно оставлять запас для MySQL/MariaDB, Redis, веб-сервера и системы. Для WooCommerce избыточное количество процессов часто перегружает базу данных и повышает load average.

Пояснение параметров:

  • pm.max_children = 20 → Максимальное количество PHP-процессов. Значение подобрано так, чтобы не перегружать MySQL при пиковых запросах.
  • pm.start_servers = 6 → Количество процессов при старте PHP-FPM без резкого всплеска нагрузки.
  • pm.min_spare_servers = 4 → Минимальный резерв свободных процессов.
  • pm.max_spare_servers = 10 → Ограничение избыточных простаивающих процессов.
  • pm.max_requests = 500 → Защита от накопления утечек памяти в длительно работающих процессах.
  • request_terminate_timeout = 600s → Безопасный тайм-аут для длительных операций (импорт, синхронизация 1С).
  • pm.process_idle_timeout = 10s → Быстрое освобождение ресурсов при спаде нагрузки.
  • memory_limit = 256M → Оптимальный баланс между стабильностью PHP и общим потреблением RAM.

Настройки конфигурации NGINX под WordPress + Woocommerce


# Оптимизации для WordPress
# Разместите в /etc/nginx/vhosts-resources/xn--e1afgfqo3f.com/custom.conf
# После внесения изменений проверьте корректность конфигураций командой sudo nginx -t

# Заголовки безопасности
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header Content-Security-Policy "default-src * 'unsafe-inline' 'unsafe-eval' data: blob: filesystem:;" always;
add_header Permissions-Policy "" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

# Блокировка XML-RPC (устаревший API, уязвимый к атакам)
location = /xmlrpc.php {
    deny all;
}

# Блокировка выполнения PHP в uploads/ директории
location /wp-content/uploads/ {
    location ~ \.php$ {
        deny all;
    }
}

# Улучшенное кэширование статики
location ~* \.(jpg|jpeg|gif|png|svg|ico|css|js|mp4|woff|woff2|eot|ttf|otf|mp3|ogg|zip|gz|bz2?|rar|swf|pdf|webp)$ {
    expires 365d;
    add_header Cache-Control "public, max-age=31536000, immutable";
}

# ✅ Оптимизация выгрузки товаров из 1С
location ~* ^/(import\.php|import\.xml|offers\.xml|prices\.xml|rests\.xml)$ {
    client_max_body_size 512M; # Увеличиваем лимит загрузки файлов
    proxy_read_timeout 600s;
    proxy_send_timeout 600s;
    fastcgi_read_timeout 600s;
    fastcgi_send_timeout 600s;
    access_log off;
    error_log /var/www/httpd-logs/xn--e1afgfqo3f.com.error.log notice;
}

# ✅ Оптимизация FastCGI для PHP
location ~ \.php$ {
    fastcgi_buffers 64 64k;
    fastcgi_buffer_size 128k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 512k;
    fastcgi_read_timeout 600s;
    fastcgi_send_timeout 600s;
    client_max_body_size 512M;
}

# ✅ Оптимизация админки WordPress
location ~* /wp-admin/ {
    fastcgi_buffers 64 64k;
    fastcgi_buffer_size 128k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 512k;
    fastcgi_read_timeout 600;
    fastcgi_connect_timeout 600;
    fastcgi_send_timeout 600;
}

# ✅ Защита важных файлов WordPress
location ~* "/(\.|wp-config|wp-load|xmlrpc|htaccess|license|readme|backup|dump|db|sql|log|git).*$" {
    deny all;
}

location ~* "\.(sql|bak|old|log|tar|gz|zip|jsp|asp|sh|pl|cgi|htaccess)$" {
    deny all;
}

# ✅ Защита от сканирования сценариев WP
location ~* "(eval\(|eval\/|eval\.php|\/system\/|system32|passwd|boot\.ini)" {
    deny all;
}


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

После установки плагина Redis Object Cache, добавьте следующие строки в файл wp-config.php:


define('WP_CACHE', true);
define('WP_REDIS_HOST', 'localhost');
define('WP_REDIS_PORT', '6379');
define('WP_CACHE_KEY_SALT', '_our_key');


Защита от DDoS-атак

Для оптимальной защиты от DDoS-атак при использовании ISP Manager рекомендуется следующая конфигурация:

Параметр Рекомендуемое значение Описание
Количество запросов в секунду 35-40 Максимальное число запросов с одного IP
Максимальный размер всплеска 150-200 Допустимое кратковременное превышение лимита

Важно: При настройке защиты от DDoS важно не блокировать легитимный трафик. Начните с менее строгих настроек и постепенно ужесточайте их при необходимости.

Проверка и мониторинг после миграции

  • Проверьте версию PHP и модули через панель хостинга, php -v, php -m или временный phpinfo.php. Если создаете phpinfo.php, удалите его сразу после проверки.
  • Настройте логирование ошибок PHP: error_log = /var/www/logs/php_errors.log
  • Регулярно проверяйте журналы на наличие ошибок и предупреждений
  • Используйте инструменты анализа производительности, такие как Query Monitor

Заключение

Правильная настройка PHP 8.4, PHP-FPM, OPcache, базы данных и объектного кэша является критически важным аспектом миграции WordPress с WooCommerce на VDS. Оптимизированные настройки PHP, установка необходимых расширений и соответствующих плагинов WordPress позволят вашему интернет-магазину работать быстро и стабильно даже при высоких нагрузках.

После миграции регулярно проверяйте производительность сайта и при необходимости корректируйте настройки. С актуальным PHP, корректными лимитами PHP-FPM, OPcache, Redis и регулярным мониторингом вы получите более стабильный и быстрый сайт без лишней нагрузки на сервер.

Во всех наших проектах мы решили использовать VDS от Бегет. Простата установки и оперативная поддержка.

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

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

WebCreative Studio Logo

🍪 Мы собираем куки. Без них никак. Они нужны для вашего удобства — сайт просто не сможет нормально работать без них.

Создание сайтов в Донецке
Спасибо! Ваша заявка получена. Мы дадим обратную связь в ближайшее время.