> For the complete documentation index, see [llms.txt](https://utm-1.gitbook.io/utm-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/subd/redis/instansy/utm-redis8-na-utm-db4-9.md).

# utm-redis8 на utm-db4-9

## Общая информация

Инстанс Redis на utm-db4-9

Redis работает в контейнере Docker.

<table><thead><tr><th width="306.79998779296875">Имя</th><th>Значение</th></tr></thead><tbody><tr><td>Сервер Имя</td><td> <a href="/pages/0rweffGpEO3t6GtRLqs6">utm-db4-9</a></td></tr><tr><td>Сервер IP  </td><td> 192.168.4.9</td></tr><tr><td>Порт</td><td>6379</td></tr><tr><td><p>Порт Redis Commander</p><h4> </h4></td><td>8091</td></tr><tr><td>Порт мониторинга</td><td>9121</td></tr><tr><td>Версия Redis</td><td>8.2.3</td></tr><tr><td>БД</td><td><ul><li>0</li></ul><p>...</p><ul><li>15</li></ul></td></tr><tr><td>Пользователи</td><td><ul><li>default</li><li>maxim</li><li>andrew</li></ul></td></tr><tr><td>Репозиторий на GitHub</td><td>db-projects</td></tr><tr><td>Папка с проектом в репозитории</td><td>utm-redis8</td></tr><tr><td>Имя Docker контейнера</td><td>utm-redis8</td></tr><tr><td>Каталог на сервере с смонтированной папкой данных</td><td>/var/lib/docker/volumes/docker_utm-postgres18-data</td></tr></tbody></table>

## Предварительная подготовка

### Репозиторий в GitHub

Необходимо создать приватный репозиторий db-projects на GitHub.

В аккаунте GitHub должен быть прописан публичный SSH ключ для доступа к GitHub.

Склонировать репозиторий db-projects **на рабочую станцию где ведется разработка.**

### Linux cервер развертывания

<details>

<summary>Настройка Linux сервера развертывания Redis</summary>

На Linux сервере развертывания должно быть:

* [Установлен Docker](https://app.gitbook.com/o/ydyc10nkiaS0aa9uq3Ai/s/UHLel8CyIki7deC8qpxM/~/changes/235/instrukcii/dokumentaciya/virtualnye-servera/utm-server4/system-servers/utm-db4-9/ustanovka-docker)

```bash
docker --version
# Docker version 28.4.0, build d8eb465
```

* Установлен Git

```bash
git --version
# git version 2.43.0
```

* Группы доступа

```bash
# Группа доступа к проектам GitHub
sudo addgroup utm-github
# Добавить пользователей в группу
sudo usermod -aG utm-github maxim
sudo usermod -aG utm-github andrew
```

* Папки

```bash
# Создать папку
sudo mkdir -p /srv/github/utenkov-maxim
# Права на доступ к папке
sudo chmod -R 0775 /srv/github/utenkov-maxim
# Владелец папки
sudo chown -R root:utm-github /srv/github/utenkov-maxim
# Добавить линк в домашней папке к папке /srv/github/utenkov-maxim
ln -s /srv/github $HOME/github
```

* Настройка доступа к GitHub по SSH

Скопировать в папку $HOME/.ssh пару SSH ключей доступа к GitHub

```bash
# Права на доступ к папке
sudo chmod 600 ~/.ssh/id_ed25519_github_utenkov-maxim
# Настроить config для SSH
sudo nano ~/.ssh/config
```

Добавить следующее содержимое:

```ssh-config
Host github.com
    HostName github.com
    User git
    IdentityFile ~/.ssh/id_ed25519_github_utenkov-maxim
    IdentitiesOnly yes
```

</details>

## Подготовка файлов проекта

Предварительно должен быть склонирован репозиторий db-projects из GitHub.

В папке `db-projects` создать папку проекта `utm-redis8/docker` и создать следующие файлы:

**compose.yaml**

<details>

<summary>Содержимое файла compose.yaml</summary>

```yaml
volumes:
  utm-redis8-data:

services:
  utm-redis8:
    image: redis:8.2.3
    container_name: utm-redis8
    environment:
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - REDIS_USER_EXPORTER=${REDIS_USER_EXPORTER}
      - REDIS_USERvolumes:
  utm-redis8-data:

services:
  utm-redis8:
    image: redis:8.2.3
    container_name: utm-redis8
    environment:
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - REDIS_USER_EXPORTER=${REDIS_USER_EXPORTER}
      - REDIS_USER_EXPORTER_PASSWORD=${REDIS_USER_EXPORTER_PASSWORD}
      - REDIS_USER1=${REDIS_USER1}
      - REDIS_USER1_PASSWORD=${REDIS_USER1_PASSWORD}
      - REDIS_USER2=${REDIS_USER2}
      - REDIS_USER2_PASSWORD=${REDIS_USER2_PASSWORD}
      - REDIS_PORT=6379
      - REDIS_DATABASES=16
    ports:
      - "6379:6379"
    volumes:
      - utm-redis8-data:/data
    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_EXPORTER on >$REDIS_USER_EXPORTER_PASSWORD ~* -@all +@connection +memory -readonly +strlen +config|get +xinfo +pfcount -quit +zcard +type +xlen -readwrite -command +client -wait +scard +llen +hlen +get +eval +slowlog +cluster|info +cluster|slots +cluster|nodes -hello -echo +info +latency +scan -reset -auth -asking" >> /usr/local/etc/redis/users.acl &&
        echo "user $REDIS_USER1 on >$REDIS_USER1_PASSWORD ~* +@all" >> /usr/local/etc/redis/users.acl &&
        echo "user $REDIS_USER2 on >$REDIS_USER2_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: always
    tty: true
    stdin_open: true

  redis-commander:
    image: ghcr.io/joeferner/redis-commander:latest
    container_name: utm-redis-commander
    restart: always
    depends_on:
      - utm-redis8
    environment:
      # - REDIS_HOSTS=192.168.4.9:6379
      - REDIS_HOST=192.168.4.9
      - REDIS_PORT=6379
      - REDIS_LABEL=utm-redis8
      - REDIS_USERNAME=default
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - HTTP_USER=${REDIS_COMMANDER_USER}
      - HTTP_PASSWORD=${REDIS_COMMANDER_PASS}
      - PORT=8081
    ports:
      - "8091:8081"
    user: redis

_EXPORTER_PASSWORD=${REDIS_USER_EXPORTER_PASSWORD}
      - REDIS_USER1=${REDIS_USER1}
      - REDIS_USER1_PASSWORD=${REDIS_USER1_PASSWORD}
      - REDIS_USER2=${REDIS_USER2}
      - REDIS_USER2_PASSWORD=${REDIS_USER2_PASSWORD}
      - REDIS_PORT=6379
      - REDIS_DATABASES=16
    ports:
      - "6379:6379"
    volumes:
      - utm-redis8-data:/data
    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_EXPORTER on >$REDIS_USER_EXPORTER_PASSWORD ~* -@all +@connection +memory -readonly +strlen +config|get +xinfo +pfcount -quit +zcard +type +xlen -readwrite -command +client -wait +scard +llen +hlen +get +eval +slowlog +cluster|info +cluster|slots +cluster|nodes -hello -echo +info +latency +scan -reset -auth -asking" >> /usr/local/etc/redis/users.acl &&
        echo "user $REDIS_USER1 on >$REDIS_USER1_PASSWORD ~* +@all" >> /usr/local/etc/redis/users.acl &&
        echo "user $REDIS_USER2 on >$REDIS_USER2_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: always
    tty: true
    stdin_open: true

  rediscommander:
    image: ghcr.io/joeferner/redis-commander:latest
    container_name: utm-rediscommander
    restart: always
    depends_on:
      - utm-redis8
    environment:
      - REDIS_HOSTS=utm-redis8:6379
      - REDIS_PASSWORD=${REDIS_PASSWORD}
      - HTTP_USER=${REDIS_COMMANDER_USER}
      - HTTP_PASS=${REDIS_COMMANDER_PASS}
      - PORT=8081
    ports:
      - "8091:8081"
    user: redis


```

</details>

**.env**

<details>

<summary>Содержимое файла <strong>.env</strong></summary>

```apache
REDIS_PASSWORD=<пароль для пользователя default>
REDIS_USER_EXPORTER=redis_exporter
REDIS_USER_EXPORTER_PASSWORD=<пароль для пользователя redis_exporter>
REDIS_USER1=maxim
REDIS_USER1_PASSWORD=<пароль для пользователя maxim>
REDIS_USER2=andrew
REDIS_USER2_PASSWORD=<пароль для пользователя andrew>
REDIS_COMMANDER_PASS=admin
REDIS_COMMANDER_PASS=<пароль для пользователя Redis Commander admin>
```

</details>

В папке `db-projects` создать папку проекта `utm-redis8/docker-redis-exporter` и создать следующие файлы:

**compose.yaml**

<details>

<summary>Содержимое файла <strong>compose.yaml</strong></summary>

```yaml
services:
  redis-exporter:
    image: oliver006/redis_exporter
    restart: always
    environment:
      REDIS_ADDR: "redis://192.168.4.9:6379"
      REDIS_USER: redis_exporter
      REDIS_PASSWORD_FILE: "redis_cred.json"
    container_name: redis-exporter-utm-redis8
    ports:
      - "9121:9121"
```

</details>

**redis\_cred.json**

<details>

<summary>Содержимое файла redis_cred.json</summary>

```json
{
  "redis://redis_exporter@192.168.4.9:6379": "<пароль для пользователя redis_exporter>"
}
```

</details>

Сделать коммит в GitHub со всеми изменениями в репозитории db-projects.

## Запуск Docker контейнера с Redis и Redis Commander

<details>

<summary>Выполнение запуска Docker контейнера с Redis и Redis Commander</summary>

Подключение репозитория db-projects:

```bash
# Перейти в общую папку
cd  ~/github/utenkov-maxim
# Выполнить клонирование репозитория
git clone git@github.com:utenkov-maxim/db-projects.git
# Перейти в папку репозитория db-projects/docker
cd db-projects/utm-redis8/docker
```

Обновление репозитория:

```bash
# Перейти в папку репозитория db-projects
cd  ~/github/utenkov-maxim/db-projects
# Получить свежие данные из репозитория
git pull
# Перейти в папку проекта 
cd  ~/github/utenkov-maxim/db-projects/utm-redis8/docker
```

Запустить контейнер

```bash
# Запустить
docker compose up -d
```

Проверки:

```bash
# Посмотреть запущенные контейнеры
docker ps

# Посмотреть каталог с volume с данными БД который примонтирован к контейнеру
sudo su
cd /var/lib/docker/volumes/docker_utm-redis8-data
```

Дополнительные команды:

```bash
# Остановить контейнер
docker stop utm-redis8
docker stop utm-redis-commander

# Остановить
docker compose down

# Список всех контейнеров, включая остановленные
docker ps -a

# Логи
docker logs utm-redis8
docker logs utm-redis-commander

# Удалить контейнер
docker rm utm-redis8
docker rm utm-redis-commander

# Список volumes
docker volume ls

# Список volumes примонтированных к контейнеру
docker inspect utm-redis8 | grep -i "Mounts"

# Перезапуск контейнера
docker restart utm-redis8
docker restart utm-redis-commander
```

</details>

Redis Commander: <http://192.168.4.9:8091/>

## Дополнительная настройка Redis

<details>

<summary>Действия после первого запуска Docker контейнера с Redis</summary>

После первоначального запуска в Docker контейнера utm-redis8 выполняется первоначальная инициализация сервера Redis.

Создаются пользователи:

* default
* redis\_exporter
* maxim
* andrew

Пользователи создаются с паролями, указанными в файле .env

Поэтому после инициализации необходимо сменить пароли для этих пользователей.

Для этого необходимо подключиться через DBeaver к серверу и выполнить следующие команды:

```plsql
ALTER USER default WITH PASSWORD 'new_password';
ALTER USER maxim WITH PASSWORD 'new_password';
ALTER USER andrew WITH PASSWORD 'new_password';
```

</details>

## Запуск Docker контейнера с redis-exporter

<details>

<summary>Выполнение запуска Docker контейнера с redis-exporter</summary>

Перейти в папку проекта docker-redis-exporter:

```bash
cd  ~/github/utenkov-maxim/db-projects/utm-redis8/docker-redis-exporter
```

Запустить контейнер

```bash
# Запустить
docker compose up -d
```

Дополнительные команды:

```bash
# Посмотреть запущенные контейнеры
docker ps

# Остановить контейнер
docker stop redis-exporter-utm-redis8

# Список всех контейнеров, включая остановленные
docker ps -a

# Удалить контейнер
docker rm redis-exporter-utm-redis8

# Перезапуск контейнера
docker restart redis-exporter-utm-redis8
```

Проверка метрик

```bash
curl "http://localhost:9121/metrics"
```

Через браузер: <http://192.168.4.9:9121/metrics>

</details>

## Настройка Prometheus и Grafana

Настройка Prometheus и Grafana [описана тут](/utm-docs/dokumentaciya/utm-it/resheniya/monitoring/prometheus/monitoring-postgres.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://utm-1.gitbook.io/utm-docs/dokumentaciya/utm-it/resheniya/subd/redis/instansy/utm-redis8-na-utm-db4-9.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
