almdev Технический блог

Установка и настройка Redis для Laravel-проектов на сервере с ispmanager
Кэш, сессии, очереди и изоляция нескольких проектов через Redis-базы и префиксы.

Практическая инструкция по установке Redis, подключению PhpRedis или Predis, настройке Laravel и безопасной изоляции нескольких проектов на одном сервере с ispmanager.

Подкатегория: ISPManager

Чтение
8 мин
Технологии / версии
Laravel · ISPManager · Laravel Queue · PhpRedis
17 июн 2026 · 8 мин · 7 просмотров · Ops
Схема Redis-хранилища для нескольких Laravel-проектов на сервере с ispmanager
ISPManager 06/2026

Что будет настроено

Redis часто используют в Laravel для ускорения приложения: кэширования данных, хранения сессий, обработки очередей, rate limiting, временных блокировок, broadcasting и других внутренних механизмов.

Laravel можно подключать к Redis через PHP-расширение PhpRedis или через pure-PHP клиент Predis. Для production обычно лучше использовать PhpRedis: расширение устанавливается на уровне PHP и работает быстрее. Predis остаётся запасным вариантом, если установить PHP-модуль невозможно.

В этой инструкции Redis настраивается как общий локальный сервис для нескольких Laravel-проектов на сервере с ispmanager. Ключевой момент — изолировать проекты друг от друга отдельными Redis-базами и уникальными префиксами ключей.

  • Redis будет доступен локально на 127.0.0.1:6379.
  • Кэш, сессии и очереди разных проектов не должны пересекаться.
  • Для каждого Laravel-проекта нужно явно задать Redis-базы и префикс.

Установка Redis-сервера

Подключитесь к серверу по SSH от root или пользователя с sudo-доступом.

Debian / Ubuntu

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

Если всё работает, Redis вернёт:

PONG

AlmaLinux / Rocky Linux / CentOS

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

Ожидаемый ответ тот же:

PONG

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

Для Laravel-проектов на том же сервере Redis обычно не нужно открывать наружу. Откройте конфигурационный файл Redis.

sudo nano /etc/redis/redis.conf

На RHEL-like системах конфигурация может лежать в другом месте:

sudo nano /etc/redis.conf

Для локального использования оставьте Redis доступным только с localhost:

bind 127.0.0.1 ::1
protected-mode yes

Если хотите дополнительно защитить Redis паролем, добавьте:

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

После изменения конфигурации перезапустите службу:

sudo systemctl restart redis-server

или:

sudo systemctl restart redis

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

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

Установка PHP-модуля Redis в ispmanager

Для Laravel лучше использовать PhpRedis. Это PHP-расширение, которое даёт приложению прямой доступ к Redis. В ispmanager важно установить модуль именно для той версии PHP, на которой работает сайт.

На одном сервере могут одновременно жить PHP 8.1, 8.2, 8.3 или 8.4. Если Laravel-проект работает на альтернативной версии PHP, системный модуль Redis может ему не подойти.

Вариант 1. Через интерфейс ispmanager

  1. Зайдите в ispmanager под root.
  2. Откройте Settings / НастройкиPHP settings / Настройки PHP.
  3. Выберите нужную версию PHP.
  4. Найдите модуль redis.
  5. Установите и включите его.

После установки перезапустите PHP-FPM нужной версии или веб-сервер.

Вариант 2. Установка вручную через PECL

Если модуля Redis нет в интерфейсе ispmanager, его можно поставить вручную.

Debian / Ubuntu:

sudo apt install autoconf gcc make zlib1g-dev

AlmaLinux / Rocky Linux / CentOS:

sudo dnf install autoconf gcc make zlib-devel

Для альтернативных версий PHP в ispmanager PECL обычно запускают из каталога конкретной версии PHP.

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

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

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

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

Пути могут отличаться. Найти доступные версии PHP можно так:

ls /opt/
find /opt -name pecl

После установки перезапустите PHP-FPM нужной версии:

systemctl restart php82-php-fpm

или:

systemctl restart php8.2-fpm

