Astra linux брокер сообщений

Установка и настройка RabbitMQ на Ubuntu

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

Установка

Сервер RabbitMQ есть в стандартном репозитории Ubuntu, поэтому можно сразу выполнить установку с помощью apt. Однако, версия в репозитории может быть не самой актуальной. Поэтому мы рассмотрим процесс с настройкой официального репозитория для установки RabbitMQ.

Для начала установим curl:

apt install curl

После выполныем две команды:

curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.deb.sh | sudo bash

curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.deb.sh | sudo bash

В нашу систему будут добавлены репозитории для установки RabbitMQ и erlang.

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

apt install rabbitmq-server

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

После установки брокера на Ubuntu, он автоматически будет запущен и настроен для автозапуска. Проверить можно командой:

systemctl status rabbitmq-server

Переходим к настройке.

Первичная настройка

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

Создание последнего выполняется командой:

rabbitmqctl add_vhost test_host

* в данном примере мы создадим тестовый хост test_host.

Список всех хостов можно увидеть командой:

rabbitmqctl add_user test_user

Система запросит ввод пароля. Придумываем и вводим его.

Поменять пароль мы можем командой:

rabbitmqctl change_password test_user

* в данном примере мы поменяем пароль для пользователя test_user.

Теперь дадим права созданному пользователю к созданному виртуальному хосту:

rabbitmqctl set_permissions -p test_host test_user «.*» «.*» «.*»

Сделаем нашего пользователя администратором:

rabbitmqctl set_user_tags test_user administrator

Разрешаем консольную команду rabbitmqadmin:

rabbitmq-plugins enable rabbitmq_management

Выполним тестовый запрос

rabbitmqadmin -u test_user -p test list vhosts

Мы должны увидеть что-то на подобие:

Использование по сети

По умолчанию, сервис запускается для работы как на локальном сервере, так и обработки запросов по сети. Но нам нужно убедиться в работоспособности прохождения сетевых запросов.

Если на нашем сервере используется брандмауэр, разрешаем порт 5672:

Читайте также:  Картридж струйный hp 712 3ed71a

iptables -I INPUT -p tcp —dport 5672 -j ACCEPT

Для сохранения правила используем утилиту iptables-persistent:

apt-get install iptables-persistent

Пример подключения с использованием Python

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

Установим питон и необходимые компоненты:

apt install python3 python3-pip

Обновляем менеджер пакетов pip:

pip3 install —upgrade pip

Устанавливаем библиотеку pika для работы с RabbitMQ:

pip3 install pika

Создадим каталог, в котором мы создадим скрипты:

Создадим скрипт для отправки информации в очередь:

  1. #!/usr/bin/env python3
  2. # -*- encoding: utf-8 -*-
  3. import pika
  4. credentials = pika.PlainCredentials(‘test_user’, ‘test’)
  5. parameters = pika.ConnectionParameters(‘localhost’, 5672, ‘test_host’, credentials)
  6. connection = pika.BlockingConnection(parameters)
  7. channel = connection.channel()
  8. channel.queue_declare(queue=’hello’)
  9. channel.basic_publish(exchange=», routing_key=’hello’, body=’Hello World!’)
  10. connection.close()
  11. print(«Your message has been sent to the queue.»)
  • строки 6-8: задаем параметры для подключения к нашему серверу сообщений. Обратите внимание, что мы используем логин и пароль для созданного ранее пользователя test_user. Также мы подключаемся к созданному хосту test_host.
  • строки 10-12: подключаемся к серверу, создаем очередь с названием hello и отправляем в очередь сообщение Hello World!

Разрешаем запуск скрипта:

chmod +x /scripts/rabbit_test_send.py

Теперь мы можем посмотреть состояние очереди из командной строки Linux.

rabbitmqadmin -u test_user -p test list queues

Мы увидим, примерно, такую картину:

* обратите внимание, что сообщение в очередь могут попадать с задержкой (2-3 секунды). Если мы увидим 0 сообщений, немного подождем.

