Налаштування Redis Object Cache для WordPress



Оптимізація швидкості завантаження – це те, з чим стикається кожен власник сайту на WordPress. У цій статті я поділюся власним досвідом того, як назавжди позбутися критичного зауваження “You should use a persistent object cache” у розділі Site Health.

Вступ

Нещодавно, перевіряючи стан свого сайту, я помітив рекомендацію від WordPress щодо використання об’єктного кешування. Проблема в тому, що без такого кешу WordPress змушений звертатися до бази даних MySQL при кожному завантаженні сторінки, щоб дістати налаштування, метадані та пости. Це створює зайве навантаження і сповільнює відгук сервера.

Оскільки мій WordPress працює в Docker-контейнерах, я вирішив, що найправильнішим кроком буде запустити Redis як окремий сервіс у тій же мережі. Це дозволило перенести “важкі” запити з диска в оперативну пам’ять, зробивши роботу сайту, особливо його адмін-панелі, набагато приємнішою.

Підготовка

Для того, щоб інтегрувати Redis у WordPress в Docker-середовищі, мені довелося пройти через кілька ключових етапів. Оскільки стандартні образи WordPress не містять необхідних інструментів для роботи з Redis на рівні ядра PHP, ми спочатку створимо власну збірку контейнера. Потім ми додамо новий сервіс у нашу інфраструктуру, налаштуємо сам WordPress для роботи з кешем та перевіримо результат через консоль і панель керування.

Розширення PhpRedis

Офіційний образ wordpress:fpm-alpine, який я використовую, максимально полегшений, тому розширення для Redis у ньому немає. Щоб це виправити стаціонарно, я створив файл Dockerfile у папці проекту із наступним кодом:

FROM wordpress:fpm-alpine

RUN apk add --no-cache $PHPIZE_DEPS pcre-dev \
    && pecl install redis \
    && docker-php-ext-enable redis \
    && apk del $PHPIZE_DEPS pcre-dev

Розширення PhpRedis яке написане на мові C, буде вшито в ядро WordPress, що набагато швидше, ніж використання звичайних PHP-бібліотек.

Як налаштувати та запустити вордпрес в докер контейнері я описав в попередній статті доступній за посиланням: Перенесення WordPress в Docker також в статті приведено загальний код файлу docker-compose.yml.

Перед виконанням збірки, необхідно ще відредагувати файл docker-compose.yml, додавши сервіс Redis та вказавши WordPress використовувати мою збірку:

...  
  redis:
    image: redis:alpine
    container_name: ostrich_redis
    restart: unless-stopped
    networks:
      - ostrich_net
  wordpress:
    build: .
    depends_on:
      - db
      - redis
...

Для того, щоб зміни вступили в силу, я перезібрав контейнери командою:

docker compose up -d --build[+] Building 42.3s (8/8) FINISHED

На цьому етапі контейнер вже містить розширення PhpRedis. Залишилося налаштувати тепер сам вордпрес.

Підключення Redis

Запуск контейнера це добре, проте необхідно сповістити вордпрес про те, що Redis вже є і його треба використовувати. Ці зміни краще внести до встановлення плагіна. Плагін не зможе з’єднатися з контейнером Redis, навіть якщо він запущений. Додавання конфігурації безпосередньо у wp-config.php – це стандартний шлях для WordPress, який гарантує відсутність помилок валідації в Docker.

Файл wp-config.php знаходиться в примонтованій директорії докера. Для правильного редагування необхідно додати визначення підключення Redis. Зміни краще внести перед фразою /* That’s all, stop editing! Happy publishing. */:

define( 'WP_REDIS_HOST', 'ostrich_redis' );
define( 'WP_REDIS_PORT', 6379 );
define( 'WP_CACHE', true );

Зміни застосуються при наступному зверненні до сайту, адже вордпрес щоразу перечитує цей файл автоматично.

Плагін Redis Object Cache

Плагін Redis Object Cache (від автора Till Krüss) є фактичним стандартом для інтеграції WordPress із Redis. На відміну від громіздких плагінів кешування «все-в-одному», він виконує одну конкретну роль: інсталює в папку /wp-content/ спеціальний файл-дропін object-cache.php, який перехоплює стандартні запити WordPress до бази даних і перенаправляє їх до пам’яті Redis. Це легке та стабільне рішення, яке підтримує розширення PhpRedis для максимальної швидкості та має вбудовані механізми безпеки, які запобігають падінню сайту, якщо сервер Redis раптом стане недоступним.

Для встановлення та активації плагіна необхідно виконати наступні дії:

  1. Зайти в адмінку WordPress.
  2. Знайти плагін Redis Object Cache, встановити його та активувати.
  3. На сторінці налаштувань плагіна натиснути “Enable Object Cache”.
  4. В результаті статус повинен змінитися на Connected.

Перевірка роботи

Якщо плагін показує що зв’язок встановлено та інстанс редіса доступний, то це і є результат успішного підключення, проте можна додатково ще зробити перевірку на стороні сервера, виконавши наступні команди і отримавши очікуваний результат:

Перевірка redis

docker exec -it ostrich_redis redis-cli ping
PONG

перевірка наявності php модуля

docker exec -it ostrich_wp php -m | grep redis
redis

Сам плагін починає збирати статистику та виводити її у вкладці Metrics

Висновки

Це був чудовий досвід оптимізації. Я не лише позбувся попередження від WordPress, а й зробив свій стек технологій більш професійним. Використання Redis у Docker дозволяє моєму сайту працювати швидше, споживати менше ресурсів бази даних і легше витримувати навантаження. Якщо ви також використовуєте Docker для своїх проектів – обов’язково спробуйте цей метод, він того вартий!