Выбор сервера для WooCommerce
В официальной документации WooCommerce требуются PHP 8.3 или новее, MySQL 8.0 или MariaDB 10.6 или новее, HTTPS и лимит памяти WordPress не менее 256 МБ. Объём RAM сервера там не указан. Для небольшого магазина разумно начать с 2–4 ГБ RAM (ориентир, который зависит от магазина). По мере роста числа товаров и заказов растёт и нагрузка на базу данных и процессор.
Магазин ведёт себя не так, как блог. Страницы корзины и оформления заказа у каждого посетителя разные, поэтому кэшировать их нельзя, а заказы весь день записываются в базу данных. При том же трафике магазину поэтому часто нужно больше ресурсов, чем блогу.
Официальные требования
В документе «Требования WooCommerce к серверу» (официальная рекомендация) перечислено:
- PHP 8.3 или новее.
- MySQL 8.0 или новее, либо MariaDB 10.6 или новее.
- Поддержка HTTPS.
- Лимит памяти WordPress 256 МБ или больше.
- Apache или Nginx в качестве веб-сервера.
- Поддержка многобайтовых строк (mbstring), если ваш магазин не на английском. В документе это требование зависит от магазина, и турецкий магазин относится к этой группе.
Цифра 256 МБ — это потолок для одного запроса PHP, а не RAM сервера. При необходимости добавьте эту строку в wp-config.php:
define( 'WP_MEMORY_LIMIT', '256M' );
Старые версии, такие как PHP 7.4, упоминаются в документе лишь как запасной вариант для устаревших систем и не рекомендуются.
Чем магазин отличается от блога
- Страницы, которые нельзя кэшировать. В руководстве по кэшированию WooCommerce сказано не кэшировать страницы корзины, оформления заказа и личного кабинета, потому что они показывают данные конкретного посетителя. Некоторые cookie, например cookie корзины, тоже нужно исключить. Проверьте, что ваш плагин кэширования так и делает.
- Нагрузка на запись. Создание заказов, обновление остатков и хранение сеансов — всё это постоянно записывается в базу данных. Блог пишет редко, а магазин пишет весь день.
- Фоновые задачи. WooCommerce выполняет отложенную работу (письма, вебхуки, платежи по подпискам) через встроенную очередь задач Action Scheduler. Очередь запускается через WP-Cron, поэтому в магазине с малым трафиком задачи могут выполняться с опозданием. Если настроить на сервере задачу cron, запускающую WP-Cron по расписанию (вместе с параметром
DISABLE_WP_CRON), эта зависимость исчезает. Очередь можно посмотреть в разделе WooCommerce > Status > Scheduled Actions.
Данные заказов и HPOS
High-Performance Order Storage (HPOS) хранит заказы в специальных таблицах, созданных для этой задачи, а не в общих таблицах записей WordPress. В новых установках он включён по умолчанию, начиная с WooCommerce 8.2. Старые магазины сами не переключаются. Включить его можно в разделе WooCommerce > Settings > Advanced > Features, а режим совместимости синхронизирует две структуры. Для сервера важно вот что: структура оптимизирована под заказы, но базе данных по-прежнему нужны память и диск.
Стартовый размер
Эти значения — ориентиры, они зависят от магазина. Это не твёрдое обещание.
| Магазин | Начальный объём RAM | vCore |
|---|---|---|
| Новый магазин: мало товаров, мало заказов | 2–4 ГБ | 1-2 |
| Растущий магазин: тысячи товаров, регулярные акции | 4–8 ГБ | 2-4 |
| Нагруженный магазин: частые акции, много плагинов и интеграций | от 8 ГБ | от 4 |
Число плагинов, размер изображений и внезапная нагрузка во время акции важны не меньше, чем число товаров. Кэш объектов (например, Redis) снижает нагрузку на базу данных, но ему нужна память. Начните с малого, затем растите, сверяясь с выводом free -h и top в часы пик.
Частые причины медленной работы магазина
- Крупные несжатые изображения товаров.
- Неиспользуемые плагины и лишние скрипты, которые запускаются на каждой странице.
- Нет кэша объектов, поэтому один и тот же запрос к базе данных выполняется снова и снова.
- Старая версия PHP, которая больше не поддерживается.
Исправление этих причин часто стоит делать раньше увеличения сервера. Когда увеличение не помогает, проблема обычно в настройках.
Бэкапы: одного ежедневного бэкапа может не хватить
В Seturack резервная копия сервера создаётся каждую ночь, хранятся последние 7 дней. В магазине заказы приходят весь день, поэтому одного этого может быть мало. При восстановлении заказы, оформленные после последнего бэкапа, будут потеряны. Делайте дамп базы данных чаще и копируйте его в другое место:
mysqldump --single-transaction -u USER -p DATABASE | gzip > orders-$(date +%F-%H%M).sql.gz
В запланированной задаче не указывайте пароль в командной строке. Используйте файл ~/.my.cnf с правами 600. На готовом сервере с WooCommerce приложение работает в Docker, поэтому команды для базы данных выполняйте внутри контейнера. База данных там — MariaDB. В контейнере может не быть mysqldump, тогда используйте mariadb-dump. Изображения товаров лежат в папке wp-content/uploads, поэтому копируйте и её.
Что подготовить, кроме размера
- HTTPS. Для WooCommerce он обязателен. Готовый сервер с WooCommerce открывается по HTTPS на адресе, построенном на основе вашего IP через sslip.io. Чтобы подключить свой домен, см. эту статью.
- Почта. Установите плагин SMTP, чтобы письма о заказах уходили. При установке отправка почты не настраивается.
- Обновления. После установки обновления WordPress, WooCommerce и ваших плагинов — на вашей стороне. Перед крупным обновлением создайте снимок в панели. Снимок не заменяет бэкап, он лишь позволяет вернуться к состоянию до обновления.
Сервер с предустановленным WooCommerce готов примерно за 3,5–4 минуты, а по мере роста магазина его можно увеличить в панели. Загляните на страницу сервера с WooCommerce.
Комментарии0
Комментариев пока нет
Поделитесь своим мнением первым.
Пожалуйста, войдите или зарегистрируйтесь, чтобы оставить комментарий.