Настройка внешнего подключения RabbitMQ
Важно
- Версия внешнего сервиса должна совпадать с версией, указанной в файле
docker-compose.yml
. - В качестве примера в этой инструкции используется проект с именем
testit
. Вы можете использовать другое название.
Укажите в файле
.env
для следующих параметров значения, установленные вами при настройке RabbitMQ (ниже указаны значения по умолчанию):RABBITMQ_DEFAULT_USER=testit RABBITMQ_DEFAULT_PASS=password RABBITMQ_DEFAULT_VHOST=testitrabbit RABBITMQ_DEFAULT_HOST=external-server (где external-server — ip-адрес или DNS-имя вашего сервера с RabbitMQ) RABBITMQ_DEFAULT_PORT=5672 RABBITMQ_AUTH_MODE=plain RABBITMQ_CLIENT_CERT_PATH=/etc/rabbitmq/ssl/client/testit.pfx #RABBITMQ_CLIENT_CERT_PASSPHRASE=
В файле
docker-compose.yml
закомментируйте секцию с сервисом rabbitmq, зависимости от него других контейнеров (все упоминания rabbitmq в блокахdepends_on
) иrabbit-volume
,rabbitmq-configuration-volume
,rabbitmq-certificates-volume
в спискеvolumes
.Перезапустите систему Test IT:
docker compose -f docker-compose.yml --project-name testit up --detach --timeout 120 --remove-orphans
Настройка безопасного соединения
- Подготовьте файлы сертификатов, используя CN
rabbitmq
:
- Корневой файл
rabbitmq_ca.pem
- Сертификат
rabbitmq_cert.pem
, подписанный с помощью корневого файлаrabbitmq_ca.pem
- Ключ сервера
rabbitmq_key.pem
, подписанный с помощью корневого файлаrabbitmq_ca.pem
Названия сертификатов и ключа могут быть любыми.
- Задайте разрешения файлов:
- Для файлов сертификата и ключа для пользователя rabbitmq (100) в контейнере
- Для файла ключа — ограниченное разрешение. Используйте команды:
chown 100 rabbitmq_key.pem rabbitmq_ca.pem rabbitmq_cert.pem
chgrp 101 rabbitmq_key.pem rabbitmq_ca.pem rabbitmq_cert.pem
chmod 600 rabbitmq_key.pem
Скопируйте файлы
rabbitmq_key.pem
,rabbitmq_ca.pem
иrabbitmq_cert.pem
в вольюм с помощью команды:server_certs=$(docker inspect testit_rabbitmq-certificates-volume --format '{{ .Mountpoint }}') cp -p rabbitmq_key.pem rabbitmq_ca.pem rabbitmq_cert.pem ${server_certs}/
Скопируйте файл сертификата CA, с помощью которого были выписаны сертификаты серверов, в вольюм
trusted-certificates-volume
:trusted_certs=$(docker inspect testit_trusted-certificates-volume --format '{{ .Mountpoint }}') cp rabbitmq_ca.pem ${trusted_certs}/
Создайте файл конфигурации с расширением .conf, например 20-ssl.conf со следующим содержанием:
listeners.ssl.default = 5671 ssl_options.cacertfile = /etc/certs/rabbitmq_ca.pem ssl_options.certfile = /etc/certs/rabbitmq_cert.pem ssl_options.keyfile = /etc/certs/rabbitmq_key.pem ssl_options.verify = verify_none ssl_options.fail_if_no_peer_cert = false
Скопируйте файл в вольюм с конфигурацией
rabbitmq
:rabbitmq_conf=$(docker inspect testit_rabbitmq-configuration-volume --format '{{ .Mountpoint }}') cp 20-ssl.conf ${rabbitmq_conf}/conf.d
В файле
.env
раскомментируйте строку:RABBITMQ_SSL_ENABLED=true
Измените порт для подключения по ssl на
5671
:RABBITMQ_DEFAULT_PORT=5671
Чтобы изменения вступили в силу, перезапустите запущенные сервисы, а затем примените изменения в файле
.env
:docker compose -f docker-compose.yml --project-name testit restart docker compose -f docker-compose.yml --project-name testit up --detach --timeout 120