Доброго времени суток! Сегодня я продемонстрирую вам, как быстро и эффективно настроить Redis с помощью Docker Compose. Этот процесс займет всего несколько минут, но в результате вы получите полноценную базу данных Redis, работающую в изолированном Docker контейнере. Важные компоненты, такие как данные кэша и конфигурации, будут сохранены на вашей локальной машине благодаря использованию томов (volumes), что обеспечит надежность и доступность данных.
Что такое Redis и зачем он нужен
Redis (Remote Dictionary Server) — это высокопроизводительная система управления базами данных типа «ключ-значение», работающая в оперативной памяти. Redis часто используется для кэширования данных, управления сессиями, очередей сообщений и в качестве базы данных NoSQL для быстрого доступа к данным.
Основные преимущества Redis:
-
Скорость: работа в памяти обеспечивает быструю обработку запросов.
-
Простота: простая модель данных «ключ-значение» с поддержкой сложных структур данных.
-
Гибкость: поддержка различных структур данных, таких как строки, списки, множества, хеши и т.д.
-
Масштабируемость: легкость масштабирования и поддержки репликации.
Подготовка
Прежде чем приступить к развертыванию Redis на вашем локальном компьютере или VPS сервере, необходимо установить Docker и Docker Compose.
Если вы новичок в использовании Docker, рекомендую начать с установки Docker Desktop на вашем локальном компьютере. Это приложение автоматически установит Docker и Docker Compose, облегчив первоначальное знакомство с контейнеризацией.
Шаг 1: Создание Docker Compose файла
Создаем пустую директорию и переходим в нее. В созданной директории создадим файл docker-compose.yaml
, который опишет наш сервис Redis. Вот пример моего файла:
version: '3.9' services: redis: image: redis:latest container_name: redis_container environment: - REDIS_PASSWORD=${REDIS_PASSWORD} - REDIS_USER=${REDIS_USER} - REDIS_USER_PASSWORD=${REDIS_USER_PASSWORD} ports: - "6380:6379" volumes: - ./redisdata:/data deploy: resources: limits: cpus: '0.50' memory: 512M reservations: cpus: '0.25' memory: 256M command: > sh -c ' mkdir -p /usr/local/etc/redis && echo "bind 0.0.0.0" > /usr/local/etc/redis/redis.conf && echo "requirepass $REDIS_PASSWORD" >> /usr/local/etc/redis/redis.conf && echo "appendonly yes" >> /usr/local/etc/redis/redis.conf && echo "appendfsync everysec" >> /usr/local/etc/redis/redis.conf && echo "user default on nopass ~* +@all" > /usr/local/etc/redis/users.acl && echo "user $REDIS_USER on >$REDIS_USER_PASSWORD ~* +@all" >> /usr/local/etc/redis/users.acl && redis-server /usr/local/etc/redis/redis.conf --aclfile /usr/local/etc/redis/users.acl ' healthcheck: test: ["CMD", "redis-cli", "-a", "$REDIS_PASSWORD", "ping"] interval: 30s timeout: 10s retries: 5 restart: unless-stopped tty: true stdin_open: true
Создаем файл .env в той же дирректории и добавляем в него такие параметры (данные указывайте свои):
REDIS_PASSWORD=my_redis_password REDIS_USER=my_user REDIS_USER_PASSWORD=my_user_password
Краткий обзор Docker Compose файла
-
Версия:
-
version: '3.9'
: Используется версия 3.9 формата Docker Compose.
-
-
Сервис Redis:
-
image: Используется образ
redis:latest
. -
container_name: Созданный контейнер будет иметь имя
redis_container
. -
environment: Переменные окружения:
-
REDIS_PASSWORD
: Пароль для Redis (имя пользователя по умолчанию — default). -
REDIS_USER
: Имя нового пользователя. -
REDIS_USER_PASSWORD
: Пароль для нового пользователя.
-
-
ports: Проброс порта 6380 (локальная машина, сервер) на 6379 (порт внутри Redis контейнера) для доступа к Redis (для доступа необходимо будет указывать порт 6380).
-
volumes: Хранение данных Redis в локальной директории
./redisdata
. Таким образом, ваши данные будут сохраняться в локальной папке, и вы не потеряете их, даже если контейнер Redis случайно удалится или вы потеряете к нему доступ. Главное — обеспечить сохранность данных из папкиredisdata
-
deploy: Ограничения и резервирование ресурсов:
-
Лимиты: 0.50 CPU и 512M памяти.
-
Резервирование: 0.25 CPU и 256M памяти.
-
-
command:
-
mkdir -p /usr/local/etc/redis
: Эта команда создает директорию/usr/local/etc/redis
, если она не существует. Флаг-p
позволяет создавать вложенные директории при необходимости. -
echo "bind 0.0.0.0" > /usr/local/etc/redis/redis.conf
: Здесь мы добавляем строку"bind 0.0.0.0"
в файлredis.conf
. Это позволяет Redis прослушивать соединения со всех IP-адресов. -
echo "requirepass $REDIS_PASSWORD" >> /usr/local/etc/redis/redis.conf
: Эта команда добавляет строку с паролем в файлredis.conf
. Пароль берется из переменной окружения$REDIS_PASSWORD
. -
echo "appendonly yes" >> /usr/local/etc/redis/redis.conf
: Здесь мы включаем режим журнала (append-only mode) для сохранения данных на диск. -
echo "appendfsync everysec" >> /usr/local/etc/redis/redis.conf
: Эта строка указывает Redis выполнять синхронизацию журнала с диском каждую секунду. -
echo "user default on nopass ~* +@all" > /usr/local/etc/redis/users.acl
: Здесь мы создаем файлusers.acl
и добавляем правило доступа для пользователя по умолчанию. Он может подключаться без пароля и имеет доступ ко всем командам (~* +@all
). -
echo "user $REDIS_USER on >$REDIS_USER_PASSWORD ~* +@all" >> /usr/local/etc/redis/users.acl
: Эта команда добавляет правило доступа для конкретного пользователя (с именем, указанным в переменной$REDIS_USER
). Пользователь должен предоставить пароль из переменной$REDIS_USER_PASSWORD
. -
redis-server /usr/local/etc/redis/redis.conf --aclfile /usr/local/etc/redis/users.acl
: Здесь мы запускаем Redis-сервер с указанным файлом конфигурации и файлом ACL.
-
-
healthcheck: Проверка здоровья сервиса:
-
Команда
redis-cli ping
с паролем. -
Интервал 30 секунд, таймаут 10 секунд, 5 попыток.
-
-
restart: Политика перезапуска
unless-stopped
. -
tty и stdin_open: Включены для интерактивного доступа.
-
Запуск Redis
Чтобы развернуть Redis с помощью этого файла Docker Compose, выполните следующую команду в каталоге с файлом docker-compose.yaml
(будет одинаково работать, как на VPS, так и на вашей локальной машине):
docker-compose up -d
Эта команда запустит контейнер Redis в фоновом режиме (-d
) на основе настроек, указанных в файле docker-compose.yaml
.
Если контейнер был развернут на локальной машине, то в качестве хоста можно использовать «localhost». В ином случае, как у меня, так как я развернул контейнер на VPS сервере, используйте IP-адрес VPS сервера.
Ссылка для подключения с логином и паролем будет иметь такой вид:
redis://username:password@193.3.298.206:6380/0
Обратите внимание на формат ссылки. Она состоит из нескольких частей:
-
redis:// — указываем что подключаемся к Redis
-
HOST — это или IP-адрес сервера или «localhost», если запустили Redis на локальной машине
-
6380 — это порт, который вы установили в docker-compose.yaml файле
-
0 — это номер базы данных. По умолчанию в Redis баз данных 16 штук (от 0 до 15). Число можно увеличить через config.
Вот пример подключения через python (библиотека redis,
которую можно установить комндой pip/pip3 install redis
) с указанием параметров подключения:
Импортируем Redis в python:
import redis
Создаем объект Redis:
r = redis.Redis(host='193.3.298.206', port=6380, db=0, username='username', password='your_pass')
Тестируем соединение:
try: info = r.info() print(info['redis_version']) response = r.ping() if response: print("Подключение успешно!") else: print("Не удалось подключиться к Redis.") except redis.exceptions.RedisError as e: print(f"Ошибка: {e}")
Смотрим на консоль:
7.2.5 Подключение успешно!
r.ping()
отправляет команду PING
к Redis. Если Redis отвечает, метод вернет True
. Так же мы получили версию redis на сервере к которому подключались, а значит, что все сработало!
Заключение
Использование Docker Compose для развертывания Redis позволяет значительно упростить управление базой данных, обеспечивая при этом высокую гибкость и надежность. Описанный выше файл docker-compose.yaml
содержит базовые настройки для запуска Redis с настройками безопасности, производительности, мониторингом состояния и управлением ресурсами, что делает его отличным выбором для большинства проектов.
Если эта информация была вам полезной — сообщите об этом через лайк, комментарий или подписку.
Благодарю за внимание.
ссылка на оригинал статьи https://habr.com/ru/articles/823936/
Добавить комментарий