date: 2020-06-07title: RocketMQ学习(3)——群集部署及web管理页面 #标题
tags: RocketMQ #标签
categories: MQ # 分类

新入职的公司,在项目中用到了rocketmq,自己之前没有接触过,所以花时间把它学习一下。以便日后遇到问题可以有思路去解决。
参考文档:

和大多数消息中间件类似,都包含了producer、consumer、broker等角色,还有一个角色是namesrv,关于其各个组件的功能,在之前的文章中有写到,这里就不在赘述了。

来总结下,整个Rocket MQ消息集群就是由NameSrv/Broker、Producer/Consumer组成的,为了更清晰的理解他们之间的关系,我们以一条完整的信息流转为例,来看看rocketmq消息系统是如何运转的,如下所示:

RocketMQ群集部署及web管理页面 - 图1

下面是一个公司生产环境中的实际架构:

RocketMQ群集部署及web管理页面 - 图2

在上面的架构中,部署了3个namesrv节点,broker采用2主2从的异步复制模式进行集群部署。

废话不多说,开搞。

环境准备

OS 主机名 IP roles
Centos 7.5 rocketmq01 192.168.20.2 namesrv/master-broker-a
Centos 7.5 rocketmq02 192.168.20.3 namesrv/slave-broker-a
Centos 7.5 rocketmq03 192.168.20.4 namesrv/master-broker-b
Centos 7.5 rocketmq04 192.168.20.5 slave-broker-b

注:文中用到的所有软件包,均可在我的网盘链接中找到(提取码: ye9e)。
另外需要注意,只要没有特别说明,以下操作是需要在所有节点上执行的,So….,建议有需要的话自己开发一个脚本吧。

安装jdk

jdk版本须在1.8以上,(下载地址)自行选择相应的版本。我这里选择自己之前下载的jdk,可能版本和链接中的有些不一样。

  1. [root@rocketmq01 ~]# rpm -qa | grep jdk | xargs rpm -e --nodeps # 卸载系统自带jdk
  2. [root@rocketmq01 ~]# tar zxf jdk-8u211-linux-x64.tar.gz -C /usr/local/
  3. [root@rocketmq01 ~]# tail -n4 /etc/profile # 该文件末尾写入以下内容
  4. export JAVA_HOME=/usr/local/jdk1.8.0_211
  5. export JRE_HOME=/usr/local/jdk1.8.0_211/jre
  6. export CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
  7. export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
  8. [root@rocketmq01 ~]# source /etc/profile # 重新加载该文件
  9. [root@rocketmq01 ~]# java -version # 检测java版本
  10. java version "1.8.0_211"
  11. Java(TM) SE Runtime Environment (build 1.8.0_211-b12)
  12. Java HotSpot(TM) 64-Bit Server VM (build 25.211-b12, mixed mode)

安装maven

  1. # 下载并配置环境变量
  2. [root@rocketmq01 ~]# wget https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
  3. [root@rocketmq01 ~]# tar zxf apache-maven-3.6.3-bin.tar.gz
  4. [root@rocketmq01 ~]# mv apache-maven-3.6.3 /usr/local/maven
  5. [root@rocketmq01 ~]# tail -n2 /etc/profile # 在文件中写入以下内容
  6. export MAVEN_HOME=/usr/local/maven
  7. export PATH=$PATH:$MAVEN_HOME/bin
  8. [root@rocketmq01 ~]# source /etc/profile # 重新加载文件
  9. [root@rocketmq01 ~]# mvn -v # 可以查看到版本信息即可
  10. Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
  11. Maven home: /usr/local/maven
  12. Java version: 1.8.0_211, vendor: Oracle Corporation, runtime: /usr/local/jdk1.8.0_211/jre
  13. Default locale: zh_CN, platform encoding: UTF-8
  14. OS name: "linux", version: "3.10.0-862.el7.x86_64", arch: "amd64", family: "unix"

