【RabbitMQ】源码安装

image.png RabbitMQ官网:https://www.rabbitmq.com/

环境说明

1
2
3
4
5
6
root@xjr-pc:/etc/init.d# lsb_release -a
No LSB modules are available.
Distributor ID:	Ubuntu
Description:	Ubuntu 18.04.1 LTS
Release:	18.04
Codename:	bionic
  • linux版本:Ubuntu 18.04.1 LTS
  • erlang版本:erlang-24.0
  • rabbitmq版本:rabbitmq_server-3.9.19

源码安装Erlang,RabbitMQ

Rabbitmq采用erlang语言开发,所以在安装rabbitmq之前,需要安装erlang。

2.1. 下载Erlang 和 RabbitMQ源码包

Erlang官网下载地址:http://www.erlang.org/download

选择 opt_src_版本号.tar.gz (这里我选择的是 otp_src_24.0.tar.gz) image.png Linux服务器上使用 wget http://www.erlang.org/download/otp_src_24.0.tar.gz 进行下载

1
wget http://www.erlang.org/download/otp_src_24.0.tar.gz

RabbitMQ官网下载:https://www.rabbitmq.com/download.html image.png Linux 服务器上通过 wget 下载:

1
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.9.19/rabbitmq-server-generic-unix-3.9.19.tar.xz

2.2. 安装Erlang

2.2.1 上传并解压 Erlang 安装包

1
2
3
4
5
6
7
8
9
root@xjr-pc:/www/server/src# pwd
/www/server/src
root@xjr-pc:/www/server/src# tar -zxvf otp_src_24.0.tar.gz
root@xjr-pc:/www/server/src# ll
total 102300
drwxr-xr-x  3 root root      4096 May  4 04:07 ./
drwxr-xr-x 12 root root      4096 May  4 03:45 ../
drwxr-xr-x 12 2004 uucp      4096 May 11  2021 otp_src_24.0/
-rw-r--r--  1 root root 101193664 May 12  2021 otp_src_24.0.tar.gz

2.2.2 编译安装Erlang

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#创建Erlang安装目录
root@xjr-pc:/www/server# mkdir -p /www/server/erlang

#进入otp_src_24目录(解压目录)
root@xjr-pc:/www/server/src/otp_src_24.0# pwd
/www/server/src/otp_src_24.0
root@xjr-pc:/www/server/src/otp_src_24.0# ./configure prefix=/www/server/erlang
root@xjr-pc:/www/server/src/otp_src_24.0# make && make install

#安装完成后进入安装路径目录
root@xjr-pc:/www/server/erlang# pwd
/www/server/erlang
root@xjr-pc:/www/server/erlang# ll
total 16
drwxr-xr-x  4 root root 4096 May  4 04:18 ./
drwxr-xr-x 13 root root 4096 May  4 04:10 ../
drwxr-xr-x  2 root root 4096 May  4 04:19 bin/
drwxr-xr-x  3 root root 4096 May  4 04:18 lib/

2.2.3 配置环境变量 和 查看 Erlang 是否安装成功

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
#将Erlang安装路径/bin 添加到环境变量
root@xjr-pc:/etc/profile.d# pwd
/etc/profile.d

root@xjr-pc:/etc/profile.d# cat erlang.sh
ERLANG_HOME=/www/server/erlang
PATH=$PATH:$ERLANG_HOME/bin
export PATH

root@xjr-pc:/etc/profile.d# source /etc/profile

# 运行erl 
root@xjr-pc:/etc/profile.d# erl
Erlang/OTP 24 [erts-12.0] [source] [64-bit] [smp:16:16] [ds:16:16:10] [async-threads:1] [jit]

Eshell V12.0  (abort with ^G)
1> halt().
root@xjr-pc:/etc/profile.d#

2.3. 安装RabbitMQ

安装RabbitMQ前需要确认erlang安装成功

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# 解压 rabbitmq-server-generic-unix-3.9.19.tar.xz
root@xjr-pc:/www/server/src# xz -d rabbitmq-server-generic-unix-3.9.19.tar.xz
root@xjr-pc:/www/server/src# tar -xvf rabbitmq-server-generic-unix-3.9.19.tar
root@xjr-pc:/www/server/src# mv rabbitmq-server-generic-unix-3.9.19 /www/server/rabbitmq

# 配置 RabbitMQ 环境变量
root@xjr-pc:/etc/profile.d# pwd
/etc/profile.d

root@xjr-pc:/etc/profile.d# cat rabbitmq.sh
RABBITMQ_HOME=/www/server/rabbitMQ
PATH=$PATH:$RABBITMQ_HOME/sbin
export PATH

root@xjr-pc:/etc/profile.d# source /etc/profile

# 后台启动RabbitMQ
root@xjr-pc:/www/server# rabbitmq-server -detached

# 查看端口 5672 存在表示启动成功
root@xjr-pc:/www/server# netstat -tnlp|grep 5672
LISTEN   0         128                 0.0.0.0:25672            0.0.0.0:*        users:(("beam.smp",pid=11688,fd=19))
LISTEN   0         128                       *:5672                   *:*        users:(("beam.smp",pid=11688,fd=34))

# 添加rabbitmq浏览器管理插件
root@xjr-pc:/www/server# rabbitmq-plugins enable rabbitmq_management

