Миграция 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: Подготовка к миграции
- Создайте полную резервную копию вашего сайта (файлы и база данных)
- Разверните VDS сервер с ISP Manager
- Настройте оптимальные параметры PHP
- Установите необходимые расширения PHP
Этап 2: Перенос данных
- Перенесите базу данных с помощью плагина Duplicator
- Выгрузите файлы сайта в архив и загрузите на новый сервер
- Распакуйте архив на новом сервере
- Настройте права доступа к файлам:
# Установка прав 644 для всех файлов find /путь/к/вашему/сайту -type f -exec chmod 644 {} \; # Установка прав 755 для всех директорий find /путь/к/вашему/сайту -type d -exec chmod 755 {} \; # Установка правильного владельца файлов chown -R пользователь:группа /путь/к/вашему/сайту
Этап 3: Настройка и тестирование
- Добавьте домен в ISP Manager
- Отредактируйте hosts-файл для локального тестирования
- Проверьте работу сайта перед сменой DNS
- Установите оптимизирующие плагины для использования расширений 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: Отключение бинарных логов
- Откройте конфигурационный файл MySQL:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
- Найдите секцию
[mysqld]и добавьте строку:skip-log-bin
- Если есть строка
log_bin = ..., закомментируйте её:# log_bin = /var/log/mysql/mysql-bin.log
- Сохраните файл и перезапустите 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 и внешние резервные копии не используют эти логи.
binlog_expire_logs_seconds = 604800
max_binlog_size = 100M
Оптимальные параметры 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 от Бегет. Простата установки и оперативная поддержка.