由于maven默认的仓库在国外,所以我们还要更改其仓库地址,如下:

  1. [root@rocketmq01 ~]# vim /usr/local/maven/conf/settings.xml # 修改此文件
  2. ....................#省略部分内容
  3. <url>http://my.repository.com/repo/path</url>
  4. </mirror>
  5. --> #定位到该行(158行),写入以下内容
  6. <mirror>
  7. <id>aliyun</id>
  8. <mirrorOf>central</mirrorOf>
  9. <name>aliyun maven</name>
  10. <url>https://maven.aliyun.com/nexus/content/groups/public/</url>
  11. </mirror>
  12. </mirrors> # 写在该行上面

至此,准备工作就完成了。

安装rocketmq

  1. [root@rocketmq01 ~]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/rocketmq/4.7.0/rocketmq-all-4.7.0-source-release.zip
  2. [root@rocketmq01 ~]# unzip rocketmq-all-4.7.0-source-release.zip
  3. [root@rocketmq01 ~]# mv rocketmq-all-4.7.0-source-release /usr/local/rocketmq-4.7.0
  4. [root@rocketmq01 ~]# cd /usr/local/rocketmq-4.7.0/
  5. # 编译
  6. [root@rocketmq01 rocketmq-4.7.0]# mvn -Prelease-all -DskipTests clean install -U
  7. # 创建所需目录
  8. [root@rocketmq01 rocketmq-4.7.0]# mkdir -p /usr/local/rocketmq-4.7.0/data/store{commitlog,consumequeue,index,checkpoint,abort}

修改配置文件

在修改配置文件之前,我这里先解释下配置文件中的含义,以便根据生产中实际情况来修改

  1. [root@rocketmq01 conf]# pwd # 确定当前目录
  2. /usr/local/rocketmq-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf
  3. [root@rocketmq01 conf]# tree -L 1
  4. .
  5. ├── 2m-2s-async # 多Master多Slave模式,异步复制模式
  6. ├── 2m-2s-sync # 多Master多Slave模式,同步双写
  7. ├── 2m-noslave # 多Master模式
  8. ├── broker.conf
  9. ├── dledger
  10. ├── logback_broker.xml
  11. ├── logback_namesrv.xml
  12. ├── logback_tools.xml
  13. ├── plain_acl.yml
  14. └── tools.yml

在rocketmq中部署群集,根据brokerid来判断主从关系,brokerId=0表示master,非0表示slave。

主配置文件解释如下:

  1. # 所属集群名字
  2. brokerClusterName=Rocketmq-Cluster
  3. # broker名字,注意此处不同的配置文件填写的不一样
  4. brokerName=broker-a
  5. # 0表示Master >0表示Slave
  6. brokerId=0
  7. # 删除文件时间点,默认凌晨 4点
  8. deleteWhen=04
  9. #文件保留时间,默认 48 小时
  10. fileReservedTime=48
  11. brokerRole=ASYNC_MASTER
  12. # 刷盘方式
  13. # - ASYNC_FLUSH 异步刷盘
  14. # - SYNC_FLUSH 同步刷盘
  15. flushDiskType=ASYNC_FLUSH
  16. # nameServer地址,分号分割
  17. namesrvAddr=192.168.20.2:9876;192.168.20.3:9876;192.168.20.4:9876
  18. # Broker 对外服务的监听端口
  19. listenPort=10911
  20. # 在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
  21. defaultTopicQueueNums=4
  22. # 是否允许 Broker 自动创建Topic
  23. autoCreateTopicEnable=true
  24. # 是否允许 Broker 自动创建订阅组
  25. autoCreateSubscriptionGroup=true
  26. # commitLog每个文件的大小默认1G
  27. mapedFileSizeCommitLog=1073741824
  28. # ConsumeQueue每个文件默认存30W条,根据业务情况调整
  29. mapedFileSizeConsumeQueue=50000000
  30. destroyMapedFileIntervalForcibly=120000
  31. redeleteHangedFileInterval=120000
  32. # 检测物理文件磁盘空间
  33. diskMaxUsedSpaceRatio=88
  34. # 存储路径
  35. storePathRootDir=/usr/local/rocketmq-4.7.0/data/store
  36. # commitLog 存储路径
  37. storePathCommitLog=/usr/local/rocketmq-4.7.0/data/store/commitlog
  38. # 消费队列存储路径存储路径
  39. storePathConsumeQueue=/usr/local/rocketmq-4.7.0/data/store/consumequeue
  40. # 消息索引存储路径
  41. storePathIndex=/usr/local/rocketmq-4.7.0/data/store/index
  42. # checkpoint 文件存储路径
  43. storeCheckpoint=/usr/local/rocketmq-4.7.0/data/store/checkpoint
  44. # abort 文件存储路径
  45. abortFile=/usr/local/rocketmq-4.7.0/data/store/abort
  46. # 限制的消息大小
  47. maxMessageSize=65536
  48. flushCommitLogLeastPages=4
  49. flushConsumeQueueLeastPages=2
  50. flushCommitLogThoroughInterval=10000
  51. flushConsumeQueueThoroughInterval=60000
  52. checkTransactionMessageEnable=false
  53. # 发消息线程池数量
  54. sendMessageThreadPoolNums=128
  55. # 拉消息线程池数量
  56. pullMessageThreadPoolNums=128

