RabbitMQ. Установка, GUI, SSL, отправка, прием сообщений - nagaevkirill/WIKI GitHub Wiki
-
Используем VPS сервер Ubuntu 22, подключаемся по ssh
-
устанавливаем firewall - apt install ufw // отличный гайд по ufw на openocean www.digitalocean.com/community/tutorials/how-to-set-up-a-firewall-with-ufw-on-ubuntu-20-04
можно отключить ipv6 sudo nano /etc/default/ufw Change the line that says: IPV6=yes to IPV6=no
-
смотрим список правил и активирован ли он ufw status verbose (по умолчанию все входящие соединения дропаются, поэтому надо сперва добавить правило для ssh)
-
добавляем правило для ssh : ufw allow ssh, убедимся через п.3, что правило создано
-
активируем ufw: ufw enable
-
проверяем, что соединение ssh не отвалилось
-
проще всего использовать скрипт для установки из стороннего репозитория, инструкция www.rabbitmq.com/install-debian.html
-
создаем на сервере bash скрипт, new.sh
-
вставляем в него код со страницы, запускаем командой bash new.sh
-
после установки проверяем, что rabbitmq запущен, командой systemctl status rabbitmq-server - > в статусе Active: active (running)
доп команды для старта и остановки: # stop the local node sudo systemctl stop rabbitmq-server # start it back sudo systemctl start rabbitmq-server
-
для управления rabbitmq через web морду требуется установить плагин rabbitmq-plugins enable rabbitmq_management
-
далее через netstat -ntlp смотрим порт на котором идёт прослушка, должен быть 15672
-
добавляем его в firewall: ufw allow 15672
-
проверяем, что морда авторизации стала доступна 82.146.##.126:15672/
-
стандартный пользователь из коробки guest / guest, но под ним не получится зайти из внешней сети, поэтому создаем нового пользователя через консоль
# create a user rabbitmqctl add_user username password # tag the user with "administrator" for full management UI and HTTP API access rabbitmqctl set_user_tags username administrator
-
входим через web интерфейс, далее не забываем сменить пользователю guest пароль
-
создаем при необходимости vhost и очередь в нем
-
биндим к очереди exchanger (топик) например direct
-
выдаем прав нашему пользователю (или созданному для работы с api) на очередь
-
страница с HTTP API pulse.mozilla.org/api/index.html
-
пример POST запроса с отправкой сообщений в vhost “main” топик “amq.direct” в очередь “dev”
github.com/nagaevkirill/WIKI_webdev/assets/74528930/d40e437b-b999-41dd-8e22-bfe77df796ed
POST http://82.146.##.126:15672/api/exchanges/main/amq.direct/publish
payload JSON, логин/пароль указываем в Basic Auth
{
"properties":{},
"routing_key":"dev",
"payload":"my body",
"payload_encoding":"string"
}
-
скрипт python для отправки сообщений (не забыть открыть порт на файрволле ufw allow 5672)
import pika
creds = pika.credentials.PlainCredentials('guest', 'guest')
connection = pika.BlockingConnection(pika.ConnectionParameters('82.146.##.126', '5672', 'main', creds))
channel = connection.channel()
channel.queue_declare('dev', durable=True, auto_delete=False)
for x in range(1, 10):
channel.basic_publish(exchange='amq.direct',
routing_key='dev',
body=f'Hello World! ${x}')
print(f" [x] Sent 'Hello World! {x}'")
connection.close()
print('DONE')
При передаче сообщений rabbitmq используется протокол amq, поэтому прокси типа nginx не поможет в решении задачи шифрования сообщений. Для этого в rabbitmq на стороне сервера существуют внутренние инструменты, в то время, как клиентские библиотеки используют свои возможности.
Хорошая статья про TLS, сертификаты, дебаг по этому вопросу www.rabbitmq.com/docs/ssl
Для начала требуется создать файл конфигурации, после установки скорее всего вы не обнаружите его в соответствующей папке. Существует два метода описания настроек: 1. через файл rabbitmq.conf 2. advanced.config Используя rabbitmq.conf у меня не удалось запустить службу, поэтому пример с advanced.config
touch /etc/rabbitmq/advanced.config
Минимальные настройки для SSL / TLS:
[
{rabbit, [
{ssl_listeners, [5671]},
{ssl_options, [{cacertfile, "/etc/rabbitmq/certs/ca_certificate.pem"},
{certfile, "/etc/rabbitmq/certs/server_mq1.nagayev.ru_certificate.pem"},
{keyfile, "/etc/rabbitmq/certs/server_mq1.nagayev.ru_key.pem"},
{verify, verify_peer},
{fail_if_no_peer_cert, true}]}
]}
].
требуется указать сертификаты, которые можно сгенерировать с помощью библиотеки python-, или описанный на сайте www.rabbitmq.com/docs/ssl#automated-certificate-generation-transcript прием:
git clone https://github.com/rabbitmq/tls-gen tls-gen cd tls-gen/basic # private key password make PASSWORD=bunnies make verify make info ls -l ./result
для того, чтобы настройки применились необходимо перезапустить службу
systemctl restart rabbitmq-server.service
Для проверки, что настройки по ssl сработали корректно можно использовать следующую команду (там проверим расположение конфигурационного файла и убедимся, что подключился новый порт для приема сообщений с отметкой ssl rabbitmq-diagnostics status