> 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/brokery-soobshenii/rabbitmq/instansy/utm-rabbitmq4-na-utm-mb4-11.md).

# utm-rabbitmq4 на utm-mb4-11

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

Инстанс RabbitMQ на utm-db4-11

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

<table><thead><tr><th width="306.79998779296875">Имя</th><th>Значение</th></tr></thead><tbody><tr><td>Сервер Имя</td><td> <a href="/pages/ty181xgbwzCxHWbwBBvW">utm-db4-11</a></td></tr><tr><td>Сервер IP  </td><td> 192.168.4.11</td></tr><tr><td>Порт доступа по AMQP</td><td>5672</td></tr><tr><td>Порт мониторинга</td><td><a href="http://192.168.4.11:9419/metrics">9419</a></td></tr><tr><td>Порт RabbitMQ Management UI</td><td><a href="http://192.168.4.11:15672/">15672</a></td></tr><tr><td>Версия RabbitMQ</td><td>4.2.1</td></tr><tr><td>Виртуальные хосты</td><td><ul><li>/</li><li>utm-test</li><li>utm-dev</li></ul></td></tr><tr><td>Пользователи</td><td><ul><li>root</li><li>maxim</li><li>andrew</li><li>exporter</li></ul></td></tr><tr><td>Репозиторий на GitHub</td><td>mb-projects</td></tr><tr><td>Папка с проектом в репозитории</td><td>utm-rabbitmq4</td></tr><tr><td>Имя Docker контейнера</td><td>utm-rabbitmq4</td></tr><tr><td>Каталог на сервере с смонтированной папкой данных</td><td>/var/lib/docker/volumes/docker_utm-rabbitmq4-data</td></tr></tbody></table>

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

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

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

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

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

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

<details>

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

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