接下来就去修改每个主机的配置文件,注意:每台主机要修改的配置文件都是不一样的。

rocketmq01主机配置文件
  1. [root@rocketmq01 2m-2s-async]# pwd # 确定当前目录
  2. /usr/local/rocketmq-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf/2m-2s-async
  3. [root@rocketmq01 2m-2s-async]# egrep -v '^$|^#' broker-a.properties
  4. brokerClusterName=Rocketmq-Cluster
  5. brokerName=broker-a
  6. brokerId=0
  7. deleteWhen=04
  8. fileReservedTime=48
  9. brokerRole=ASYNC_MASTER
  10. flushDiskType=ASYNC_FLUSH
  11. namesrvAddr=192.168.20.2:9876;192.168.20.3:9876;192.168.20.4:9876
  12. listenPort=10911
  13. defaultTopicQueueNums=4
  14. autoCreateTopicEnable=false
  15. autoCreateSubscriptionGroup=false
  16. mapedFileSizeCommitLog=1073741824
  17. mapedFileSizeConsumeQueue=50000000
  18. destroyMapedFileIntervalForcibly=120000
  19. redeleteHangedFileInterval=120000
  20. diskMaxUsedSpaceRatio=88
  21. storePathRootDir=/usr/local/rocketmq-4.7.0/data/store
  22. storePathCommitLog=/usr/local/rocketmq-4.7.0/data/store/commitlog
  23. storePathConsumeQueue=/usr/local/rocketmq-4.7.0/data/store/consumequeue
  24. storePathIndex=/usr/local/rocketmq-4.7.0/data/store/index
  25. storeCheckpoint=/usr/local/rocketmq-4.7.0/data/store/checkpoint
  26. abortFile=/usr/local/rocketmq-4.7.0/data/store/abort
  27. maxMessageSize=65536
  28. flushCommitLogLeastPages=4
  29. flushConsumeQueueLeastPages=2
  30. flushCommitLogThoroughInterval=10000
  31. flushConsumeQueueThoroughInterval=60000
  32. checkTransactionMessageEnable=false
  33. sendMessageThreadPoolNums=128
  34. pullMessageThreadPoolNums=128

