rabbitmq 3.7 && docker Эта история о том, как подружить зоопарк из кроликов и китов. Задача заключается в автоматическом создании очередей, пользователей и прав при запуске контейнера.
С версии 3.7 кролик поддерживает новый синтаксис в конфигурационном файле, теперь вместо json он хавает формат ключ-значение. Самая главная фишка, которая абсолютно потерялась при прочтении мануала по диагонали - новый конфиг называется
rabbitmq.conf, тогда как старый -
rabbitmq.config. при этом для совместимости работает и старый вариант и новый. но парсер ждет в разных файлах разный синтаксис. Когда ты находишься на стыке версий конфигов и видишь готовое решение, но для старого варианта, так и манит его использовать, но все же я себя заставил разобраться и запилить конфиг нового типа.
Все же задача по кролику решилась всего в 3 файла - definitions.json Dockerfile rabbitmq.conf
DockerfileFROM rabbitmq:3.7-management
ADD rabbitmq.conf /etc/rabbitmq/rabbitmq.conf
ADD definitions.json /etc/rabbitmq/
RUN chown rabbitmq:rabbitmq /etc/rabbitmq/rabbitmq.conf /etc/rabbitmq/definitions.json
CMD ["rabbitmq-server"]
В моем варианте меня устраивает вывод лога в stdout, но вы можете это поправить по своему желанию. тег из хаба докера можно подобрать по своей нужде, но для нашей задачи обязательно использовать management-плагин.
rabbitmq.confmanagement.load_definitions = /etc/rabbitmq/definitions.json
В конфиг, если он у вас не дефолтный, нужно добавить эту строчку. если у вас конфига нет, то эта строчка - единственное, что собственно и ожидается в конфиге. Если при запуске rabbitmq у вас будет ошибка, что мол нету точки в конце, это значит что вам отвечает старый парсер. проверьте имя конфига или версию кролика.
Ну, и самое главное - это json, который описывает все нужные нам очереди и юзверей.
definitions.json{
"rabbit_version": "3.7.0",
"users": [
{
"name": "user1",
"password_hash": "PASSWORD",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": "tag1"
},
{
"name": "user2",
"password_hash": "PASSWORD",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": "tag2"
},
{
"name": "user3",
"password_hash": "PASSWORD",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": "tag3"
}
],
"vhosts": [
{
"name": "\/vhost1"
},
{
"name": "\/vhost2"
},
{
"name": "\/vhost3"
}
],
"permissions": [
{
"user": "user1",
"vhost": "\/vhost1",
"configure": ".*",
"write": ".*",
"read": ".*"
},
..........................
],
"parameters": [],
"policies": [],
"queues": [],
"exchanges": [],
"bindings": []
}
Важно! пароль в конфиг надо заносить в base64 формате:
echo "XXXXX" | base64"
после чего можно билдить контейнер и запускать его, прокидывая нужные порты и тома.
#docker #rabbitmq