RabbitMQ. Установка, GUI, SSL, отправка, прием сообщений - nagaevkirill/WIKI GitHub Wiki

  1. Используем VPS сервер Ubuntu 22, подключаемся по ssh

  1. устанавливаем 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

  1. смотрим список правил и активирован ли он ufw status verbose (по умолчанию все входящие соединения дропаются, поэтому надо сперва добавить правило для ssh)

  2. добавляем правило для ssh : ufw allow ssh, убедимся через п.3, что правило создано

  3. активируем ufw: ufw enable

  4. проверяем, что соединение ssh не отвалилось

  1. проще всего использовать скрипт для установки из стороннего репозитория, инструкция www.rabbitmq.com/install-debian.html

  2. создаем на сервере bash скрипт, new.sh

  3. вставляем в него код со страницы, запускаем командой bash new.sh

  4. после установки проверяем, что 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
  1. для управления rabbitmq через web морду требуется установить плагин rabbitmq-plugins enable rabbitmq_management

  2. далее через netstat -ntlp смотрим порт на котором идёт прослушка, должен быть 15672

  3. добавляем его в firewall: ufw allow 15672

  4. проверяем, что морда авторизации стала доступна 82.146.##.126:15672/

  5. стандартный пользователь из коробки 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
  1. входим через web интерфейс, далее не забываем сменить пользователю guest пароль

  1. создаем при необходимости vhost и очередь в нем

  2. биндим к очереди exchanger (топик) например direct

  3. выдаем прав нашему пользователю (или созданному для работы с api) на очередь

  4. страница с HTTP API pulse.mozilla.org/api/index.html

  5. пример 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"
}
  1. скрипт 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

⚠️ **GitHub.com Fallback** ⚠️