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