使用docker-compose搭建配置RabbitMQ
文中RabbitMQ的版本是:RabbitMQ 3.9。
配置RabbitMQ Servcer
1. 创建rabbitmq目录
mkdir rabbitmq
在目录rabbitmq创建rabbitmq server配置文件rabbitmq.conf 和 definitions.json。
2. 编辑rabbitmq.conf
vim rabbitmq.conf
rabbitmq.conf这里主要设置两个参数:loopback_users.guest和management.load_definitions。更多参数参考rabbitmq.conf示例。
loopback_users.guest = false
management.load_definitions = /etc/rabbitmq/definitions.json
loopback_users.guest
用户guest/guest是rabbitmq的默认用户,此时也是管理员用户。默认情况下,guest用户限制为只能通过本机访问,即使用localhost:15672访问。如果通过远程访问,则会报错User can only log in via localhost。
允许guest通过远程访问,可以在修改配置loopback_users.guest,设置为false。生产环境中不建议允许guest远程访问。guest默认是管理员。
management.load_definitions
配置definitions.json文件的路径,RabbitMQ server启动时会加载schema definitionsJSON文件,配置server。
3. 配置definitions.json
definitions.json配置了用户,管理员,vhost以及权限。
{
"rabbit_version": "3.9",
"users": [
{
"name": "local_jobs",
"password_hash": ">>>HASH<<<",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": ""
},
{
"name": "adminuser",
"password_hash": ">>>HASH<<<",
"hashing_algorithm": "rabbit_password_hashing_sha256",
"tags": "administrator"
}
],
"vhosts": [
{
"name": "\/"
},
],
"permissions": [
{
"user": "local_jobs",
"vhost": "\/",
"configure": ".*",
"write": ".*",
"read": ".*"
}
],
"parameters": [],
"policies": [],
"queues": [],
"exchanges": [],
"bindings": []
}
用户配置
users节点,配置用户列表,配置项为:
- name:用户名
- password_hash:哈希密码,它的值是用
hashing_algorithm
配置的算法加密后的字符串。实际配置需要替换示例的>>>HASH<<<
- hashing_algorithm:指定密码加密的哈希算法,这里使用了rabbit_password_hashing_sha256。
- tags:用户标签,其中
administrator
标签是管理员标签
以下提供bash版,生成sha256的脚步:
#!/bin/bash
function encode_password()
{
SALT=$(od -A n -t x -N 4 /dev/urandom)
PASS=$SALT$(echo -n $1 | xxd -ps | tr -d '\n' | tr -d ' ')
PASS=$(echo -n $PASS | xxd -r -p | sha256sum | head -c 128)
PASS=$(echo -n $SALT$PASS | xxd -r -p | base64 | tr -d '\n')
echo $PASS
}
调用:
encode_password "some-password"
vhosts节点和permissions节点配置虚拟节点和权限。此处不展开说明。
Docker Compose配置
接着就是把以上配置加入到docker-compose.yml中。
在rabbitmq目录下,创建docker-compse.yml文件,添加以下内容:
version: "3.2"
services:
rabbitmq:
image: rabbitmq:3.9-management-alpine
container_name: 'rabbitmq'
ports:
- 5672:5672
- 15672:15672
volumes:
- ./data/:/var/lib/rabbitmq/
- ./log/:/var/log/rabbitmq
- ./rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro
- ./definitions.json:/etc/rabbitmq/definitions.json:ro
networks:
- rabbitmq_network
networks:
rabbitmq_network:
driver: bridge
rabbitmq官方提供了几个版本的mq-server镜像,你可以根据自己需要修改:
- rabbitmq:3.9:不包含management插件
- rabbitmq:3.9-management:包含management插件,默认启动
- rabbitmq:3.9-management-alpine:基于轻量Linux版alpine搭建的镜像。
启动rabbitmq
docker-compose up -d
验证rabbitmq
在浏览器打开rabbitmq管理界面:http://localhost:15672/,使用管理员adminuser和设置的密码登录。或者账号guest和密码guest登录。
关闭rabbitmq
docker-compose down
问题
一、Linux因权限报错:Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only
详细报错:
2022-05-04 13:12:34.580787+00:00 [erro] <0.130.0> error:{badmatch,{error,{{shutdown,{failed_to_start_child,auth,{"Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only",[{auth,init_no_setcookie,0,[{file,"auth.erl"},{line,293}]},{auth,init,1,[{file,"auth.erl"},{line,144}]},{gen_server,init_it,2,[{file,"gen_server.erl"},{line,423}]},{gen_server,init_it,6,[{file,"gen_server.erl"},{line,390}]},{proc_lib,init_p_do_apply,3,[{file,"proc_lib.erl"},{line,226}]}]}}},{child,undefined,net_sup_dynamic,{erl_distribution,start_link,[[rabbit_prelaunch_15@localhost,shortnames],false,net_sup_dynamic]},permanent,false,1000,supervisor,[erl_distribution]}}}}
解决:此处需要把宿主机上的data目录权限设置为 700,即只允许用户可读写执行。
二、Windows报错:Cookie file /var/lib/rabbitmq/.erlang.cookie must be accessible by owner only
解决:把docker-compose里的数据目录:
/var/lib/rabbitmq/
改为:
/var/lib/rabbitmq/mnesia