У вас на VPS работает приложение, и вы хотите дать ему быстрый кэш, а заодно место для сессий и очередей. Для этого подходит Redis: он держит данные в оперативной памяти и отвечает быстро. Поставим его, закроем от посторонних, зададим пароль и лимит памяти, чтобы на небольшом сервере он не съел всё, что есть.
Как поставить Redis
Redis это хранилище «ключ и значение»: вы кладёте в него данные под именем и быстро забираете обратно. В репозитории Ubuntu 24.04 есть пакет redis-server (на 14 октября 2026 года Redis 7.0.15), отдельный репозиторий не нужен. Пустой Redis занимает около 13 МБ памяти.
sudo apt update
sudo apt install redis-server
Первая команда обновляет список пакетов. Вторая ставит сервер и клиент redis-cli и запускает службу. Если сервер новый, сначала сделайте первую настройку VPS на Ubuntu.
Проверьте, что служба работает:
sudo systemctl status redis-server
redis-cli ping
Первая команда показывает состояние службы, и в ответе нужна строка active (running). Вторая отправляет серверу проверочный запрос, и ответ PONG значит, что Redis слышит вас.
Где лежат настройки
Основной файл: /etc/redis/redis.conf. После правок службу перезапускают:
sudo systemctl restart redis-server
Новые настройки вступят в силу. Данные в памяти при этом не пропадут, если включено сохранение на диск (о нём ниже).
Строку supervised в файле трогать не нужно. Служба Ubuntu сама запускает Redis с ключом --supervised systemd, так он сообщает systemd о готовности.
Видно ли Redis снаружи
Нет, и так задумано. В пакете Ubuntu в файле указано bind 127.0.0.1 -::1, то есть Redis слушает только адрес самого сервера. Проверьте:
sudo ss -tlnp | grep 6379
ss -tlnp показывает слушающие TCP-порты, а grep оставляет порт 6379. Адрес 127.0.0.1:6379 значит, что снаружи Redis недоступен.
Рядом стоит protected-mode yes. Это защита на случай ошибки в настройках: если Redis без пароля вдруг слушает внешний адрес, он откажет всем, кроме localhost. Оставьте как есть.
Открытый наружу Redis без пароля регулярно находят сканеры. Через него читают и стирают данные, а иногда получают доступ к серверу. Если приложение на том же VPS, не меняйте
bindи не открывайте порт 6379. Нужен внешний доступ: разрешите порт только одному IP в файрволе (sudo ufw allow from 203.0.113.5 to any port 6379 proto tcp, адрес замените на свой), задайте пароль и укажите вbindадрес сервера. О ufw читайте в статье настройка файрвола ufw.
Если приложение живёт рядом с Redis, ничего не открывайте.
Как задать пароль
Даже на localhost пароль полезен, потому что к Redis могут подключиться другие программы на сервере. Откройте файл настроек и найдите строку # requirepass foobared:
sudo nano /etc/redis/redis.conf
requirepass замените-на-длинный-пароль
Уберите # в начале и замените foobared своим паролем. requirepass задаёт общий пароль для всех клиентов. После перезапуска проверка выглядит так:
redis-cli -a 'замените-на-длинный-пароль' ping
-a передаёт пароль, а ответ PONG значит, что он принят. Redis предупредит, что пароль в командной строке небезопасен, ведь его видно в истории команд. Для проверки это допустимо.
Если приложений несколько, удобнее ACL: отдельные пользователи с ограниченными правами. В redis-cli выполните:
ACL SETUSER app on >пароль-приложения ~app:* +@all -@dangerous
Команда создаёт пользователя app. Он включён (on), пароль идёт после >, доступ у него к ключам, чьи имена начинаются на app:, и ко всем командам, кроме опасных (-@dangerous: например, FLUSHALL и CONFIG). Если пользователь полезет к чужому ключу или вызовет опасную команду, получит ошибку NOPERM.
Пользователь, созданный командой, живёт до перезапуска. Чтобы сохранить его, выполните CONFIG REWRITE, и Redis допишет пользователей в redis.conf. Но requirepass задайте до этого шага: если сделать наоборот, Redis запишет в файл пользователя default без пароля, и строка requirepass перестанет действовать.
Как не дать Redis съесть всю память
По умолчанию лимита памяти нет. Если приложение складывает в Redis всё подряд, он растёт, пока систему не остановит ядро. Поэтому задайте потолок в redis.conf:
maxmemory 256mb
maxmemory-policy allkeys-lru
maxmemory ограничивает объём данных, а maxmemory-policy решает, что делать у предела. allkeys-lru удаляет давно не использованные ключи, и это подходит, когда Redis служит кэшем. Если в нём лежат данные, которые нельзя потерять (очередь, сессии), берите noeviction: тогда при заполнении Redis вернёт ошибку записи, а не удалит ключи.
На сервере с 1-2 ГБ разумный лимит 128-512 МБ, но точное число зависит от соседей: базы, сайта, приложения. Запас памяти нужен и системе. Если её не хватает, добавьте файл подкачки.
Что будет с данными после перезагрузки
Redis умеет сохранять данные двумя способами:
- RDB: периодический снимок всех данных в файл
dump.rdb. Включён по умолчанию: снимок раз в час, если изменился хотя бы 1 ключ, раз в 5 минут при 100 изменениях и раз в минуту при 10 000. При обычном перезапуске Redis тоже сохраняет снимок. При аварии теряются данные с последнего снимка. - AOF: журнал каждой записи. Включается строкой
appendonly yes. Теряется меньше, но файл больше и запись чуть медленнее.
Если Redis работает только кэшем, сохранение можно выключить: save "" и appendonly no. Данные лежат в /var/lib/redis/. Копию снимка сделайте так, как описано в статье резервные копии VPS.
Что значат предупреждения в журнале
Redis в Ubuntu пишет свой журнал в файл, а не в журнал systemd. Последние 50 строк:
sudo tail -n 50 /var/log/redis/redis-server.log
tail -n 50 выводит конец файла. Журнал systemd (sudo journalctl -u redis-server) покажет только запуск и остановку службы, подробнее в статье журналы и службы systemd.
Чаще всего встречается предупреждение WARNING Memory overcommit must be enabled!. Оно значит, что при сохранении снимка Redis копирует процесс, и ядро может отказать в памяти. Исправление:
echo 'vm.overcommit_memory = 1' | sudo tee /etc/sysctl.d/99-redis.conf
sudo sysctl --system
Первая команда записывает параметр ядра в файл, чтобы он действовал после перезагрузки. Вторая применяет все настройки sysctl сейчас. Параметр разрешает ядру выдавать память с запасом. На сервере без ограничения maxmemory это может привести к аварийному завершению процессов при нехватке памяти, поэтому лимит из предыдущего раздела нужен.
Как подключить Redis к приложению
Адрес для библиотек выглядит одинаково:
redis://:пароль@127.0.0.1:6379/0
Сначала схема redis://, затем пароль после двоеточия, адрес, порт и номер базы (от 0 до 15). Эту строку подставляют в клиент: redis.from_url() из пакета redis в Python, createClient({ url }) из пакета redis в Node.js, расширение phpredis или библиотеку predis в PHP. Для Node.js см. также Node.js на VPS с pm2. Спецсимволы в пароле (например @ или /) нужно закодировать в процентах, но проще сразу взять пароль из букв и цифр.
Когда Redis не нужен
Он не нужен, если сайт небольшой и тормозит не из-за обращений к базе. Для одного WordPress на 1 ГБ памяти кэш объектов часто даёт мало, а память занимает. Не нужен он и там, где достаточно файлового кэша или таблицы в базе. Если нужен сервер баз данных, посмотрите установку MySQL.
Что делать дальше
Redis стоит на localhost, под паролем и с потолком памяти, так что приложение может класть в него кэш и сессии, не боясь за остальной сервер. Хорошо он живёт на сервере с 2 ГБ памяти и больше. Сравнить тарифы можно в подборе VPS: конфигурации «2 ядра 4 ГБ» сейчас стоят от 439 ₽ до 6 400 ₽ в месяц, цены сверены 22 октября 2026 года.