Теперь создадим скрипт для получения сообщения:

  1. #!/usr/bin/env python3
  2. # -*- encoding: utf-8 -*-
  3. import pika
  4. credentials = pika.PlainCredentials(‘test_user’, ‘test’)
  5. parameters = pika.ConnectionParameters(‘localhost’, 5672, ‘test_host’, credentials)
  6. connection = pika.BlockingConnection(parameters)
  7. channel = connection.channel()
  8. channel.queue_declare(queue=’hello’)
  9. def callback(ch, method, properties, body):
  10. print(«Received %r» % body)
  11. channel.basic_consume(queue=’hello’, auto_ack=True, on_message_callback=callback)
  12. channel.start_consuming()
  13. print(‘To exit press CTRL+C’)
  14. connection.close()
  • строки 6-8: задаем параметры для подключения к нашему серверу сообщений. Обратите внимание, что мы используем логин и пароль для созданного ранее пользователя test_user. Также мы подключаемся к созданному хосту test_host.
  • строки 10-11: подключаемся к серверу, подключаемся к очереди с названием hello.
  • строки 13-14: функция для отображения содержимого очереди.
  • строка 16: параметры чтения очереди. Обратите внимание, что мы передаем данные очереди в нашу функцию callback, которую определили в строке 13,
  • строка 18: запускаем процесс чтения данных в очереди.

Разрешаем запуск скрипта:

chmod +x /scripts/rabbit_test_recieve.py

На экране должно появиться наше сообщение. Чтобы прервать выполнение скрипта, нажимаем CTRL+C (на экране появится некрасивый вывод, но это не страшно в рамках нашего теста).

Читайте также:  Greg пластик для принтера

Снова смотрим очередь:

rabbitmqadmin -u test_user -p test list queues

Источник

Предисловие

В данной статье рассматривается запуск сервиса RabbitMQ с ненулевой меткой безопасности (для примера используется метка безопасности с уровнем конфиденциальности 3, категориями доступа 0 и уровнем целостности 0, т.е. 3:0:0).

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

В целом для запуска любого сервиса для работы с ненулевой меткой безопасности нужно выполнить следующие типовые операции:

  1. Установить сервис и выполнить его базовые настройки;
  2. Исправить системный юнит (файл запуска) сервиса, внеся в него параметр с необходимой меткой безопасности.
  3. Установить на файловые объекты, в которые сервисом производится запись, необходимые мандатные уровни.

Далее рассматривается выполнение этих операций применительно к сервису RabbitMQ.

Установка сервиса

Пакет rabbitmq-server, устанавливающий службу RabbitMQ, не входит в состав стандартного дистрибутива ОС Astra Linux Special Edition РУСБ.10015-01 (очередное обновление 1.6), поэтому для установки службы нужно подключить репозиторий Debian.

После подключения репозитория пакет rabbitmq-server может быть установлен с помощью графического менеджера пакетов (см. Графический менеджер пакетов synaptic) или из командной строки командами

sudo apt update
sudo apt install rabbitmq-server

При установке сервис будет запущен, и будет настроен автозапуск сервиса при запуске ОС.

Настройка сервиса

Базовая настройка

sudo rabbitmq-plugins enable rabbitmq_management

Пример вывода команды:

The following plugins have been enabled:
mochiweb
webmachine
rabbitmq_web_dispatch
amqp_client
rabbitmq_management_agent
rabbitmq_management

Добавление пользователя для RabbitMQ, задание пароля, назначение прав

sudo rabbitmqctl add_user user password && \
sudo rabbitmqctl set_user_tags user administrator && \
sudo rabbitmqctl set_permissions -p / user «.*» «.*» «.*»

Для выполнения дальнейших настроек остановить службу:

sudo systemctl stop rabbitmq-server
Остановка службы занимает около 90 секунд, это нормально.

Создать каталоги для работы с ненулевой меткой безопасности и назначить их владельцем автоматически созданного при установке пакета пользователя rabbitmq:

sudo mkdir -p /opt/rabbitmq/ && chown -R rabbitmq:rabbitmq / opt/rabbitmq /

Переместить файлы настроек в ранее созданный каталог:

Читайте также:  Картридж galaprint совместимый tk 1170 для kyocera ecosys m2040dn m2540dn m2640idw 7200к gp
sudo mv / etc/rabbitmq / * / opt/rabbitmq/etc /
В реальности редактируемые далее файлы представляют собой ссылки на внутренние файлы RabbitMQ, поэтому для их редактирования рекомендуется использовать какой-нибудь простой текстовый редактор (например, nano).
Использование продвинутых редакторов (например, kate) может привести к тому, что ссылки будут заменены на копии файлов, после чего служба полностью потеряет работоспособность.

Отредактировать конфигурационный файл /opt/rabbitmq/etc/rabbitmq-env.conf, добавив или изменив следующие строки (в параметре NODE_IP_ADDRESS указать ip-адрес сервера):

