使用docker-compose安装
docekr-compose.yaml
内容如下:
# https://hub.docker.com/_/rabbitmq/tags
# https://x-team.com/blog/set-up-rabbitmq-with-docker-compose/
# https://stackoverflow.com/questions/49742269/rabbitmq-management-over-https-and-nginx
version: "3"
services:
rabbitmq:
image: rabbitmq:3.9.29-management-alpine
container_name: rabbitmq
environment:
RABBITMQ_DEFAULT_USER: guset
RABBITMQ_DEFAULT_PASS: guset
RABBITMQ_DEFAULT_VHOST: /
# RABBITMQ_ERLANG_COOKIE: "uniqueerlangcookie"
RABBITMQ_HIPE_COMPILE: 1
# RABBITMQ_LOGS: /var/log/rabbitmq
RABBITMQ_LOGS_CONSOLE: "console"
RABBITMQ_MANAGEMENT_LOG_LEVEL: info
# RABBITMQ_DISK_FREE_LIMIT: "{mem_relative, 0.1}"
# RABBITMQ_VM_MEMORY_HIGH_WATERMARK: 0.4
# RABBITMQ_CLUSTER_PARTITION_HANDLING: autoheal
volumes:
- /opt/service/rabbitmq/data:/var/lib/rabbitmq
restart: always
ports:
- "15672:15672"
- "5678:5672"
networks:
- rabbitmq_go_net
networks:
rabbitmq_go_net:
driver: bridge
配置Nginx代理
nginx.conf
的部分内容如下:
upstream rabbitmq {
server 127.0.0.1:15672;
}
...
server {
...
# 域名访问 反向代理
location /rabbitmq/api/ {
rewrite ^ $request_uri;
rewrite ^/rabbitmq/api/(.*) /api/$1 break;
return 400;
proxy_pass http://rabbitmq$uri;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /rabbitmq/ {
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_connect_timeout 300s;
proxy_send_timeout 300s;
proxy_read_timeout 300s;
proxy_pass http://rabbitmq/;
# allow my.trusted.ip.addresses2;
# deny all;
}
}
配置
proxy_pass http://rabbitmq/
中最后一个/
的作用是转发的时候去掉请求url的rabbitmq
前缀。需要配置
location rabbitmq/api/
才能不会出现404错误。
配置用戶
添加自定义用户:
docker exec -it some-rabbitmq /bin/bash
rabbitmqctl add_user username passwd # 添加用户,后面两个参数分别是用户名和密码
rabbitmqctl set_permissions -p / username ".*" ".*" ".*" # 添加权限
rabbitmqctl set_user_tags username administrator # 修改用户角色,将用户设为管理员
安装rabbitmq插件
docker部署将插件放在rabbitmq容器的插件路径下的方式(以延迟交换机插件为例)
查看对应容器的id:
docker ps
找到容器中rabbitmq插件安装的位置(/pug)
docker exec -it 容器id /bin/bash #进入运行中的容器
退出容器后,将宿主机上的插件拷贝到容器中rabbitmq插件安装的位置
docker cp rabbitmq_delayed_message_exchange-3.9.0.ez 容器id:/plugins
进入容器中启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
进入管理页面验证(不需要重启rabbitmq服务)
遗留问题
访问Admin页面出错:SyntaxError: Unexpected token 'catch' SyntaxError: Unexpected token 'catch' at EJS.Compiler.compile(xxx)
意思是要清理浏览器缓存,尝试了一下没效果,可能和版本有关。
评论区