# RabbitMQ有默认用户名密码 guest/guest,该用户名密码只能在本地登陆
# 如若在浏览器中登陆,须新创建用户名密码
# 添加用户名密码
root@xjr-pc:/www/server# rabbitmqctl add_user root P@ssw0rd

# 检查用户列表
root@xjr-pc:/www/server# rabbitmqctl list_users
Listing users ...
user    tags
guest   [administrator]
rabbitmq_user   []

# 为 root 用户添加administrator角色
root@xjr-pc:/www/server# rabbitmqctl set_user_tags root administrator

# 设置 root 用户权限,允许访问vhost及read/write
root@xjr-pc:/www/server# rabbitmqctl set_permissions -p / root ".*" ".*" ".*"

# 检查权限列表
root@xjr-pc:/www/server# rabbitmqctl list_permissions -p /
Listing permissions for vhost "/" ...
user	configure	write	read
guest	.*	.*	.*
root	.*	.*	.*

# 启动消息队列服务
rabbitmqctl start_app

# 验证15672端口存在表示消息队列服务启动成功
ss -tnlp | grep 15672

2.4. Rabbitmq 配置systemctl启动

2.4.1. 编辑service文件

1
vim /lib/systemd/system/rabbitmq.service

2.4.2. 编辑

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
#rabbitmq 启动脚本
[Unit]
Description=rabbitmq
After=syslog.target network.target

[Service]
#Type=forking
User=root
Group=root
WorkingDirectory=/www/server/rabbitMQ
ExecStart=/www/server/rabbitMQ/sbin/rabbitmq-server
ExecReload=/www/server/rabbitMQ/sbin/rabbitmq-server restart
ExecStop=/www/server/rabbitMQ/sbin/rabbitmq-server stop
PrivateTmp=true

[Install]
WantedBy=multi-user.target

2.4.3. 解析

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3

2.4.4. 开机启动

1
systemctl enable rabbitmq.service

2.4.5. 错误

运行 systemctl start rabbitmq 一直无法启动, 提示’/usr/local/software/rabbitmq/sbin/rabbitmq-server: line 73: exec: erl: not found’?

解决方法: 是因为环境变量不同,导致无法找到相应命令,按照指引将 erlangerl 软连接到 **/usr/bin **目录下,运行以下命令。

1
ln -s $ERLANG_HOME/bin/erl /usr/bin/erl

2.5. 安装RabbitMQ插件

2.5.1. rabbitmq_delayed_message_exchange

作用: 向 RabbitMQ 添加延迟消息(或计划消息)的插件。 github: https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases

2.5.2. wget 下载插件

1
wget https://github.com/rabbitmq/rabbitmq-delayed-message-exchange/releases/download/3.9.0/rabbitmq_delayed_message_exchange-3.9.0.ez

2.5.3. 拷贝到对应插件目录

1
cp rabbitmq_delayed_message_exchange-3.9.0.ez /www/server/rabbitMQ/plugins/

2.5.4. 开启插件

1
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

2.5.5. 重启MQ服务

1
systemctl restart rabbitmq-server

Nginx 反向代理 RabbitMQ后台

Nginx 应用说明: RabbitMQ 后台管理系统占用的的端口是 :**15672 ;**但是如果把 15672 开放出去外网这显然不太安全; 这里采用的是通过 Nginx 把域名是 rabbitmq.XXX.com 的请求反向代理到本地的 **15672 **端口;然后限制对应的访问 IP ;只允许内部 IP 访问;

Nginx 反向代理配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
upstream rabbitmq-web {
  server 127.0.0.1:15672;
}

server
{
    listen 80;
    server_name rabbitmq-web.xjr2018.com;

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    error_page 502 /502.html;
    #ERROR-PAGE-END

    # if a file, which is not found in the root folder is requested,
    location / {
    	# If you use https make sure you disable gzip compression
    	# to be safe against BREACH attack

        proxy_read_timeout 300; # Some requests take more than 30 seconds.
        proxy_connect_timeout 300; # Some requests take more than 30 seconds.
        proxy_redirect     off;

        proxy_set_header   X-Forwarded-Proto $scheme;
        proxy_set_header   Host              $http_host;
        proxy_set_header   X-Real-IP         $remote_addr;
        proxy_set_header   X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header   X-Frame-Options   SAMEORIGIN;

    		proxy_pass http://rabbitmq-web;
     }

    access_log  /www/log/nginx/rabbitmq-web.xjr2018.com.log;
    error_log  /www/log/nginx/rabbitmq-web.xjr2018.com.error.log;
}

说明: 通过 nginx 反向代理把请求反向代理的本地 15672 端口;

限制 IP

1
2
3
4
5
6
location / {
    allow 192.168.0.1;
    allow 10.0.0.0/24;
    allow 2001:0db8::/32;
    deny all;
}

说明:只有 IP 地址为 192.168.0.1、10.0.0.0/24 或 2001:0db8::/32 的请求才会被允许访问。其他 IP 地址将被拒绝。

修改 Hosts 文件

1
2
3
vim /etc/hosts

192.168.0.1 rabbitmq-web.xxx.com

说明:如果没有做域名解析就改hosts文件,如果做IP限制,只用于开发团队使用其实没必要做域名解析(个人看法)

验证

直接访问: image.png

总结


基本完成。。

0%