rocketmq02主机配置文件
  1. [root@rocketmq02 2m-2s-async]# pwd
  2. /usr/local/rocketmq-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf/2m-2s-async
  3. [root@rocketmq02 2m-2s-async]# egrep -v '^$|^#' broker-a-s.properties
  4. brokerClusterName=Rocketmq-Cluster
  5. brokerName=broker-a
  6. brokerId=1
  7. deleteWhen=04
  8. fileReservedTime=48
  9. brokerRole=SLAVE
  10. flushDiskType=ASYNC_FLUSH
  11. namesrvAddr=192.168.20.2:9876;192.168.20.3:9876;192.168.20.4:9876
  12. listenPort=10911
  13. defaultTopicQueueNums=4
  14. autoCreateTopicEnable=false
  15. autoCreateSubscriptionGroup=false
  16. mapedFileSizeCommitLog=1073741824
  17. mapedFileSizeConsumeQueue=50000000
  18. destroyMapedFileIntervalForcibly=120000
  19. redeleteHangedFileInterval=120000
  20. diskMaxUsedSpaceRatio=88
  21. storePathRootDir=/usr/local/rocketmq-4.7.0/data/store
  22. storePathCommitLog=/usr/local/rocketmq-4.7.0/data/store/commitlog
  23. storePathConsumeQueue=/usr/local/rocketmq-4.7.0/data/store/consumequeue
  24. storePathIndex=/usr/local/rocketmq-4.7.0/data/store/index
  25. storeCheckpoint=/usr/local/rocketmq-4.7.0/data/store/checkpoint
  26. abortFile=/usr/local/rocketmq-4.7.0/data/store/abort
  27. maxMessageSize=65536
  28. flushCommitLogLeastPages=4
  29. flushConsumeQueueLeastPages=2
  30. flushCommitLogThoroughInterval=10000
  31. flushConsumeQueueThoroughInterval=60000
  32. checkTransactionMessageEnable=false
  33. sendMessageThreadPoolNums=128
  34. pullMessageThreadPoolNums=128

rocketmq03主机配置文件
  1. [root@rocketmq03 2m-2s-async]# pwd
  2. /usr/local/rocketmq-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf/2m-2s-async
  3. [root@rocketmq03 2m-2s-async]# egrep -v '^$|^#' broker-b.properties
  4. brokerClusterName=Rocketmq-Cluster
  5. brokerName=broker-b
  6. brokerId=0
  7. deleteWhen=04
  8. fileReservedTime=48
  9. brokerRole=ASYNC_MASTER
  10. flushDiskType=ASYNC_FLUSH
  11. namesrvAddr=192.168.20.2:9876;192.168.20.3:9876;192.168.20.4:9876
  12. listenPort=10911
  13. defaultTopicQueueNums=4
  14. autoCreateTopicEnable=false
  15. autoCreateSubscriptionGroup=false
  16. mapedFileSizeCommitLog=1073741824
  17. mapedFileSizeConsumeQueue=50000000
  18. destroyMapedFileIntervalForcibly=120000
  19. redeleteHangedFileInterval=120000
  20. diskMaxUsedSpaceRatio=88
  21. storePathRootDir=/usr/local/rocketmq-4.7.0/data/store
  22. storePathCommitLog=/usr/local/rocketmq-4.7.0/data/store/commitlog
  23. storePathConsumeQueue=/usr/local/rocketmq-4.7.0/data/store/consumequeue
  24. storePathIndex=/usr/local/rocketmq-4.7.0/data/store/index
  25. storeCheckpoint=/usr/local/rocketmq-4.7.0/data/store/checkpoint
  26. abortFile=/usr/local/rocketmq-4.7.0/data/store/abort
  27. maxMessageSize=65536
  28. flushCommitLogLeastPages=4
  29. flushConsumeQueueLeastPages=2
  30. flushCommitLogThoroughInterval=10000
  31. flushConsumeQueueThoroughInterval=60000
  32. checkTransactionMessageEnable=false
  33. sendMessageThreadPoolNums=128
  34. pullMessageThreadPoolNums=128

