安装RabbitMQ前必须先安装兼容版本的Erlang,如3.12.x需Erlang 25.3–26.x;禁用系统默认Erlang源,改用kerl或官方二进制安装;通过官方APT源安装RabbitMQ并启用Management插件后,需配置监听地址、防火墙及用户权限。

安装RabbitMQ前必须先装对版本的Erlang
RabbitMQ不是随便装个Erlang就能跑的——它对Erlang/OTP版本有严格限制。比如RabbitMQ 3.12.x要求Erlang 25.3–26.x,而系统默认源(如Ubuntu 22.04的apt)只带Erlang 24.x,直接apt install erlang必然导致unable to start node或missing crypto application错误。
实操建议:
- 查清目标RabbitMQ版本的Erlang兼容范围:访问 rabbitmq.com/which-erlang.html,按RabbitMQ小版本查对应Erlang区间
- 别用系统包管理器装Erlang,改用
kerl(推荐)或官方二进制包。例如用kerl编译安装Erlang 25.3:curl -O https://raw.githubusercontent.com/ninenines/kerl/master/kerl<br>chmod a+x kerl<br>./kerl build 25.3 25.3<br>./kerl install 25.3 $HOME/erlang/25.3<br>echo 'export PATH=$HOME/erlang/25.3/bin:$PATH' >> ~/.bashrc
- 装完后运行
erl -version确认输出是Erlang/OTP 25,再检查erl -eval 'io:format("~p~n", [crypto:version()])' -s init stop -noshell是否返回版本号,避免crypto模块缺失
用官方APT仓库安装RabbitMQ,别碰deb包手动dpkg
手动下载.deb包再dpkg -i容易漏依赖,尤其erlang-crypto、erlang-mnesia等子包,报unmet dependencies后apt --fix-broken install可能降级Erlang,前功尽弃。
实操建议:
- 导入RabbitMQ官方GPG密钥和APT源:
curl -fsSL https://github.com/rabbitmq/signing-keys/releases/download/2.0/rabbitmq-release-signing-key.asc | sudo gpg --dearmor -o /usr/share/keyrings/rabbitmq-release-keyring.gpg<br>echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/rabbitmq-release-keyring.gpg] https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/rabbitmq.list
- 执行
sudo apt update后,用apt list -a rabbitmq-server确认列出的是匹配你Erlang版本的包(例如rabbitmq-server/jammy,now 3.12.17-1 all) - 直接
sudo apt install rabbitmq-server,它会自动拉取兼容的依赖,不会动你手动装的Erlang
启动失败时优先检查SELinux/AppArmor和端口占用
即使Erlang和RabbitMQ都装对了,sudo systemctl start rabbitmq-server仍可能静默失败——日志里出现failed to create cookie file或epmd error for host,大概率是安全模块拦截或epmd端口(4369)被占。
实操建议:
- 临时禁用AppArmor(Ubuntu/Debian):
sudo systemctl stop apparmor && sudo systemctl disable apparmor;如需保留,给/etc/apparmor.d/usr.sbin.rabbitmq-server加/var/lib/rabbitmq/.erlang.cookie rw,规则 - 检查
epmd是否运行:epmd -names,若报epmd: failed to open connection,说明进程没起来,尝试sudo -u rabbitmq epmd -daemon - 确认5672(AMQP)、15672(Management Plugin)端口未被占用:
sudo ss -tlnp | grep -E ':(5672|15672)',冲突时在/etc/rabbitmq/rabbitmq.conf里改listeners.tcp.default = 5673
启用Management Plugin后无法访问Web界面
执行rabbitmq-plugins enable rabbitmq_management后,浏览器打不开http://localhost:15672,常见原因是防火墙拦截、绑定地址限制或guest用户权限变更。
实操建议:
- 检查RabbitMQ是否监听
0.0.0.0:15672而非127.0.0.1:15672:sudo rabbitmq-diagnostics listeners,若只显示127.0.0.1,在/etc/rabbitmq/rabbitmq.conf中加management.tcp.port = 15672<br>management.tcp.ip = 0.0.0.0
- 开放防火墙:
sudo ufw allow 15672(Ubuntu)或sudo firewall-cmd --add-port=15672/tcp --permanent && sudo firewall-cmd --reload(CentOS/RHEL) - 默认
guest用户仅允许本地登录,远程访问需创建新用户:sudo rabbitmqctl add_user admin pass123<br>sudo rabbitmqctl set_user_tags admin administrator<br>sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"
RabbitMQ的坑不在安装命令本身,而在Erlang版本锁死、安全模块默认策略、以及插件启用后的网络暴露逻辑——这些地方配置项分散、报错不直观,修一个可能触发另一个。动手前务必对照官网的版本矩阵表,别信“一键脚本”。











