概述
RabbitMQ 是目前最流行的开源消息队列中间件之一。它支持 AMQP、MQTT 等多种协议,适合做异步任务处理、服务解耦、流量削峰。
很多人第一次接触消息队列,直接 ssh 到服务器上装 Erlang 再装 RabbitMQ,折腾半天还报版本不兼容。用 Docker 跑,一条命令搞定,还能随时销毁重建。
这篇教程教你用 Docker Compose 在任意 VPS 上搭建一套带 Web 管理面板的 RabbitMQ 环境。
准备工作
你需要这些:
- 一台 Linux 服务器(Ubuntu 20.04+ 或 Debian 11+),2核2G起步
- Docker 和 Docker Compose 已安装
- 开放防火墙端口 5672(AMQP通信)和 15672(管理面板)
- 一个域名可选配,用于反代访问管理面板
先确认 Docker 状态:
docker --version
docker compose version
如果没装 Docker,跑这条:
curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
newgrp docker
步骤
第1步:创建项目目录
mkdir -p ~/rabbitmq && cd ~/rabbitmq
第2步:编写 Docker Compose 文件
新建 docker-compose.yml:
services:
rabbitmq:
image: rabbitmq:3.13-management
container_name: rabbitmq
restart: unless-stopped
ports:
- "5672:5672"
- "15672:15672"
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: Rbmq@2026!Secure
RABBITMQ_DEFAULT_VHOST: /
volumes:
- ./rabbitmq-data:/var/lib/rabbitmq
healthcheck:
test: ["CMD", "rabbitmq-diagnostics", "-q", "ping"]
interval: 30s
timeout: 10s
retries: 3
这里用了 rabbitmq:3.13-management 镜像,自带 Web 管理界面。数据挂载到本地目录,容器删了数据也不会丢。
默认账号是 admin,密码是 Rbmq@2026!Secure。生产环境记得改。
第3步:启动服务
docker compose up -d
等个十几秒,看日志确认启动正常:
docker compose logs -f rabbitmq
看到 Server startup complete; 3 plugins started. 就说明好了。
第4步:配置防火墙
如果你的服务器有 UFW 或安全组规则,需要放行端口:
sudo ufw allow 5672/tcp
sudo ufw allow 15672/tcp
sudo ufw reload
云服务器的话,去控制台的安全组里加两条入站规则。
第5步:创建专用应用账号
别直接用 admin 账号让业务连。创建一个小一点的专用账号:
docker exec -it rabbitmq rabbitmqctl add_user myapp MyStr0ngP@ss
docker exec -it rabbitmq rabbitmqctl set_permissions myapp ".*" ".*" ".*"
docker exec -it rabbitmq rabbitmqctl set_user_tags myapp administrator
这样你的应用就用 myapp 连接,admin 只用来管理。
第6步:配置消息持久化(可选但推荐)
RabbitMQ 默认消息不持久化,服务挂了消息就没了。加个策略让消息落盘:
docker exec -it rabbitmq rabbitmqctl set_policy ha-all ".*" '{"message-ttl":86400000}' --apply-to queues
这会让所有队列的消息存活24小时,即使 Broker 重启也能恢复。
验证
方法1:访问管理面板
浏览器打开 http://你的IP:15672,用 admin / Rbmq@2026!Secure 登录。
看到 Dashboard 页面,Connections 和 Channels 都是0,说明服务正常运行。
方法2:命令行测试
发一条消息再取出来:
# 发消息
docker exec -it rabbitmq rabbitmqadmin publish routing_key=test body="hello world"
# 收消息
docker exec -it rabbitmq rabbitmqadmin get queue=test count=1
收到 hello world 就证明消息队列跑得没问题。
方法3:Python 快速验证
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost', 5672, '/',
pika.PlainCredentials('myapp', 'MyStr0ngP@ss')))
channel = connection.channel()
channel.queue_declare(queue='test_queue')
channel.basic_publish(exchange='', routing_key='test_queue', body='test message')
print("消息发送成功")
connection.close()
装依赖 pip install pika,运行不报错就说明连接通了。
常见问题
Q: 管理面板打不开?
先看端口对不对。15672 是管理面板端口,不是 5672。检查防火墙和安全组有没有放行。
Q: 容器启动后一直重启?
通常是内存不够。RabbitMQ 最少需要 512MB,建议 1G 以上。看日志:docker compose logs rabbitmq。
Q: 怎么修改默认密码?
docker exec -it rabbitmq rabbitmqctl change_password admin NewP@ssw0rd
Q: 磁盘空间满了怎么办?
RabbitMQ 有个磁盘水位线,默认 50MB 就暂停写入。清理旧数据:
docker exec -it rabbitmq rabbitmqctl purge_queue 队列名
或者调高限制:
docker exec -it rabbitmq rabbitmqctl set_disk_free_limit memory 2GB
Q: 远程连不上 5672 端口?
RabbitMQ 默认监听 0.0.0.0,Docker 端口映射后应该能连。如果不行,进容器检查:
docker exec -it rabbitmq netstat -tlnp | grep 5672
能看到 0.0.0.0:5672 就对了。
搭好 RabbitMQ 之后,搭配之前写的 N8N 自动化部署 或者 Caddy 反向代理 一起用,效果更佳。
你的业务场景里打算用消息队列解决什么问题?评论区聊聊。