rocketmq04主机配置文件
  1. [root@rocketmq04 2m-2s-async]# pwd
  2. /usr/local/rocketmq-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf/2m-2s-async
  3. [root@rocketmq04 2m-2s-async]# egrep -v '^$|^#' broker-b-s.properties
  4. brokerClusterName=Rocketmq-Cluster
  5. brokerName=broker-b
  6. brokerId=1
  7. deleteWhen=04
  8. fileReservedTime=48
  9. brokerRole=SLAVE
  10. flushDiskType=ASYNC_FLUSH
  11. namesrvAddr=192.168.20.2:9876;192.168.20.3:9876;192.168.20.4:9876
  12. listenPort=10911
  13. defaultTopicQueueNums=4
  14. autoCreateTopicEnable=false
  15. autoCreateSubscriptionGroup=false
  16. mapedFileSizeCommitLog=1073741824
  17. mapedFileSizeConsumeQueue=50000000
  18. destroyMapedFileIntervalForcibly=120000
  19. redeleteHangedFileInterval=120000
  20. diskMaxUsedSpaceRatio=88
  21. storePathRootDir=/usr/local/rocketmq-4.7.0/data/store
  22. storePathCommitLog=/usr/local/rocketmq-4.7.0/data/store/commitlog
  23. storePathConsumeQueue=/usr/local/rocketmq-4.7.0/data/store/consumequeue
  24. storePathIndex=/usr/local/rocketmq-4.7.0/data/store/index
  25. storeCheckpoint=/usr/local/rocketmq-4.7.0/data/store/checkpoint
  26. abortFile=/usr/local/rocketmq-4.7.0/data/store/abort
  27. maxMessageSize=65536
  28. flushCommitLogLeastPages=4
  29. flushConsumeQueueLeastPages=2
  30. flushCommitLogThoroughInterval=10000
  31. flushConsumeQueueThoroughInterval=60000
  32. checkTransactionMessageEnable=false
  33. sendMessageThreadPoolNums=128
  34. pullMessageThreadPoolNums=128

修改java虚拟机默认参数

这个步骤根据实际情况,选择性的配置即可,如果你的机器内存较小,建议修改,否则会因内存分配失败而无法启动broker。

修改runser.sh文件

  1. [root@rocketmq01 rocketmq-4.7.0]# pwd
  2. /usr/local/rocketmq-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0
  3. [root@rocketmq01 rocketmq-4.7.0]# vim bin/runserver.sh # 修改此文件如下配置
  4. JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx1g -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
  5. # Xms:jvm虚拟机最小可用内存大小
  6. # Xmx:jvm虚拟机最大可用内存大小
  7. # Xmn:年轻代内存大小

修改runbroker.sh文件

  1. [root@rocketmq01 rocketmq-4.7.0]# pwd
  2. /usr/local/rocketmq-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0
  3. [root@rocketmq01 rocketmq-4.7.0]# vim bin/runbroker.sh # 修改此文件内容如下
  4. JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx1g -Xmn256m"

启动namesrv

  1. [root@rocketmq01 rocketmq-4.7.0]# nohup sh bin/mqnamesrv &
  2. [root@rocketmq03 rocketmq-4.7.0]# ss -lnpt | grep 9876 # 确定端口在监听
  3. LISTEN 0 128 :::9876 :::* users:(("java",pid=58985,fd=68))
  4. # 如果端口没有正常监听,请从日志或当前目录下的nohup.out文件中找问题
  5. [root@rocketmq01 rocketmq-4.7.0]# cat ~/logs/rocketmqlogs/namesrv.log # 日志文件

启动broker集群

注意:每台主机启动时指定的配置文件都是不一样的。

  1. # 启动master broker-a服务(主机rocketmq01)
  2. [root@rocketmq01 rocketmq-4.7.0]# nohup sh bin/mqbroker -c /usr/local/rocketmq-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf/2m-2s-async/broker-a.properties &>~/logs/rocketmqlogs/br.log &
  3. # 启动slave broker-a-s服务(主机rocketmq02)
  4. [root@rocketmq02 rocketmq-4.7.0]# nohup sh bin/mqbroker -c /usr/local/rocketmq-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf/2m-2s-async/broker-a-s.properties &>~/logs/rocketmqlogs/br.log &
  5. # 启动master broker-b服务(主机rocketmq03)
  6. [root@rocketmq03 rocketmq-4.7.0]# nohup sh bin/mqbroker -c /usr/local/rocketmq-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf/2m-2s-async/broker-b.properties &>~/logs/rocketmqlogs/br.log &
  7. #启动Slave broker-b-s服务(主机rocketmq04)
  8. [root@rocketmq04 rocketmq-4.7.0]# nohup sh bin/mqbroker -c /usr/local/rocketmq-4.7.0/distribution/target/rocketmq-4.7.0/rocketmq-4.7.0/conf/2m-2s-async/broker-b-s.properties &>~/br.log &