Название службы зависит от ОС и сборки PHP. Подходящие службы можно найти так:

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

Проверьте, что модуль подключился:

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

Если команда выводит redis, PHP-модуль установлен.

Если PhpRedis установить нельзя: Predis

Если нет доступа к установке PHP-расширений, можно использовать Predis:

composer require predis/predis

В .env Laravel укажите:

REDIS_CLIENT=predis

Для production-сервера с несколькими Laravel-проектами лучше всё же использовать PhpRedis, если есть возможность поставить расширение.

Настройка Laravel для Redis

Laravel хранит Redis-настройки в config/database.php, а значения обычно берутся из .env. В стандартной конфигурации есть подключения default и cache, а также параметр prefix, который может формироваться на основе APP_NAME.

Минимальный пример .env:

REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
REDIS_DB=0
REDIS_CACHE_DB=1

Если Redis защищён паролем:

REDIS_PASSWORD=СЛОЖНЫЙ_ДЛИННЫЙ_ПАРОЛЬ

Включите Redis для кэша, очередей и сессий:

CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis

В старых версиях Laravel вместо CACHE_STORE может использоваться:

CACHE_DRIVER=redis

После изменения .env очистите конфигурационный кэш:

php artisan config:clear
php artisan cache:clear

Если на production используется кэширование конфигурации:

php artisan config:cache

Важная настройка для нескольких Laravel-проектов

Если на одном сервере работают несколько Laravel-проектов, нельзя оставлять одинаковые Redis-префиксы и одни и те же базы без понимания последствий. Иначе очистка кэша, очередей или совпадение ключей могут затронуть соседний проект.

Подход 1. Разные Redis database index

Redis по умолчанию имеет несколько логических баз. Для каждого проекта можно выделить свои базы.

APP_NAME=project_one
REDIS_DB=0
REDIS_CACHE_DB=1

APP_NAME=project_two
REDIS_DB=2
REDIS_CACHE_DB=3

APP_NAME=project_three
REDIS_DB=4
REDIS_CACHE_DB=5

REDIS_DB можно использовать для очередей, сессий и default Redis-подключения, а REDIS_CACHE_DB — отдельно для кэша.

Подход 2. Уникальные префиксы ключей

Даже если проекты используют одну Redis-базу, ключи нужно разделять префиксами. В config/database.php обычно есть настройка:

'prefix' => env('REDIS_PREFIX', Str::slug(env('APP_NAME', 'laravel'), '_').'_database_'),

Для каждого проекта задайте уникальный APP_NAME и/или REDIS_PREFIX:

APP_NAME=crm_project
REDIS_PREFIX=crm_project_

APP_NAME=shop_project
REDIS_PREFIX=shop_project_

APP_NAME=blog_project
REDIS_PREFIX=blog_project_

Пример для проекта shop:

APP_NAME=shop

CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis

REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

REDIS_DB=0
REDIS_CACHE_DB=1
REDIS_PREFIX=shop_

Пример для проекта crm на том же сервере:

APP_NAME=crm

CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis

REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

REDIS_DB=2
REDIS_CACHE_DB=3
REDIS_PREFIX=crm_

Пример для проекта blog:

APP_NAME=blog

CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis

REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

REDIS_DB=4
REDIS_CACHE_DB=5
REDIS_PREFIX=blog_

Настройка очередей Laravel через Redis

В .env:

QUEUE_CONNECTION=redis

После этого задания будут попадать в Redis. Запуск worker:

php artisan queue:work redis --queue=default

Для production worker лучше запускать через Supervisor или systemd, чтобы он автоматически перезапускался.

Пример systemd-сервиса:

[Unit]
Description=Laravel Queue Worker - shop
After=network.target

[Service]
User=www-data
Group=www-data
Restart=always
ExecStart=/usr/bin/php /var/www/shop/artisan queue:work redis --sleep=3 --tries=3 --timeout=90
WorkingDirectory=/var/www/shop

[Install]
WantedBy=multi-user.target

Файл можно сохранить как:

/etc/systemd/system/laravel-shop-queue.service

Затем выполните:

sudo systemctl daemon-reload
sudo systemctl enable laravel-shop-queue
sudo systemctl start laravel-shop-queue

Для каждого проекта создавайте отдельный worker и отдельный systemd-сервис: laravel-shop-queue.service, laravel-crm-queue.service, laravel-blog-queue.service.

Сессии, кэш и проверка работы

Сессии через Redis

SESSION_DRIVER=redis
SESSION_LIFETIME=120
SESSION_COOKIE=shop_session

Если несколько проектов используют один домен или поддомены, задавайте разные SESSION_COOKIE, например shop_session и crm_session.

Кэш через Redis

CACHE_STORE=redis

Для старых Laravel-проектов:

CACHE_DRIVER=redis

Очистка кэша конкретного проекта:

php artisan cache:clear

Если у проектов разные REDIS_CACHE_DB и REDIS_PREFIX, эта команда не должна затрагивать кэш других проектов.

Проверка через Laravel

php artisan tinker
Cache::put("redis_test", "ok", 60);
Cache::get("redis_test");

Ожидаемый результат:

"ok"

Проверка Redis напрямую:

redis-cli
KEYS *

Если Redis с паролем:

AUTH СЛОЖНЫЙ_ДЛИННЫЙ_ПАРОЛЬ
KEYS *

На production лучше не использовать KEYS * на больших базах. Для диагностики безопаснее:

SCAN 0

Laravel Horizon и память Redis

Если проект использует Laravel Horizon, Redis обязателен.

composer require laravel/horizon
php artisan horizon:install
php artisan migrate
php artisan horizon

Для production Horizon также лучше запускать через Supervisor или systemd. Для каждого проекта должен быть свой REDIS_PREFIX, иначе Horizon и очереди разных проектов могут смешиваться.

Redis хранит данные в памяти, поэтому важно ограничить потребление RAM:

sudo nano /etc/redis/redis.conf
maxmemory 512mb
maxmemory-policy allkeys-lru

allkeys-lru означает, что при нехватке памяти Redis будет удалять наименее недавно используемые ключи. Для Redis, который используется в основном как кэш, это часто подходящий вариант.

sudo systemctl restart redis-server
redis-cli info memory

Что важно не делать

  • Не используйте один и тот же REDIS_PREFIX для нескольких проектов.
  • Не запускайте все проекты на одной Redis-базе без префиксов.
  • Не открывайте Redis наружу через 0.0.0.0, если в этом нет необходимости.
  • Не храните пароль Redis в публичном репозитории.
  • Не забывайте перезапускать PHP-FPM после установки PHP-модуля Redis.
  • Не забывайте выполнять php artisan config:clear и php artisan config:cache после изменения .env на production.

Быстрый чек-лист

Перед запуском проекта проверьте:

redis-cli ping
php -m | grep redis
php artisan tinker
Cache::put("test", "ok", 60);
Cache::get("test");

Также проверьте .env:

REDIS_CLIENT=phpredis
REDIS_HOST=127.0.0.1
REDIS_PORT=6379
REDIS_DB=уникальная_база
REDIS_CACHE_DB=уникальная_база
REDIS_PREFIX=уникальный_префикс_

CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis

Итог

Redis на сервере с ispmanager можно использовать как общий сервис для нескольких Laravel-проектов. Главное — установить PHP-модуль Redis для нужной версии PHP, подключить Redis в .env и изолировать проекты с помощью разных Redis-баз и уникальных префиксов.

Оптимальная production-схема выглядит так:

REDIS_CLIENT=phpredis
CACHE_STORE=redis
QUEUE_CONNECTION=redis
SESSION_DRIVER=redis
REDIS_PREFIX=project_name_
REDIS_DB=отдельная_база
REDIS_CACHE_DB=отдельная_база

Так Redis можно безопасно использовать одновременно для кэша, очередей, сессий и других механизмов Laravel без конфликтов между проектами.

#laravel #ispmanager #laravel-queue #phpredis #redis