NODENAME=example-rabbit
NODE_IP_ADDRESS=
NODE_PORT=5672
LOG_BASE=/opt/rabbitmq/log
HOME=/opt/rabbitmq
MNESIA_BASE=/var/lib/rabbitmq/mnesia

Настройка запуска с ненулевой меткой безопасности

Отредактировать юнит (файл запуска) службы в /etc/systemd/system/multi-user.target.wants/rabbitmq-server.service, добавив в него параметр с нужной меткой безопасности:

[Unit]
Description=RabbitMQ Messaging Server
After=network.target
[Service]
PDPLabel=3:0:0
Type=simple
User=rabbitmq
SyslogIdentifier=rabbitmq
LimitNOFILE=65536
ExecStart=/usr/sbin/rabbitmq-server
ExecStartPost=/usr/lib/rabbitmq/bin/rabbitmq-server-wait
ExecStop=/usr/sbin/rabbitmqctl stop
[Install]
WantedBy=multi-user.target

После выполнения редактирования юнита запуска службы обновить конфигурацию для загрузки внесённых изменений:

sudo systemctl daemon-reload

Создание файловых объектов с нужной меткой безопасности

Отредактировать файл запуска службы в /etc/init.d/rabbitmq-server, исправив пути к файлам:

Отредактировать запускающий файл /usr/lib/rabbitmq/bin/rabbitmq-script-wrapper, исправив пути к файлам журналов:

if [ `id -u` = `id -u rabbitmq` -a «$SCRIPT» = «rabbitmq-server» ] ; then
/usr/lib/rabbitmq/bin/rabbitmq-server «$@» > «/opt/rabbitmq/log/startup_log» 2> «/opt/rabbitmq/log/startup_err»

Отредактировать файл переменных по умолчанию /usr/lib/rabbitmq/bin/rabbitmq-defaults. Изменить пути до файлов ENABLED_PLUGINS_FILE, CONF_ENV_FILE:

Назначить уровень меток безопасности на директории и файлы

sudo pdpl-file 3:0:0:ccnr / opt /
sudo pdpl-file -R 3:0:0:ccnr /opt/rabbitmq
sudo pdpl-file 3:0:0:ccnr /var/lib
sudo pdpl-file -R 3:0:0:ccnr /var/lib/rabbitmq

Запуск службы

sudo systemctl start rabbitmq-server

Сценарий для ленивых

#!/bin/bash
set -eux
apt update && apt install -y rabbitmq-server
rabbitmq-plugins enable rabbitmq_management

( export U=user ; rabbitmqctl add_user $U password && rabbitmqctl set_user_tags $U administrator && rabbitmqctl set_permissions -p / $U «.*» «.*» «.*» )

time systemctl stop rabbitmq-server

( export R=/opt/rabbitmq ; mkdir -p $R/ && mv /etc/rabbitmq/* $R/etc/ && chown -R rabbitmq:rabbitmq $R )

( export F=/opt/rabbitmq/etc/rabbitmq-env.conf
cat > $F
NODENAME=example-rabbit
NODE_IP_ADDRESS=$(ip a s eth0 2>/dev/null | grep «inet » | cut -d «/» -f 1 | cut -c 10-)
NODE_PORT=5672
LOG_BASE=/opt/rabbitmq/log
HOME=/opt/rabbitmq
MNESIA_BASE=/var/lib/rabbitmq/mnesia
EOF
)

( export F=/etc/systemd/system/multi-user.target.wants/rabbitmq-server.service
sed -i —follow-symlinks «s

( export F=/etc/init.d/rabbitmq-server
sed -i —follow-symlinks ‘s

‘ $F
sed -i —follow-symlinks ‘s

‘ $F
sed -i —follow-symlinks ‘s

( export F=/usr/lib/rabbitmq/bin/rabbitmq-script-wrapper
sed -i —follow-symlinks ‘s

‘ $F
sed -i —follow-symlinks ‘s

/usr/lib/rabbitmq/bin/rabbitmq-server «$@» > «/opt/rabbitmq/log/startup_log» 2> «/opt/rabbitmq/log/startup_err»\n# \1»

( export F=/usr/lib/rabbitmq/bin/rabbitmq-defaults
sed -i —follow-symlinks ‘s

‘ $F
sed -i —follow-symlinks ‘s

pdpl-file 3:0:0:ccnr /opt/ && pdpl-file -R 3:0:0:ccnr /opt/rabbitmq
pdpl-file 3:0:0:ccnr /var/lib && pdpl-file -R 3:0:0:ccnr /var/lib/rabbitmq

Источник

Поделиться с друзьями
КомпСовет
Adblock
detector