
# 手工部署RabbitMQ
#### 简介
本文介绍了如何在华为云上使用弹性云服务器的Linux实例部署RabbitMQ。RabbitMQ是采用Erlang语言实现AMQP（Advanced Message Queuing Protocol，高级消息队列协议）的消息中间件，它最初起源于金融系统，用于在分布式系统中存储转发消息。RabbitMQ凭借其高可靠、易扩展、高可用及丰富的功能特性成为目前非常热门的一款消息中间件。
![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
您还可以选择Solution as Code一键式部署方式自动部署高可用的RabbitMQ集群，详细内容请参见[快速部署高可用的RabbitMQ集群](https://www.huaweicloud.com/solution/implementations/build-a-highly-available-rabbitmq-cluster.html)。
#### 前提条件
- 已购买一台弹性云服务器，且已为其绑定弹性公网IP。 弹性云服务器的操作系统必须为Ubuntu 24.04/22.04/20.04、Debian 12.0.0/11.7.0/11.6.0/11.1.0。
  
- 弹性云服务器所在安全组添加了如下表所示的安全组规则，具体步骤参见[为安全组添加安全组规则](https://support.huaweicloud.com/usermanual-vpc/zh-cn_topic_0030969470.html)。
  表1安全组规则 
  | 方向  | 优先级 | 策略 | 类型   | 协议端口       | 源地址       |
  |:---|:---|:---|:---|:---|:---|
  | 入方向 | 1   | 允许 | IPv4 | TCP: 80    | 0.0.0.0/0 |
  | 入方向 | 1   | 允许 | IPv4 | TCP: 15672 | 0.0.0.0/0 |
     
  
 
#### 操作步骤
![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
本操作以安装RabbitMQ 3.8.3版本为例进行说明，更多版本及安装方式，请参见[Installing RabbitMQ](https://www.rabbitmq.com/docs/download)。
1. 登录弹性云服务器。 
   具体操作请参见[Linux ECS登录方式概述](https://support.huaweicloud.com/usermanual-ecs/zh-cn_topic_0013771089.html)。
   
   
2. 安装RabbitMQ。 
   1. 执行以下命令，安装相关依赖包。
      ```
      sudo apt-get install curl gnupg apt-transport-https -y
      ```
      
   
   2. 下载RabbitMQ和Erlang的GPG公钥，并将公钥信息添加到系统的信任密钥环中。
      ```
      curl -1sLf "https://keys.openpgp.org/vks/v1/by-fingerprint/0A9AF2115F4687BD29803A206B73A36E6026DFCA" | sudo gpg --dearmor | sudo tee /usr/share/keyrings/com.rabbitmq.team.gpg > /dev/null
      curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-erlang.E495BB49CC4BBE5B.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg > /dev/null
      curl -1sLf https://github.com/rabbitmq/signing-keys/releases/download/3.0/cloudsmith.rabbitmq-server.9F4587F226208342.key | sudo gpg --dearmor | sudo tee /usr/share/keyrings/rabbitmq.9F4587F226208342.gpg > /dev/null
      ```
      
   
   3. 将RabbitMQ和Erlang的官方APT仓库添加到/etc/apt/sources.list.d/rabbitmq.list文件中。
      ```
      sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
      deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
      deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
      deb [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
      deb-src [signed-by=/usr/share/keyrings/rabbitmq.E495BB49CC4BBE5B.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-erlang/deb/ubuntu jammy main
      deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
      deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa1.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
      deb [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
      deb-src [signed-by=/usr/share/keyrings/rabbitmq.9F4587F226208342.gpg] https://ppa2.novemberain.com/rabbitmq/rabbitmq-server/deb/ubuntu jammy main
      EOF
      ```
      
   
   4. 更新本地的包索引。
      ```
      sudo apt-get update -y
      ```
      
   
   5. 安装Erlang相关包。
      ```
      sudo apt-get install -y erlang-base erlang-asn1 erlang-crypto erlang-eldap erlang-ftp erlang-inets erlang-mnesia erlang-os-mon erlang-parsetools erlang-public-key erlang-runtime-tools erlang-snmp erlang-ssl erlang-syntax-tools erlang-tftp erlang-tools erlang-xmerl
      ```
      
   
   6. 安装RabbitMQ。
      ```
      sudo apt-get install rabbitmq-server -y --fix-missing
      ```
      
   
   
   
   
3. 配置RabbitMQ。 
   1. 设置RabbitMQ开机自启动并启动RabbitMQ。
      ```
      sudo systemctl enable rabbitmq-server
      sudo systemctl start rabbitmq-server
      ```
      
   
   2. 执行以下命令，删除默认用户。
      ```
      sudo rabbitmqctl delete_user guest
      ```
      ![](https://support.huaweicloud.com/bestpractice-ecs/public_sys-resources/note_3.0-zh-cn.png)
      RabbitMQ默认的账号用户名和密码都是guest。
      
   
   3. 执行如下命令，创建一个新用户。
      ```
      sudo rabbitmqctl add_user 用户名 密码
      ```
      其中，*用户名和密码*为您自定义的信息。
      命令示例：
      ```
      sudo rabbitmqctl add_user root 123456
      ```
      
   
   4. 执行如下命令，设置用户为管理员。
      ```
      sudo rabbitmqctl set_user_tags 用户名 administrator
      ```
      命令示例：
      ```
      sudo rabbitmqctl set_user_tags root administrator
      ```
      
   
   5. 执行如下命令，赋予用户所有权限。
      ```
      sudo rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"
      ```
      命令示例：
      ```
      sudo rabbitmqctl set_permissions -p / root '.*' '.*' '.*'
      ```
      
   
   
   
   
4. 执行如下命令，启用RabbitMQ的Web管理界面。 
   ```
   sudo rabbitmq-plugins enable rabbitmq_management
   ```
   回显类似如下信息:
   ```
   [root@ecs-rabbitmq ~]# sudo rabbitmq-plugins enable rabbitmq_management
   Enabling plugins on node rabbit@ecs-rabbitmq:
   rabbitmq_management
   The following plugins have been configured:
     rabbitmq_management
     rabbitmq_management_agent
     rabbitmq_web_dispatch
   Applying plugin configuration to rabbit@ecs-rabbitmq...
   The following plugins have been enabled:
     rabbitmq_management
     rabbitmq_management_agent
     rabbitmq_web_dispatch
   started 3 plugins.
   ```
   
   
5. 使用浏览器访问 "http://弹性公网IP:15672"，显示如下页面，说明RabbitMQ安装成功。 
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002247119701.png "点击放大")
   
   
6. 输入已创建的用户名和密码后单击"Login"，进入RabbitMQ管理界面。 
   ![](https://support.huaweicloud.com/bestpractice-ecs/zh-cn_image_0000002212200542.png "点击放大")
   
   
 
#### 后续操作
若您需要将线下单机或集群实例迁移到线上RabbitMQ实例或将低版本的RabbitMQ实例迁移到高版本的RabbitMQ实例，可迁移业务至分布式消息服务RabbitMQ版，具体操作请参见[迁移RabbitMQ业务](https://support.huaweicloud.com/usermanual-rabbitmq/rabbitmq-ug-0057.html)。