* [Установка docker](broken://pages/ifHKmuwJEVM1AshToieI)

```bash
docker --version
# Docker version 29.1.2, build 890dcca
```

* Установлен 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>

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

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

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

**compose.yaml**

<details>

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

```yaml
volumes:
  utm-rabbitmq4-data:

services:
  # RabbitMQ 4.2
  utm-rabbitmq4:
    image: rabbitmq:4.2.1-management
    hostname: utm-rabbitmq4
    container_name: utm-rabbitmq4
    restart: always
    environment:
      # Main variabels
      RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER}
      RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS}
    volumes:
      - utm-rabbitmq4-data:/var/lib/rabbitmq
      - ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf
      - ./definitions.json:/etc/rabbitmq/definitions.json
    ports:
      - 15672:15672
      - 5672:5672
```

</details>

**.env**

<details>

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

```apache
# Main variabels
RABBITMQ_DEFAULT_USER=root
RABBITMQ_DEFAULT_PASS=<пароль для пользователя root>
```

</details>

**rabbitmq.conf**

<details>

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

```ssh-config
disk_free_limit.absolute = 1GB
log.file.level = debug
load_definitions = /etc/rabbitmq/definitions.json
```

</details>

**definitions.json**

<details>

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

```json
{
    "rabbit_version": "4.2.1",
    "rabbitmq_version": "4.2.1",
    "product_name": "RabbitMQ",
    "product_version": "4.2.1",
    "rabbitmq_definition_format": "cluster",
    "original_cluster_name": "rabbit@utm-rabbitmq4",
    "explanation": "Definitions of cluster 'rabbit@utm-rabbitmq4'",
    "users": [
        {
            "name": "andrew",
            "password_hash": "<хэш пароля для andrew>",
            "hashing_algorithm": "rabbit_password_hashing_sha256",
            "tags": [
                "administrator"
            ],
            "limits": {}
        },
        {
            "name": "exporter",
            "password_hash": "<хэш пароля для exporter>",
            "hashing_algorithm": "rabbit_password_hashing_sha256",
            "tags": [
                "monitoring"
            ],
            "limits": {}
        },
        {
            "name": "maxim",
            "password_hash": "<хэш пароля для maxim>",
            "hashing_algorithm": "rabbit_password_hashing_sha256",
            "tags": [
                "administrator"
            ],
            "limits": {}
        },
        {
            "name": "root",
            "password_hash": "<хэш пароля для root>",
            "hashing_algorithm": "rabbit_password_hashing_sha256",
            "tags": [
                "administrator"
            ],
            "limits": {}
        }
    ],
    "vhosts": [
        {
            "name": "utm-test",
            "description": "",
            "metadata": {
                "description": "",
                "tags": [],
                "default_queue_type": "classic"
            },
            "tags": []
        },
        {
            "name": "utm-dev",
            "description": "",
            "metadata": {
                "description": "",
                "tags": [],
                "default_queue_type": "classic"
            },
            "tags": []
        },
        {
            "name": "/",
            "description": "Default virtual host",
            "metadata": {
                "description": "Default virtual host",
                "tags": [],
                "default_queue_type": "classic"
            },
            "tags": []
        }
    ],
    "permissions": [
        {
            "user": "andrew",
            "vhost": "/",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "exporter",
            "vhost": "/",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "maxim",
            "vhost": "/",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "root",
            "vhost": "/",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "andrew",
            "vhost": "utm-dev",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "exporter",
            "vhost": "utm-dev",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "maxim",
            "vhost": "utm-dev",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "root",
            "vhost": "utm-dev",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "andrew",
            "vhost": "utm-test",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "exporter",
            "vhost": "utm-test",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "maxim",
            "vhost": "utm-test",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "root",
            "vhost": "utm-test",
            "configure": ".*",
            "write": ".*",
            "read": ".*"
        }
    ],
    "topic_permissions": [
        {
            "user": "andrew",
            "vhost": "/",
            "exchange": "",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "maxim",
            "vhost": "/",
            "exchange": "",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "andrew",
            "vhost": "utm-dev",
            "exchange": "",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "maxim",
            "vhost": "utm-dev",
            "exchange": "",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "andrew",
            "vhost": "utm-test",
            "exchange": "",
            "write": ".*",
            "read": ".*"
        },
        {
            "user": "maxim",
            "vhost": "utm-test",
            "exchange": "",
            "write": ".*",
            "read": ".*"
        }
    ],
    "parameters": [],
    "global_parameters": [
        {
            "name": "cluster_tags",
            "value": []
        },
        {
            "name": "internal_cluster_id",
            "value": "rabbitmq-cluster-id-uP2BMR_0XyGsYZK_0UKNZw"
        }
    ],
    "policies": [],
    "queues": [
        {
            "name": "q1",
            "vhost": "utm-test",
            "durable": true,
            "auto_delete": false,
            "arguments": {
                "x-queue-type": "classic"
            }
        },
        {
            "name": "q2",
            "vhost": "utm-test",
            "durable": true,
            "auto_delete": false,
            "arguments": {
                "x-queue-type": "classic"
            }
        },
        {
            "name": "q2",
            "vhost": "utm-dev",
            "durable": true,
            "auto_delete": false,
            "arguments": {
                "x-queue-type": "classic"
            }
        },
        {
            "name": "q1",
            "vhost": "utm-dev",
            "durable": true,
            "auto_delete": false,
            "arguments": {
                "x-queue-type": "classic"
            }
        }
    ],
    "exchanges": [
        {
            "name": "exchange_direct_1",
            "vhost": "/",
            "type": "direct",
            "durable": true,
            "auto_delete": false,
            "internal": false,
            "arguments": {}
        },
        {
            "name": "exchange_fanout_1",
            "vhost": "/",
            "type": "fanout",
            "durable": true,
            "auto_delete": false,
            "internal": false,
            "arguments": {}
        }
    ],
    "bindings": []
}
```

</details>

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

**compose.yaml**

<details>

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

```yaml
services:
  rabbitmq-exporter:
    image: kbudde/rabbitmq-exporter:v1.4
    restart: always
    container_name: rabbitmq-exporter-utm-rabbitmq4
    environment:
      - RABBIT_URL=http://${RABBITMQ_USER_EXPORTER}:${RABBITMQ_USER_EXPORTER_PASSWORD}@192.168.4.11:15672
      - RABBIT_USER=${RABBITMQ_USER_EXPORTER}
      - RABBIT_PASS=${RABBITMQ_USER_EXPORTER_PASSWORD}
      - PUBLISH_PORT=9419
    ports:
      - "9419:9419"
```

</details>

**.env**

<details>

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

```apache
# Exporter for Prometheus
RABBITMQ_USER_EXPORTER=exporter
RABBITMQ_USER_EXPORTER_PASSWORD=<пароль для пользователя exporter>
```

</details>

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

## Запуск Docker контейнера с RabbitMQ

<details>

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

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

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

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

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

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

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

Проверки:

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

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

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

```bash
# Логи запуска контейнера
docker logs utm-rabbitmq4

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

# Войти во внутрь контейнера
docker exec -it utm-rabbitmq4 bash

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

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

# Список volumes
docker volume ls

# Удалить volume docker_utm-rabbitmq4-data
docker volume rm docker_utm-rabbitmq4-data

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

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

</details>

RabbitMQ Management UI: <http://192.168.4.11:15672/>

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

<details>

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

После первоначального запуска в Docker контейнера utm-rabbitmq4 выполняется первоначальная инициализация сервера RabbitMQ. При этом импортируются определения из подготовленного файла `definitions.json`

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

* root
* maxim
* andrew
* exporter

Виртуальные хосты:

* /
* utm\_test
* utm\_dev

Очереди:

* utm\_test
  * q1
  * q2
* utm\_dev
  * q1
  * q2

Пользователи создаются с паролями, для которых в файле `definitions.json` указаны хэши.

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

Для этого необходимо подключиться через RabbitMQ Management UI к серверу и выполнить необходимые настройки на вкладке Admin

</details>

## Создание пользователя exporter на сервере RabbitMQ

Пользователь exporter создается при инициализации Docker контейнера с RabbitMQ

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

<details>

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

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

```bash
cd  ~/github/utenkov-maxim/mb-projects/utm-rabbitmq4/docker-rabbitmq-exporter
```

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

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

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

```bash
# Логи запуска контейнера
docker logs rabbitmq-exporter-utm-rabbitmq4

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

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

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

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

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

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

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

Через браузер: <http://192.168.4.11:9419/metrics>

</details>

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

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