WordPress на VPS: стек, ресурсы и что настроить после переезда

На виртуальном хостинге WordPress работает из коробки: залил файлы и забыл. На своём сервере всё то же самое приходится собрать руками, зато исчезают лимиты, соседи по машине и странные ограничения панели. Проблема в том, что переехавший сайт часто оказывается медленнее, чем был, и владелец делает вывод, что VPS не помог.

Причина почти всегда одна: сервер настроили как обычный веб-сервер, не учитывая специфику WordPress. Разберём, сколько ему реально нужно ресурсов, из чего собрать стек и что обязательно настроить после переезда, чтобы он поехал быстрее, а не медленнее.

Сколько ресурсов нужно

Аппетиты WordPress определяются не посещаемостью как таковой, а числом плагинов и тем, есть ли кеширование.

Что за сайтПамятьОриентир
Блог или визитка, до 15 плагинов2 ГБМладший тариф с запасом
Корпоративный сайт, конструктор страниц4 ГБТиповой выбор
Магазин на WooCommerce8 ГБКорзина и личный кабинет не кешируются
Магазин с большим каталогом16 ГБ и вышеБаза становится узким местом

Два уточнения, которые важнее самих цифр.

Плагины дороже посещаемости. Сайт с тридцатью плагинами и сотней визитов в день съедает больше, чем чистая сборка с тысячей. Каждый плагин выполняется на каждом запросе.

Магазин считается отдельно. У обычного сайта почти все страницы кешируются и отдаются мгновенно. В магазине корзина, оформление заказа и личный кабинет кешироваться не могут, поэтому нагрузка на PHP и базу принципиально выше.

Диск обычно не проблема, но он должен быть быстрым: WordPress постоянно дёргает базу мелкими запросами, и здесь NVMe даёт заметную разницу. Как считать ресурсы под задачу в целом, разобрано в статье про конфигурацию сервера.

Из чего собрать стек

путь запроса к WordPress и на каком слое он должен закончиться.
путь запроса к WordPress и на каком слое он должен закончиться.

Классический набор состоит из четырёх частей.

Веб-сервер. Принимает запросы, отдаёт статику сам и передаёт PHP дальше. Настройка разобрана в статье про Nginx на VPS.

PHP-FPM. Выполняет код WordPress. Ключевой параметр - число одновременных обработчиков: слишком мало, и посетители встают в очередь, слишком много, и кончается память.

База данных. MySQL или MariaDB, разницы для WordPress практически нет.

Кеш страниц. Формально необязателен, фактически определяет всё. Об этом ниже.

Собирать всё это руками не обязательно: панель управления поставит стек за несколько кликов и возьмёт на себя сертификаты и бэкапы. Панель ест ресурсы, но экономит время, и для одного-двух сайтов это разумный размен.

Главное после переезда: кеширование

Вот причина, по которой сайт после переезда бывает медленнее. На хостинге кеш часто включён на стороне провайдера, а на своём сервере его нет, пока вы не поставите.

Работает это так: без кеша каждый визит запускает PHP, который собирает страницу из десятков запросов к базе. С кешем готовая страница отдаётся сразу, не касаясь ни PHP, ни базы. Разница измеряется не процентами, а разами.

Три уровня, и ставить их стоит именно в этом порядке:

  • Кеш страниц. Плагин или кеш на стороне веб-сервера. Даёт основной эффект.
  • OPcache. Хранит скомпилированный PHP-код в памяти. Включается одной настройкой PHP и работает для всего сайта сразу.
  • Кеш объектов. Redis или Memcached для повторяющихся запросов к базе. Нужен магазинам и сайтам с личным кабинетом, где страницы не кешируются целиком.

Что ещё влияет на скорость независимо от WordPress - сжатие, изображения, время ответа сервера - разобрано в статье как ускорить сайт на VPS.

Что настроить обязательно

Четыре вещи, о которых на хостинге не приходилось думать.

