Подключение RabbitMQ в Docker Compose
Важно
- Версия внешнего сервиса должна совпадать с версией, указанной в файле
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