怎样在 CentOS 7 上安装 RabbitMQ

介绍

兔MQ 是一种广泛使用的开源消息代理,用 Erlang 编程语言编写。 它建立在开放电信平台 (OTP) 框架之上,可满足集群和故障转移的需求。 此外,其插件架构使 RabbitMQ 能够支持高级消息队列协议 (AMQP)、面向文本的流式消息传递协议 (STOMP)、MQ 遥测传输 (MQTT) 和其他协议。

本文介绍了怎样在 Vultr CentOS 7 服务器实例上安装 RabbitMQ。

先决条件

CentOS 7 服务器。 按照 Vultr 的最佳实践指南创建 sudo 用户并更新 CentOS 服务器。

1.安装二郎

因为RabbitMQ是用Erlang编写的,所以在安装RabbitMQ之前需要先安装Erlang。

在撰写本文时,适用于 CentOS 7 的最新稳定版 RabbitMQ 是 3.8.19, 这需要 Erlang 版本 23.2 或以后。 如果要安装较新版本的 RabbitMQ,请参阅 RabbitMQ Erlang 版本要求 Erlang 版本兼容的页面。

RabbitMQ 团队推荐使用 Erlang 版本 24,因为它为许多工作负载提供了显着的吞吐量改进。 但是 Erlang 23 版本兼容性更好,因为一些社区插件和工具可能与 Erlang 24 不兼容。

通过 SSH 以非 root sudo 用户身份登录服务器。

启用 Extra Packages for Enterprise Linux (EPEL) 存储库,因为它包含 Erlang 所需的包:

$ sudo yum -y install epel-release

选择以下选项之一以下载所需的 Erlang 版本。

选项1: 下载 Erlang 23.3.1,这是撰写本文时 23.x 系列中的最新版本。

$ cd ~ && wget https://packages.erlang-solutions.com/erlang/rpm/centos/7/x86_64/esl-erlang_23.3.1-1~centos~7_amd64.rpm

选项 2: 下载 Erlang 24.0.2,在撰写本文时 24.x 系列中的最新版本。

$ cd ~ && wget https://packages.erlang-solutions.com/erlang/rpm/centos/7/x86_64/esl-erlang_24.0.2-1~centos~7_amd64.rpm

选项 3: 如果可用,请下载与 RabbitMQ 兼容的较新版本。

转到 Erlang 解决方案 下载页面. 选择 二郎OTP 包裹, CentOS 来自 平台 清单,和 标准 来自 分配 列表。 然后点击 查看全部 列出 CentOS 的所有版本。 选择您想要的版本。 复制CentOS 7(64位)对应的下载链接。 下载使用 wget 如上图所示。

安装下载的包:

$ sudo yum -y install esl-erlang*.rpm

打开 Erlang shell 以验证安装:

$ erl

您应该会看到如下内容:

Erlang/OTP 23 [erts-11.2] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:1] [hipe]

Eshell V11.2  (abort with ^G)
1>

按 CTRL + C 两次退出 Erlang shell。

2.安装RabbitMQ

下载最新版本的RabbitMQ,即 3.8.19 在撰写本文时:

$ wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.19/rabbitmq-server-3.8.19-1.el7.noarch.rpm

您可以随时在其上找到最新版本的 RabbitMQ 发布页面 在 GitHub 上。 确保选择以 el7.noarch.rpm.

安装下载的包:

$ sudo yum -y install rabbitmq-server*.rpm

启动RabbitMQ服务:

$ sudo systemctl start rabbitmq-server.service

启用 RabbitMQ 在系统启动时启动:

$ sudo systemctl enable rabbitmq-server.service

查看RabbitMQ的状态:

$ sudo rabbitmqctl status

要启用对 RabbitMQ 管理 Web UI 和其他常见功能的访问,请更新防火墙规则以允许入站 TCP 流量在 港口 4369、25672、5671、5672、15672、61613、61614、1883和8883。

$ sudo firewall-cmd --zone=public --permanent --add-port=4369/tcp --add-port=25672/tcp --add-port=5671-5672/tcp --add-port=15672/tcp  --add-port=61613-61614/tcp --add-port=1883/tcp --add-port=8883/tcp

重新加载当前防火墙会话以应用更改:

$ sudo firewall-cmd --reload

3.启用RabbitMQ管理插件

RabbitMQ 管理插件提供了一个 HTTP API、一个 Web UI 和一个用于管理和监控 RabbitMQ 服务器的命令行工具。 尽管 Web UI 非常基础,但它可以轻松监控 RabbitMQ 服务器的最新指标。

