Установка брокера сообщений RabbitMQ

Если узел с уже установленным RabbitMQ будет переименован, то брокер сообщений перестанет принимать подключения. Для исправления ситуации необходимо удалить RabbitMQ, затем выполнить его переустановку.

Для установки RabbitMQ нужно перейти в интерфейс командной строки через программу «Терминал Fly» и выполнить:

sudo apt install -y rabbitmq-server
BASH

где:

-y - ключ для пропуска подтверждения установки.

Настройка брокера сообщений RabbitMQ

Для настройки RabbitMQ следует:

  • перейти в интерфейс командной строки через программу «Терминал Fly» и убедиться в наличии каталога /etc/rabbitmq:
ls /etc/
BASH
  • если каталог отсутствует, необходимо создать его:
sudo mkdir -p /etc/rabbitmq
BASH

где:

- p - ключ для автоматического создания директорий, указанных внутри пути;

  • перейти в каталог /etc/rabbitmq:
cd /etc/rabbitmq
BASH
  • создать пустые файлы rabbitmq.conf (основной файл конфигурации RabbitMQ) и definitions.json (файл определения данных для подключения):
sudo touch rabbitmq.conf
sudo touch definitions.json
BASH
  • поменять владельца (rabbitmq) и идентификатор группы  (rabbitmq)  для созданных файлов:
sudo chown rabbitmq:rabbitmq definitions.json rabbitmq.conf
BASH
  • отредактировать файл rabbitmq.conf, приведя его к виду:
# ======================================= Management section =======================================
## Preload schema definitions from the following JSON file. 
## Related doc guide: https://rabbitmq.com/management.html#load-definitions.
##
# management.load_definitions = /path/to/exported/definitions.json
management.load_definitions = /etc/rabbitmq/definitions.json
BASH

Если необходимо, чтобы RabbitMQ работал через TLS-соединение, то файл rabbitmq.conf нужно привести к виду:

# ======================================= Management section =======================================
## Preload schema definitions from the following JSON file. 
## Related doc guide: https://rabbitmq.com/management.html#load-definitions.
##
# management.load_definitions = /path/to/exported/definitions.json
management.load_definitions = /etc/rabbitmq/definitions.json
listeners.tcp.default = 5672

# TLS Порт 
listeners.ssl.default = 5671 
# Пути к сертификатам 
ssl_options.cacertfile = /var/ssl/root-ca.crt
ssl_options.certfile   = /var/ssl/cert.crt
ssl_options.keyfile    = /var/ssl/private/private-key.key
# Пароль для ключа
#ssl_options.password =  # Should peer verification be enabled?
ssl_options.verify     = verify_peer

# When set to true, TLS connection will be rejected if client fails to provide a certificate
ssl_options.fail_if_no_peer_cert = false

ssl_options.versions.default = tlsv1.2 
BASH

Предполагается, что файлы корневого сертификата (/var/ssl/root-ca.crt), сертификата узла (/var/ssl/cert.crt) и закрытого ключа (/var/ssl/private/private-key.key) к нему уже существуют и доступны по указанному пути.

  • отредактировать файл definitions.json, задав пользователей termidesk и admin, приведя его к виду:

В файле /etc/rabbitmq/definitions.json пароли  указываются в виде преобразованного значения, которое можно получить через исполняемый файл rabbitmq_password2hash.sh. Процесс преобразования пароля будет приведен далее.

{
	"rabbit_version": "3.7.8",
	"users": [
		{
			"name": "termidesk",
			"password_hash": "pnXiDJtUdk7ZceL9iOqx44PeDgRa+X1+eIq+7wf/PTONLb1h",
			"hashing_algorithm": "rabbit_password_hashing_sha256",
			"tags": ""
		},
		{
			"name": "admin",
			"password_hash": "FXQ9WFNSrsGwRki9BT2dCITnsDwYu2lsy7BEN7+UncsPzCDZ",
			"hashing_algorithm": "rabbit_password_hashing_sha256",
			"tags": "administrator"
		}
	],
	"vhosts": [
		{
			"name": "/"
		},
		{
			"name": "termidesk"
		}
	],
	"permissions": [
		{
			"user": "termidesk",
			"vhost": "termidesk",
			"configure": ".*",
			"write": ".*",
			"read": ".*"
		},
		{
			"user": "admin",
			"vhost": "termidesk",
			"configure": ".*",
			"write": ".*",
			"read": ".*"
		}
	],
	"topic_permissions": [
		{
			"user": "termidesk",
			"vhost": "termidesk",
			"exchange": "",
			"write": ".*",
			"read": ".*"
		}
	],
	"parameters": [],
	"global_parameters": [
		{
			"name": "cluster_name",
			"value": "rabbit@rabbitmq"
		}
	],
	"policies": [],
	"queues": [],
	"exchanges": [],
	"bindings": []
}
BASH

В примере используются следующие пары логин-пароль: admin:admin, termidesk:ksedimret.

Имя пользователя и пароль должны задаваться в соответствии с внутренними стандартами организации по применению парольной защиты. Для задания пароля разрешено использовать только латинские буквы A-Z, a-z, цифры 0-9 и символы !$%^&_-=+~`.,()*{}[]\|.

  • выполнить команду инициализации RabbitMQ:
sudo rabbitmq-plugins enable rabbitmq_management
BASH
  • перезапустить службу rabbitmq-server:
sudo systemctl restart rabbitmq-server
BASH

Чтобы получить преобразованное значение пароля, нужно воспользоваться исполняемым файлом rabbitmq_password2hash.sh, расположенным в подключенном репозитории Termidesk (см. Получение пакетов установки в ОС Astra Linux Special Edition) по пути /var/repos/Addons/Scripts/. Для этого:

  • перейти в каталог /var/repos/Addons/Scripts/:
cd /var/repos/Addons/Scripts/
BASH
  • задать файлу rabbitmq_password2hash.sh флаг для запуска:
sudo chmod +x rabbitmq_password2hash.sh
BASH

где:

+x - ключ установки разрешения на запуск файла для всех пользователей;

  • выполнить исполняемый файл:
sudo ./rabbitmq_password2hash.sh
BASH

При выполнении исполняемого файла будет предложено ввести пароль и повторить его. Преобразованное значение введенного пароля отображается в интерфейсе командной строки.

Необходимо внести полученное значение при формировании файла /etc/rabbitmq/definitions.json (секция password_hash).

Если конфигурационный файл /etc/rabbitmq/definitions.json уже существует, но требуется изменить в нем значение преобразованного пароля, нужно:

  • выполнить преобразование и добавление пароля в файл /etc/rabbitmq/definitions.json:
sudo ./rabbitmq_password2hash.sh -w -u <user> -p <пароль>
BASH

где:

-w - ключ для сохранения изменений в файл /etc/rabbitmq/definitions.json;

-u - пользователь RabbitMQ. В стандартной установке можно указывать admin;

-p - пароль;

  • перезапустить службу rabbitmq-server:
sudo systemctl restart rabbitmq-server
BASH