Заменить wp-cron. По умолчанию WordPress запускает плановые задачи при заходе посетителя: на популярном сайте это лишняя нагрузка, а на непосещаемом задачи не выполняются вовсе. Правильно отключить встроенный механизм и запускать задачи по расписанию системы.

Ограничить доступ к входу в админку. Страница входа в WordPress перебирается ботами постоянно, это фоновый шум интернета. Достаточно ограничить доступ по адресу или закрыть дополнительной авторизацией на уровне веб-сервера, см. файрвол на VPS.

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

Настроить резервное копирование. На хостинге бэкапы делал провайдер, теперь это ваша задача, и копии должны лежать вне сервера, см. резервное копирование VPS.

Про сам переезд

Порядок переноса сайта с хостинга подробно разобран в статье VPS для сайта, здесь только специфика WordPress.

  • Переносите файлы и базу вместе. База хранит пути и настройки, файлы без неё бесполезны.
  • Проверьте адрес сайта в базе. После переноса он должен указывать на нужный домен, иначе админка уйдёт в бесконечный редирект на старый адрес.
  • Не меняйте домен и сервер одновременно. Сначала переезд, потом смена адреса. Иначе непонятно, что именно сломалось.
  • DNS переключайте последним, когда сайт уже открывается по IP или временному адресу. Как это делается и что такое TTL, разобрано в статье про привязку домена.

Сертификат выпускают после переключения домена, до этого подтверждать нечего, см. SSL-сертификат на VPS.

Частые ошибки

Переезжают без кеша и считают, что VPS не помог. На хостинге кеш был включён провайдером, на своём сервере его надо поставить.

Ставят плагины ускорения поверх проблемы с ресурсами. Если сайту не хватает памяти, кеш это замаскирует лишь отчасти. Сначала проверяют ресурсы, потом оптимизируют.

Оставляют wp-cron по умолчанию. На нагруженном сайте он добавляет работы на каждом визите, на тихом - задачи просто не выполняются.

Не закрывают вход в админку. Перебор паролей идёт круглосуточно, и слабый пароль администратора рано или поздно подберут.

Держат бэкапы плагином на том же сервере. При отказе диска пропадают и сайт, и копии.

Копируют файлы под root. Сайт открывается, но не обновляется и не принимает загрузки: у веб-сервера нет прав на запись.

Частые вопросы

Сколько памяти нужно для WordPress на VPS? Блогу и визитке хватает 2 ГБ, корпоративному сайту 4 ГБ, магазину на WooCommerce от 8 ГБ. Решает не посещаемость, а количество плагинов и наличие кеша.

Что лучше для WordPress: Nginx или Apache? Для типового сайта разница невелика, но Nginx экономнее по памяти на статике, поэтому на небольших серверах чаще берут его.

Нужна ли панель управления? Не обязательна, но для одного-двух сайтов экономит много времени: ставит стек, выпускает сертификаты и делает бэкапы. Взамен занимает часть ресурсов сервера.

Почему после переезда на VPS сайт стал медленнее? Чаще всего потому, что на хостинге работал кеш провайдера, а на новом сервере его не настроили. Кеш страниц плюс OPcache возвращают скорость.

Что делать с wp-cron? Отключить запуск при посещении и добавить задачу в системное расписание. Так плановые задачи выполняются стабильно и не нагружают сайт в часы пик.

Как защитить админку WordPress? Ограничить доступ к странице входа по адресу или закрыть её авторизацией на уровне веб-сервера, а также использовать сильный пароль и двухфакторную аутентификацию.

Потянет ли младший тариф интернет-магазин? Обычно нет. У магазина корзина и оформление заказа не кешируются, поэтому нагрузка на PHP и базу выше, и начинать стоит от 8 ГБ памяти.


Переносите WordPress на свой сервер? VPS на NVMe от 459 руб в месяц - полный root-доступ, любой стек и панель по желанию, площадки в Москве, Казани и Амстердаме. Активация за 3 минуты, первые 7 дней - тестовый период с возвратом средств.