使用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

参考:https://github.com/docker-library/rabbitmq/issues/171#issuecomment-316302131

 

版权声明:著作权归作者所有。

相关推荐

配置Eclipse使用Java9

Oxygen 4.7.1aEclipse Oxygen 4.7.1a已经支持Java 9启动,以及支持Java 9的开发,直接安装Eclipse Oxygen 4.7.1a即可,不需要特别的配置。但运行可能会出现一些环境问题,也可以按以下配置eclipse.ini指定Java 9的vm-vm C:\Program&nb

Angular 5配置使用service-worker

Angular 5实现了一个适用于Angular应用的Service Worker,Angular CLI 1.6也添加了对service worker的支持。使用Angular CLI对应用添加service worker的支持分两种情况:新项目应用中添加service worker在已有项目中添加service&n

Nginx使用upstream配置负载均衡

nginx主要使用upstream配置多个服务器,设置负载均衡策略。基本配置upstreamupstream example.com{    server host1;    server host2;  }  serverserver {     listen 90;

使用laptop脚本搭建macOS的web和移动开发环境

搭建开发环境往往是很痛苦的事,在github上有一个laptop的开源项目,它实际上是一个脚本,它集成了在macOS上搭建web或移动开发的一些工具。项目地址:https://github.com/thoughtbot/laptopmac版本支持目前它已测试支持的macOS版本包括:macOS Mavericks (10.9)macOS Yosemite (

使用Webpack、TypeScript 和React搭建应用

这里简单介绍基于webpack + typescript + react搭建一个应用。初始化项目创建一个空文件夹demo,使用npm在空文件夹初始化项目。npm init npm install --save-dev webpack npm install --save-dev types

docker-machine配置导入/导出脚本

为了在多个主机同步docker-machine的配置,常常需要对docker-machine配置进行导入导出。这里附上两个脚本分别用于导出/导入docker-machine配置:docker-machine-export.sh和docker-machine-import.sh。这两个脚本需要所有的主机系统有相同的$MACHINE_STORAGE_PATH/certs。用法如下:导出(主机 

RabbitMQ使用rabbitmqctl添加用户管理

rabbitmqctrl是RabbitMQ的管理工具,在RabbitMQ安装目录的sbin下。虚拟主机管理添加虚拟主机rabbitmqctl add_vhost <vhost> 删除虚拟主机rabbitmqctl delete_vhost <vhost>用户管理 添加用户rabbitmqctl add_user <username> <

Ubuntu搭建Squid代理服务器以及配置SSL

ubuntu的apt-get编译好的squid是没有包含ssl,需要手动编译。编译安装安装ssl相关的包apt-get install openssl libssl-dev ssl-cert下载squid源码apt-get source squidapt-get build-dep squidapt-get install devscripts build-essential fakeroot修改

Kafka集群搭建

Kafka介绍 Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性: 通过O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。 高吞吐量:即使是非常普通的硬件kafka也可以支持每秒数十万的消息。 支持通过kafka服务器和消费机集群来分区消息。 支持Hadoop并行数据加载。 Kafka的目的是提供一个

Centos 7搭建Docker环境

Docker CE 支持 64 位版本 CentOS 7,并且要求内核版本不低于 3.10。 CentOS 7 满足最低内核的要求,但由于内核版本比较低,部分功能(如 overlay2 存储层驱动)无法使用,并且部分功能可能不太稳定。 卸载旧版本旧版本的 Docker 称为 docker 或者 docker-engine,使用以下命令卸载旧版本: sudo yum remove