Перейти к содержанию

Redis

Для скалирования SignalR в .NET-приложении (бэкенде) "Первая Форма" необходимо использовать Redis как бэкплейн.

Redis — это хранилище данных в памяти, которое часто применяется как кэш, а также использует протокол pub/sub (publish/subscribe) для распределения сообщений между несколькими экземплярами приложения.

При использовании Redis-бэкплейна все серверы обмениваются сигналами через Redis — сообщения, отправленные одним экземпляром, поступают всем остальным.

Системные требования

Операционная система

Linux x86-64 с поддержкой Docker (например, Ubuntu/Debian).

CPU

Минимум 2 vCPU (рекомендуется ≥2 ядра при высокой нагрузке). Redis — однопоточное приложение, но масштабирование возможно через несколько инстансов.

Память (RAM)

Минимум 1GB (рекомендуется ≥4GB).

Сеть

1Gbps интерфейс достаточен. Для продакшн-кластера/высокой нагрузки рекомендуется — 10Gbps или multi-NIC.

Docker-образ Redis от Первая Форма

Для обеспечения максимальной совместимости с .NET-приложением "Первая Форма" рекомендуется использовать преднастроенный Docker-образ Redis, подготовленный компанией:

docker-public.1forma.ru/redis

  • Образ оптимизирован под использование в связке c другими компонентами приложения "Первая Форма".

  • Не требует авторизации для загрузки (анонимный pull доступ).

Аутентификация и защита доступа к Redis

Для защиты Redis от несанкционированного доступа рекомендуется использовать парольную аутентификацию.

Через конфигурацию Redis

Используйте параметр requirepass:

redis-server --requirepass "ваш_пароль"

Через переменную окружения

В Docker-образе от компании "Первая Форма" пароль можно задать через переменную окружения:

REDIS_PASSWORD=ваш_пароль

Требования к паролю

  • Рекомендуемая длина: не менее 32 символов

  • Пароль должен быть случайным и непредсказуемым

Генерация безопасного пароля

Можно использовать команду:

openssl rand -hex 16

Вы получите случайную hex-строку длиной 32 символа.

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

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

mkdir ./redis-data

chown -R 1001:1001 ./redis-data

Почему UID/GID 1001?

Docker-образ Redis от Первая Форма запускается под uid 1001, чтобы избежать запуска под root. Если volume не принадлежит этому uid/gid, при монтировании Redis не сможет записывать данные (возникнет ошибка "permission denied").

Запуск Redis в Docker

Для запуска Redis в Docker выполните:

docker run -d \\
  --name redis \\
  -p 6379:6379 \\
  -e REDIS_PASSWORD=ваш_пароль \\
  -v ./redis-data:/1f/redis/data \\
  docker-public.1forma.ru/redis:latest
  • -p 6379:6379 — Перенаправляет локальный порт 6379 на стандартный порт Redis 6379 внутри контейнера.

  • -e REDIS_PASSWORD=... — Задаёт пароль через переменную окружения.

  • docker-public.1forma.ru/redis:latest — Образ Redis.

Рекомендуется использовать случайно сгенерированный пароль длиной не менее 32 символов (см. выше).

Запуск Redis в Docker Compose

Для более удобного и воспроизводимого развёртывания Redis рекомендуется использовать Docker Compose с внешним .env-файлом.

Создайте docker-compose.yml

services:

 redis:

   image: docker-public.1forma.ru/redis:latest

   container_name: redis

   ports:

     - '6379:6379'

   volumes:

     - ./redis-data:/1f/redis/data:Z

   environment:

     - REDIS_PASSWORD

     - TZ

   healthcheck:

     test: ["CMD", "redis-cli", "-a", "${REDIS_PASSWORD}", "ping"]

     interval: 30s

     timeout: 10s

     retries: 3

   restart: unless-stopped

   networks:

     service_virtual_network:

networks:

 service_virtual_network:
  • image: используется образ docker-public.1forma.ru/redis:latest

  • container_name: читаемое имя контейнера - redis .

  • ports: перенаправление хоста 6379 → 6379 контейнера.

  • volumes:

  • ./redis-data:/1f/redis/data:Z — сохранение данных на хосте в директории ./redis-data

  • environment:

  • REDIS_PASSWORD подтягивается из .env, позволяет задавать пароль безопасно.

  • TZ задаёт часовой пояс внутри контейнера.

  • healthcheck:

Проверяется способность Redis отвечать на PING через CLI с аутентификацией:

  • interval: 30s — интервал проверки;

  • timeout: 10s — тайм-аут выполнения;

  • retries: 3 — контейнер считается нездоровым после 3 неудачных попыток.

  • restart: unless-stopped: автоматический перезапуск контейнера при сбоях.

  • networks: подключение к виртуальной сети service_virtual_network, обеспечивая доступ к контейнеру Redis по имени redis из других сервисов в той же сети.

Рядом с docker-compose.yml файлом создайте .env

REDIS_PASSWORD=ваш_пароль

TZ=Europe/Moscow

  • REDIS_PASSWORD — Задает пароль для Redis; рекомендуется использовать hex-генерацию через openssl rand -hex 16.

  • TZ — Устанавливает часовой пояс, чтобы логи и метки времени в контейнере соответствовали вашему региону.

Запустите сервис:

docker compose up -d

Контейнер:

  • запускается в фоновом режиме;

  • контролируется на здоровье;

  • автоматически перезапускается при сбоях.

Запуск Redis в OS Windows

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

Вариант 1: MSI от "Первая Форма"

Скачайте подготовленный MSI-пакет с хранилища "Первой Формы" и установите Redis как обычное Windows-приложение.

Ссылка на скачивание

Вариант 2: Docker (Linux-контейнер)

Самый надежный способ — запуск Linux-образа Redis от "Первая Форма" с помощью Docker Desktop:

docker run -d \
  --name redis-windows \
  -p 6379:6379 \
  -e REDIS_PASSWORD=ваш_пароль \
  docker-public.1forma.ru/redis:latest

Вариант 3: Chocolatey

Chocolatey — это менеджер пакетов для Windows, аналогичный apt или yum в Linux.

Для установки Chocolatey запустите PowerShell от имени администратора. Выполните команду:

Set-ExecutionPolicy Bypass -Scope Process -Force

iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

Проверьте установку:

choco -v

Установите Redis в Windows с помощью Chocolatey:

choco install redis-64

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

redis-server.exe

Или установить как службу:

redis-server --service-install

redis-server --service-start

Подключение в бэкенд сервисе "Первая Форма"

Использование в appsettings.json

Добавьте строку подключения к Redis для использования как backplane SignalR:

"SignalRedisConnectionString": "redis:6379,Password=ваш_пароль"

ℹ️ В зависимости от способа запуска параметр задаётся по-разному: в appsettings.jsonSignalRedisConnectionString, через переменную окружения Docker — CORE_SIGNAL_REDIS_CONNECTION_STRING.

  • redis:6379 — Адрес контейнера Redis в Docker Compose (имя сервиса + порт).

  • Password=... — Безопасный пароль вашей установки Redis.

Исполнение через переменные окружения

Альтернативный способ — задать строку подключения через переменные окружения (например, в docker compose или k8s).

SIGNAL_REDIS_CONNECTION_STRING="redis:6379,Password=ваш_пароль"