启用 RabbitMQ 管理插件:

$ sudo rabbitmq-plugins enable rabbitmq_management

在激活期间,插件会创建一个名为的默认管理员帐户 guest. 删除此帐户以避免安全问题:

$ sudo rabbitmqctl delete_user guest

添加用于访问 Web UI 的新帐户。 在以下命令中,替换 行政 使用您想要的帐户名称:

$ sudo rabbitmqctl add_user admin

输入一个强密码 admin 出现提示时的帐户。 您可以使用免费的密码管理器,例如 KeePassXC 或在线工具,例如 随机密码生成器 生成强密码。

标签 admin 作为管理员帐户:

$ sudo rabbitmqctl set_user_tags admin administrator

授予适当的权限 admin 帐户:

$ sudo rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

现在您可以使用 admin 帐户以访问 Web UI。 但是,如果您拥有有效的域名,则应按照下一步免费为 Web UI 配置 HTTPS。 如果没有,您可以直接跳到第 5 步以访问 Web UI。

4.(可选)为RabbitMQ管理Web UI配置HTTPS

此步骤假设您要使用域名为 Web UI 配置 HTTPS 例子.com,并且您已将其指向服务器 IP 地址。 确保更换 例子.com 在带有您的域名的代码示例中。

使用 Snap 安装 Certbot

Certbot 是一个用于从证书颁发机构 Let’s Encrypt 获取免费 TLS 证书的程序。

Snap Store 是一个拥有数百万用户的 Linux 应用程序商店。 它可以轻松获取具有自动证书续订等功能的最新版本的 Certbot。 提供使用 Snap Store 所需的一切的软件包是 快照.

安装 snapd 包:

$ sudo yum -y install snapd

启用 snapd 服务:

$ sudo systemctl enable --now snapd.socket

启用经典快照支持:

$ sudo ln -s /var/lib/snapd/snap /snap

获取最新版本的 snapd core:

$ sudo snap install core && sudo snap refresh core

如果您收到以下错误,请不要担心:

error: too early for operation, device not yet seeded or device model not acknowledged

安装 snapd 后,可能需要一些时间来初始化其环境。 因此,请稍等片刻,然后再重试上述命令。

安装 Certbot:

$ sudo snap install --classic certbot

使 certbot 命令全局可用:

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

获取 Let’s Encrypt 证书

Certbot 支持多种获取证书的方式。 您将使用独立模式为您的域名获取证书,因为此模式不需要 Nginx 或 Apache 等 Web 服务器。

为了确认您控制了域名,Certbot 需要绑定到端口 80 来执行域验证。 更新防火墙规则以允许端口 80 上的入站 TCP 流量:

$ sudo firewall-cmd --permanent --zone=public --add-port=80/tcp

重新加载当前防火墙会话以应用更改:

$ sudo firewall-cmd --reload

现在您可以运行以下命令来获取 Let’s Encrypt 证书:

$ sudo certbot certonly --standalone -d example.com -m [email protected] --agree-tos

您可能需要回答有关与电子前沿基金会共享电子邮件的问题。

完成后,Certbot 会将与证书相关的所有文件放在 /etc/letsencrypt/archive/example.com 文件夹并在文件夹中创建相应的符号链接 /etc/letsencrypt/live/example.com 文件夹,方便您使用。 这些符号链接是:

$ sudo ls /etc/letsencrypt/live/example.com
cert.pem  chain.pem  fullchain.pem  privkey.pem  README

您将在下一步中使用这些符号链接来安装证书。

安装证书

出于安全原因,只有 root 帐户可以访问 /etc/letsencrypt/archive/etc/letsencrypt/live 文件夹。 但该 rabbitmq 帐户需要读取这些文件夹中的文件来配置 HTTPS。 一个合理的解决方案是将这些文件夹克隆到一个新文件夹中 rabbitmq 帐户。

新建一个文件夹:

$ sudo mkdir /etc/rabbitmq_letsencrypt

克隆 /etc/letsencrypt/archive/etc/letsencrypt/live 文件夹到新文件夹:

$ sudo cp -r /etc/letsencrypt/archive /etc/rabbitmq_letsencrypt
$ sudo cp -r /etc/letsencrypt/live /etc/rabbitmq_letsencrypt

制作 rabbitmq 新文件夹的所有者,以便 RabbitMQ 可以读取与证书相关的所有文件:

$ sudo chown -R rabbitmq:rabbitmq /etc/rabbitmq_letsencrypt

创建一个配置文件来存储 TLS 设置。 本教程使用 nano 作为编辑器,但您可以使用其他编辑器,例如 vim.

$ sudo nano /etc/rabbitmq/rabbitmq.conf

将以下内容粘贴到编辑器中:

management.ssl.port       = 15672
management.ssl.cacertfile = /etc/rabbitmq_letsencrypt/live/example.com/chain.pem
management.ssl.certfile   = /etc/rabbitmq_letsencrypt/live/example.com/cert.pem
management.ssl.keyfile    = /etc/rabbitmq_letsencrypt/live/example.com/privkey.pem

management.ssl.honor_cipher_order   = true
management.ssl.honor_ecc_order      = true
management.ssl.client_renegotiation = false
management.ssl.secure_renegotiate   = true

management.ssl.versions.1 = tlsv1.3
management.ssl.versions.2 = tlsv1.2
management.ssl.versions.3 = tlsv1.1

management.ssl.ciphers.1  = TLS_AES_256_GCM_SHA384
management.ssl.ciphers.2  = TLS_AES_128_GCM_SHA256
management.ssl.ciphers.3  = TLS_CHACHA20_POLY1305_SHA256
management.ssl.ciphers.4  = TLS_AES_128_CCM_SHA256
management.ssl.ciphers.5  = TLS_AES_128_CCM_8_SHA256
management.ssl.ciphers.6  = ECDHE-ECDSA-AES256-GCM-SHA384
management.ssl.ciphers.7  = ECDHE-RSA-AES256-GCM-SHA384
management.ssl.ciphers.8  = ECDHE-ECDSA-AES256-SHA384
management.ssl.ciphers.9  = ECDHE-RSA-AES256-SHA384
management.ssl.ciphers.10 = ECDH-ECDSA-AES256-GCM-SHA384
management.ssl.ciphers.11 = ECDH-RSA-AES256-GCM-SHA384
management.ssl.ciphers.12 = ECDH-ECDSA-AES256-SHA384
management.ssl.ciphers.13 = ECDH-RSA-AES256-SHA384
management.ssl.ciphers.14 = DHE-RSA-AES256-GCM-SHA384

保存配置文件并退出。

自动续订

Let’s Encrypt 证书的有效期为 90 天,因此您必须至少每三个月更新一次 TLS 证书。 Certbot 安装自动创建了一个 systemd 计时器单元来自动执行此任务。 运行以下命令以验证计时器是否处于活动状态:

$ sudo systemctl list-timers | grep 'certbot|ACTIVATES'

更新证书后,Certbot 不会自动重启RabbitMQ 服务,因此RabbitMQ 管理Web UI 仍然使用旧证书。 你必须在里面写一个脚本 /etc/letsencrypt/renewal-hooks/deploy 文件夹以重新启动 RabbitMQ 服务。

打开你的文本编辑器:

$ sudo nano /etc/letsencrypt/renewal-hooks/deploy/restart-rabbitmq.sh

将以下内容粘贴到编辑器中:

#!/bin/bash

# Copy new certificate files for RabbitMQ
cp -ru /etc/letsencrypt/archive /etc/rabbitmq_letsencrypt
cp -ru /etc/letsencrypt/live /etc/rabbitmq_letsencrypt

# Make rabbitmq the owner of the new files
chown -R rabbitmq:rabbitmq /etc/rabbitmq_letsencrypt

# Restart the RabbitMQ service
/usr/bin/systemctl restart rabbitmq-server.service

保存并退出。 然后使脚本可执行。

$ sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/restart-rabbitmq.sh

通过试运行测试更新过程。

$ sudo certbot renew --dry-run

5.访问RabbitMQ管理Web UI

您已完成 RabbitMQ 安装。 现在重新启动服务器以查看是否一切正常:

$ sudo reboot

等待系统启动。

打开链接 https://example.com:15672/ 如果您在步骤 4 中配置了 HTTPS,请在浏览器中打开。如果没有,请打开链接 https://192.0.2.100:15672/, 代替 192.0.2.100 使用您的服务器 IP 地址。

出现 RabbitMQ 管理屏幕。 使用您之前指定的凭据登录。 登录后您将看到 RabbitMQ 指标。

注:本教程在Vultr VPS上测试通过,如需部署请前往Vultr.com

相关阅读:

Posted in: LinuxTags: , ,