使用默认设置配置RabbitMQ管理docker映像&;访问用户界面 背景
我需要使用RabbitMQ服务和我的应用程序设置一个使用默认设置配置RabbitMQ管理docker映像&;访问用户界面 背景,docker,docker-compose,rabbitmq,Docker,Docker Compose,Rabbitmq,我需要使用RabbitMQ服务和我的应用程序设置一个docker compose。此RabbitMQ服务需要具备3项功能才能正常工作: 名为“user1”且具有完全权限的用户 名为“vhost1”的vhost 在“vhost1”里面,我需要一个叫做“Pizza”的交换 我们尝试了什么 为此,我们尝试在项目中创建一个名为rabbitmq的文件夹,其中包含以下文件: definitions.json { "rabbit_version": "3.6.6", "users": [
docker compose
。此RabbitMQ服务需要具备3项功能才能正常工作:
- 名为“user1”且具有完全权限的用户
- 名为“vhost1”的vhost
- 在“vhost1”里面,我需要一个叫做“Pizza”的交换
rabbitmq
的文件夹,其中包含以下文件:
definitions.json
{
"rabbit_version": "3.6.6",
"users": [
{
"name": "user1",
"password_hash": "pass1",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": "administrator"
}
],
"vhosts": [
{
"name": "\/vhost1"
}
],
"permissions": [
{
"user": "user1",
"vhost": "\/vhost1",
"configure": ".*",
"write": ".*",
"read": ".*"
}
],
"parameters": [],
"policies": [],
"queues": [],
"exchanges": [],
"bindings": []
}
rabbitmq.conf
loopback_users.guest = false
listeners.tcp.default = 5672
我们正在使用docker compose
中的volumes
命令,使用以下文件装载此文件夹:
version: '3'
services:
rabbit:
image: rabbitmq:management
ports:
- "8080:15672"
- "5672:5672"
volumes:
- ${PWD}/rabbitmq:/etc/rabbitmq
问题
我们目前面临两个问题:
localhost:8080
访问RabbitMQ管理UI,即使我们在docker compose
文件中指定了此端口的映射defininitions.json
文件中定义vhost的交换?(我在哪里可以看到它?)定义.json
文件中的“exchanges”
字段为空。要解决此问题,您需要将exchange对象添加到该列表中:
"exchanges": [
{
"name": "Pizza",
"vhost": "\/vhost1",
"type": "fanout",
"durable": true,
"auto_delete": false,
"internal": false,
"arguments": {}
}
],
你可以在这篇博文中了解更多信息:
2.访问管理UI
这里有几个配置问题。首先,我将容器中原始/etc/rabbitmq
文件夹的内容与本地文件夹中的内容粉碎。这不是故意的,可以在此处找到此问题的修复程序:
第二个问题在rabbitmq.conf
文件中。我们缺少告诉应用程序加载定义文件的字段。以下是rabbitmq.conf
文件的正确版本:
loopback_users.guest = false
listeners.tcp.default = 5672
management.load_definitions = /etc/rabbitmq/definitions.json
第三个(也是最后一个)问题是用户的密码,特别是password\u hash
字段,它需要遵循特定的算法并以特定的格式编码。有关这方面的更多信息,请参阅RabbitMQ的官方文档:
要跳过处理盐析、哈希和编码的痛苦,如果您只想像我们希望的那样为集成目的测试设置,那么只需使用示例中给出的密码test12
:
"users": [
{
"name": "user1",
"password_hash": "kI3GCqW5JLMJa4iX1lo7X4D6XbYqlLgxIs30+P6tENUV2POR",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": "administrator"
}
]
但是,如果您知道如何生成RabbitMQ将接受的用户密码非常重要,那么下面是一个bash脚本,由同事的血泪创建:
#!/bin/bash
PWD_HEX=$(echo -n $1 | xxd -p)
SALT="908D C60A"
HEX="$SALT $PWD_HEX"
SHA256=$(echo -n $HEX | xxd -r -p | sha256sum)
# This is thw pwd to be inserted on your rabbit load_definitions file
echo "908D C60A $SHA256" | xxd -r -p | base64
用法:/my\u script userpass1
结论
有了所有这些,我们应该能够创建用户、虚拟主机和交换,同时还可以通过docker映像访问管理UI 如果有人感兴趣,这是PHP7.3+版本o pass生成器:
PHP-r'$pass=“test12”$salt=随机字节(4);var_dump(base64_编码($salt.hash($sha256',$salt.pass,true));'
您可以通过更改$salt=“\x90\x8D\xC6\x0A”
应输出kI3GCqW5JLMJa4iX1lo7X4D6XbYqlLgxIs30+P6tENUV2POR