目前我正在使用DockerHub中的默认RabbitMQ映像启动RabbitMQ Docker容器.使用以下命令.
docker run --restart=always \
-d \
-e RABBITMQ_NODENAME=rabbitmq \
-v /opt/docker/rabbitmq/data:/var/lib/rabbitmq/mnesia/rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
--name rabbitmq rabbitmq:3-management
Run Code Online (Sandbox Code Playgroud)
我需要在首次启动映像时提供默认用户/和虚拟主机.例如,创建默认的"测试用户".
目前,我必须通过使用管理插件并通过web ui添加用户/虚拟主机来手动执行此操作.有没有办法在启动RabbitMQ图像时提供默认设置?
心爱的RabbitMQ管理插件有一个HTTP API,可以通过普通的HTTP请求来管理RabbitMQ.
我们需要以编程方式创建用户,并且HTTP API是您选择的方式.文档很少,但API非常简单直观.
关注安全性,我们不希望以纯文本形式传递用户密码,而API提供了一个字段来代替发送密码哈希.从那里引用:
[GET | PUT | DELETE]/api/users/name
个人用户.要使用户,你需要一个看起来像这样的身体:
Run Code Online (Sandbox Code Playgroud){"password":"secret","tags":"administrator"}
要么:
Run Code Online (Sandbox Code Playgroud){"password_hash":"2lmoth8l4H0DViLaK9Fxi6l9ds8=", "tags":"administrator"}
标签键是必需的.无论是
password
或password_hash
必须设置.
到目前为止,这么好,问题是:如何正确生成password_hash
?
该密码散列算法被配置在RabbitMQ的配置文件,我们的配置为默认SHA256.
我正在使用C#,以下代码生成哈希:
var cr = new SHA256Managed();
var simplestPassword = "1";
var bytes = cr.ComputeHash(Encoding.UTF8.GetBytes(simplestPassword));
var sb = new StringBuilder();
foreach (var b in bytes) sb.Append(b.ToString("x2"));
var hash = sb.ToString();
Run Code Online (Sandbox Code Playgroud)
这不起作用.在一些用于SHA256加密的在线工具中进行测试,代码产生了预期的输出.但是,如果我们转到管理页面并手动将用户密码设置为"1",那么它就像魅力一样.
这个答案让我导出配置并看看RabbitMQ正在生成的哈希值,我意识到了一些事情:
password_hash
RabbitMQ存储它没有更改我也接受其他编程语言的建议,而不仅仅是C#.
我有一个Vagrantfile,它做2件重要的事情;首先拉并运行dockerfile / rabbitmq,然后从运行应用程序的自定义Dockerfile构建,该应用程序在Rabbitmq服务器上假设一个虚拟主机,比方说“ / foo”。
问题是虚拟主机不存在。
包含rabbitmq的容器正在成功运行,并且在运行生成的映像时,使用--link将应用程序链接到该应用。使用环境变量泊坞窗集,我可以访问服务器。但是在这些操作的中间,我需要创建虚拟主机,因为我的连接被拒绝,我认为是因为“ / foo”不存在。
如何将虚拟主机安装到Rabbit服务器上?
谢谢
注意-不能使用webadmin,这必须以编程方式完成。