Инфраструктура и серверы/ Redis

Redis и PHP-модуль на сервере с ISPManager

Что ставим

Задача узкая: поднять Redis на сервере с ISPManager и убедиться, что нужная версия PHP видит расширение redis.

Дальше считаю, что Redis нужен локально для сайтов на этом же сервере. Наружу порт 6379 не открываем.

Установка Redis

Debian / Ubuntu

sudo apt update
sudo apt install redis-server
sudo systemctl enable redis-server
sudo systemctl start redis-server
redis-cli ping

Нормальный ответ — PONG.

AlmaLinux / Rocky / CentOS

sudo dnf install redis
sudo systemctl enable redis
sudo systemctl start redis
redis-cli ping

На разных образах systemd-служба может называться redis или redis-server. Если команда не сработала, сначала посмотреть точное имя:

systemctl list-units --type=service | grep -i redis

Базовая настройка Redis

Конфиг обычно лежит в /etc/redis/redis.conf на Debian/Ubuntu или в /etc/redis.conf на RHEL-подобных системах.

Для локального использования проверяю две строки:

bind 127.0.0.1 ::1
protected-mode yes

Если Redis нужен только Laravel-проектам на этом сервере, этого достаточно: сервис слушает localhost и не торчит в сеть. Пароль можно включить дополнительно:

requirepass СЛОЖНЫЙ_ПАРОЛЬ

После правки перезапустить службу:

sudo systemctl restart redis-server

Если служба называется иначе:

sudo systemctl restart redis

Проверка с паролем:

redis-cli
AUTH СЛОЖНЫЙ_ПАРОЛЬ
PING

PHP-модуль через ISPManager

В ISPManager модуль включается для конкретной версии PHP, а не «для сервера вообще». Если сайт работает на PHP 8.3, проверять нужно именно PHP 8.3.

Настройки → Настройки PHP → нужная версия PHP → модуль redis → установить / включить

После включения перезапустить PHP-FPM этой версии. В панели это иногда делается кнопкой перезапуска, через SSH — системной службой.

systemctl list-units --type=service | grep -i php
sudo systemctl restart php83-php-fpm
# или
sudo systemctl restart php8.3-fpm

PHP-модуль через PECL

Если в панели модуля нет, ставлю через PECL той версии PHP, на которой работает сайт. Сначала найти доступные бинарники:

find /opt -name pecl
find /opt -name php

Пример для PHP 8.2:

/opt/php82/bin/pecl install redis
echo "extension=redis.so" | sudo tee /opt/php82/etc/php.d/20-redis.ini

Пример для PHP 8.3:

/opt/php83/bin/pecl install redis
echo "extension=redis.so" | sudo tee /opt/php83/etc/php.d/20-redis.ini

Пути в ISPManager зависят от сборки. Если каталога /opt/php83/etc/php.d нет, сначала найти директорию с ini-файлами:

/opt/php83/bin/php --ini

Не перепутать PHP

Команда php -m может показывать системный PHP, а сайт в ISPManager работать на /opt/php83/bin/php. Проверять нужно оба, если не уверены.

Проверка модуля

Расширение должно появиться в списке модулей нужной версии PHP:

/opt/php83/bin/php -m | grep redis
php -m | grep redis

Если команда ничего не вывела, обычно причина одна из трёх: ini-файл положили не в тот каталог, не перезапустили PHP-FPM или сайт работает на другой версии PHP.

Короткая проверка Redis со стороны PHP:

/opt/php83/bin/php -r '$r = new Redis(); $r->connect("127.0.0.1", 6379); echo $r->ping(), PHP_EOL;'

Если включали пароль:

/opt/php83/bin/php -r '$r = new Redis(); $r->connect("127.0.0.1", 6379); $r->auth("СЛОЖНЫЙ_ПАРОЛЬ"); echo $r->ping(), PHP_EOL;'

Если модуль поставить нельзя

Для Laravel есть запасной вариант — Predis. Он не требует расширения PHP:

composer require predis/predis
REDIS_CLIENT=predis

Я использую этот путь только там, где нет доступа к PHP-модулям. На своём сервере проще и быстрее держать phpredis.

Мини-чеклист

redis-cli ping
systemctl status redis-server
/opt/php83/bin/php -m | grep redis
/opt/php83/bin/php --ini

Теги

Читать дальше