查看群集消息,确定无误

  1. [root@rocketmq01 rocketmq-4.7.0]# sh bin/mqadmin clusterList -n 192.168.20.2:9876 # 指定任意一个namesrv节点都可查看到参与集群的节点
  2. RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
  3. RocketMQLog:WARN Please initialize the logger system properly.
  4. #Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
  5. Rocketmq-Cluster broker-a 0 192.168.20.2:10911 V4_7_0 0.00(0,0ms) 0.00(0,0ms) 0 440721.12 -1.0000
  6. Rocketmq-Cluster broker-a 1 192.168.20.3:10911 V4_7_0 0.00(0,0ms) 0.00(0,0ms) 0 440721.12 0.0940
  7. Rocketmq-Cluster broker-b 0 192.168.20.4:10911 V4_7_0 0.00(0,0ms) 0.00(0,0ms) 0 440721.12 -1.0000
  8. Rocketmq-Cluster broker-b 1 192.168.20.5:10911 V4_7_0 0.00(0,0ms) 0.00(0,0ms) 0 440721.12 0.0940

部署rocketmq的web管理界面

这个web界面的部署在任意一台有java和maven环境的主机上部署即可。

在我以这种方式部署完管理界面后,又发现了一个相比较要省事的github项目,有兴趣可以去看一下:github地址:rocketmq-console

  1. [root@rocketmq01 src]# git clone -b release-rocketmq-console-1.0.0 https://github.com/apache/rocketmq-externals.git
  2. [root@rocketmq01 src]# cd rocketmq-externals/rocketmq-console/src/main/resources/
  3. [root@rocketmq01 resources]# egrep -v '^$|^#' application.properties # 修改配置文件
  4. server.contextPath=
  5. server.port=8080 # 自定义监听端口
  6. spring.application.name=rocketmq-console
  7. spring.http.encoding.charset=UTF-8
  8. spring.http.encoding.enabled=true
  9. spring.http.encoding.force=true
  10. logging.config=classpath:logback.xml
  11. # 指定namesrv的监听端口
  12. rocketmq.config.namesrvAddr=192.168.20.2:9876;192.168.20.3:9876;192.168.20.4:9876
  13. rocketmq.config.isVIPChannel=
  14. rocketmq.config.dataPath=/tmp/rocketmq-console/data
  15. rocketmq.config.enableDashBoardCollect=true
  16. [root@rocketmq01 rocketmq-console]# pwd # 确定当前目录
  17. /usr/src/rocketmq-externals/rocketmq-console
  18. [root@rocketmq01 rocketmq-console]# mvn clean package -Dmaven.test.skip=true # 进行编译

启动web管理界面

  1. [root@rocketmq01 rocketmq-console]# pwd
  2. /usr/src/rocketmq-externals/rocketmq-console
  3. [root@rocketmq01 rocketmq-console]# cp -a target/rocketmq-console-ng-1.0.0.jar /usr/local/rocketmq-4.7.0/
  4. [root@rocketmq01 rocketmq-console]# cd /usr/local/rocketmq-4.7.0/
  5. [root@rocketmq01 rocketmq-4.7.0]# nohup java -jar rocketmq-console-ng-1.0.0.jar &> rocket_console.log &
  6. [root@rocketmq01 rocketmq-4.7.0]# ss -lnpt | grep 8080
  7. LISTEN 0 100 :::8080 :::* users:(("java",pid=61037,fd=19))

浏览器访问8080端口测试:

RocketMQ群集部署及web管理页面 - 图3

可以自行添加代理服务器,如nginx来进行访问认证。

ok了,至此结束。