MQTT从零开始学习和部署

746 阅读12分钟

下载链接:mqttx.app/zh ,支持windows,mac,linux

免费的公共 MQTT 服务器:broker.emqx.io

mqtt开源:www.emqx.com/zh

mqtt中文文档:mqtt.p2hp.com/

MQTT协议入门:基础知识和快速教程:www.emqx.com/zh/blog/the…

阿里云部署mqtt broker

www.emqx.com/zh/download…

我的服务器是ubuntu,在ubuntu上安装mqtt见链接:docs.emqx.com/zh/emqx/lat…

sudo systemctl stop emqx

mqtt启动成功后,确保外网可以访问mqtt,需要给我们的阿里云服务器配置安全组:

image.png

其中18083端口是访问mqtt控制台的,1883端口则是开放给各设备、客户端链接的

当成功配置安全组后,还需要去我们的阿里云服务器上执行如下命令,防止开启了防火墙导致端口访问不通。可以参考:# 阿里云服务器开放端口的最最最正确的方法

# 开放18083端口
firewall-cmd --zone=public --add-port=18083/tcp --permanent 
# 开放1883端口
firewall-cmd --zone=public --add-port=1883/tcp --permanent

# 重新加载防火墙使开放的端口即时生效
firewall-cmd --reload

# 查看开放的公共端口列表 或者:firewall-cmd --list-all
firewall-cmd --zone=public --list-ports

如果在执行上述命令时提示:FirewallD is not running,可能时firewalld服务没有启动起来,尝试执行如下命令即可:
启动FirewallD服务命令:

systemctl start firewalld.service #开启服务  
systemctl enable firewalld.service #设置开机启动

emqx客户端:http://139.196.123.173:18083/ 用户名密码:admin public

如果使用spring项目启动client去连接emqx的时候报错:代理程序不可用。可以下面的插件禁用掉试一试!

1721543295842.png

hivemq

就是上面的Broker,消息转发器,消息传递平台 HiveMQ是基于MQTT协议的消息传递平台, HiveMQ完全支持所有标准MQTT功能,并提供扩展功能

参考:blog.csdn.net/weixin_4463…

//docker方式
1.下载并运行hivemq
	 docker run -p 8080:8080 -p 1883:1883 hivemq/hivemq4

2.浏览器输入http://localhost:8080
    用户:admin         密码:hivemq

docker如果下载速度很慢,可以配置镜像加速器:cr.console.aliyun.com/cn-shanghai…

1. 配置镜像加速器

#如果不存在的话
sudo mkdir -p /etc/docker  
sudo vi /etc/docker/daemon.json 
{
   "registry-mirrors": [
       "https://hub-mirror.c.163.com",
       "https://ustc-edu-cn.mirror.aliyuncs.com", "https://ghcr.io",
       "https://mirror.baidubce.com",
      "https://阿里云你自己的加速器地址"]
}

***其中 加速地址 可以访问: cr.console.aliyun.com/cn-shanghai… 点击左边的镜像中心-镜像加速器 查看。

2. 重启docker相关服务

sudo systemctl daemon-reload 
sudo systemctl restart docker

配置安全组实现公网访问8080和1883端口,配置阿里云服务器防火墙重启防火墙

ubuntu docker部署emqx

# 拉取4.3版本的镜像
docker pull emqx:4.3
# 启动 docker 容器
docker run -d --name emqx-gt485 -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8883:8883 -p 8084:8084 -p 18083:18083 emqx:4.3
# 进入docker容器
docker exec -it --user=root 容器id bash
# 安装vim
apt-get upgrade
apt-get install vim
或者
apt-get update
apt-get install -y vim

ubuntu mysql卸载

要在Ubuntu系统上卸载MySQL,你可以使用以下命令:

  1. 首先,通过以下命令停止MySQL服务:
sudo systemctl stop mysql
  1. 然后,通过以下命令卸载MySQL服务器:
sudo apt-get remove --purge mysql-server mysql-client mysql-common
  1. 清除残留的配置和数据文件:
sudo rm -rf /etc/mysql /var/lib/mysql
sudo apt-get autoremove
sudo apt-get autoclean

ubuntu mysql安装

可以参考:blog.csdn.net/qq_19253847…

进入opt:cd /opt/

更新apt仓库信息,输入下列命令:apt update

安装mysql服务:apt install -y mysql-server

查看mysql服务状态::systemctl status mysql,提示:

● mysql.service - MySQL Community Server
     Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
     Active: active (running) since Tue 2024-07-16 23:44:12 CST; 35s ago
   Main PID: 10364 (mysqld)
     Status: "Server is operational"
      Tasks: 38 (limit: 2194)
     Memory: 361.9M
     CGroup: /system.slice/mysql.service
             └─10364 /usr/sbin/mysqld

Jul 16 23:44:11 iZuf63y0r6z2tc37u0q5l8Z systemd[1]: Starting MySQL Community Server...
Jul 16 23:44:12 iZuf63y0r6z2tc37u0q5l8Z systemd[1]: Started MySQL Community Server.

为root用户设置密码

mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'z04c09f11';
LUSH PRIVILEGES;
exit;

对mysql进行初始化

执行下列命令,此命令是mysql安装后自带的配置程序

mysql_secure_installation,输入上面的密码

Securing the MySQL server deployment.

Enter password for user root: 
Error: Access denied for user 'root'@'localhost' (using password: YES)
root@iZuf63y0r6z2tc37u0q5l8Z:/opt# mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root: 

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: 
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : 

 ... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : 

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : 

 ... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done! 

是否开启密码验证插件,如果需要增强密码安全性,输入y并回车,不需要增强直接回车即可

是否更改root密码,需要输入y回车,不需要直接回车,因为刚才该过了这里直接回车

是否移除匿名用户,移除输入y回车,不移除直接回车,这里设置移除

是否禁止root用户远程登陆,禁止输入y回车,不禁止直接回车,这里选择不禁止

是否移除自带的测试数据库,移除输入y回车,不移除直接回车,这里选择不移除

是否刷新权限,输入y刷新,直接回车不刷新,这里选择y刷新

重新进入mysql use mysql; 更新root访问权限为 ‘%’ 为所有主机可访问 update user SET Host = '%' where User = 'root';

建新的test用户,确认密码为Ttest123,允许在任意主机登录

create user test@"%" identified by 'Ttest123';

赋与zabbix用户在任意主机登陆所有数据库及更改权限

grant all privileges on . to 'test'@'%' with grant option;

set global log_bin_trust_function_creators = 1;

刷新权限

flush privileges;

允许远程连接访问mysql

改/etc/mysql/mysql.conf.d/mysqld.cnf文件,有的修改/etc/my.cnf具体根据自身环境来

vim /etc/mysql/mysql.conf.d/mysqld.cnf,原始文件如下:

修改 bind-address = 0.0.0.0 (远程连接访问)

重启mysql

sudo systemctl restart mysql

阿里云配置安全组,可以公网远程访问mysql

image.png

开放3306端口 
firewall-cmd --zone=public --add-port=1883/tcp --permanent
# 重新加载防火墙使开放的端口即时生效
firewall-cmd --reload

使用navicat远程连接mysql

image.png

ubuntu jdk8安装

更新包列表:sudo apt update 安装OpenJDK 8:sudo apt install openjdk-8-jdk 验证安装是否成功:java -version

设置JAVA_HOME环境变量

找到JDK 8的安装路:update-alternatives --list java /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

然后,编辑~/.bashrc~/.profile文件,在文件末尾添加JAVA_HOME变量和更新PATH变量:

vim ~/.bashrc

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

source ~/.bashrc

阿里云服务器安装宝塔

ecs服务器实例右下角显示如下,按照提示按照即可

image.png

最后在任务执行管理中找到输出日志,里面有访问宝塔的公网地址

image.png

通过日志里提示的公网地址、用户名和密码登录宝塔,如果提示用户名密码一直输入错误,可以去我们的服务器执行'bt 14'查看真正的用户名和密码。如果看不到密码,可以执行bt 5修改密码

通过宝塔安装的redis的配置文件位置:/www/server/redis/redis.conf

image.png

  1. 查找配置文件中的#requirepass项。
  2. 设置密码:将#requirepass项的注释去掉,并在其后面添加一个密码。例如:requirepass YourPassword,将YourPassword替换为你想要设置的密码

requirepass xx123456

允许远程访问 bind 127.0.0.1 改成 bind 0.0.0.0

启动Redis服务,使密码配置生效: sudo systemctl restart redis

如果您的服务器运行着防火墙,确保允许外部访问Redis监听的端口(默认为6379)。 例如,如果您使用的是iptables,可以添加以下规则来允许远程连接: sudo iptables -A INPUT -p tcp --dport 6379 -j ACCEPT

# 开放6379端口 
firewall-cmd --zone=public --add-port=6379/tcp --permanent 
# 重新加载防火墙使开放的端口即时生效 
firewall-cmd --reload

使用命令行工具连接到Redis,并验证密码是否生效。可以使用以下命令连接到Redis: redis-cli

redis-cli -h localhost -p 6379

redis-cli -h localhost -p 6379 -a xx123456

ubuntu rabbitmq安装

建立一个文件夹用于存放mq产生的数据:

mkdir /data/rabbitmq -p

基于docker安装mq(直接拉取镜像加挂载配置文件目录)

方式1:用户名密码都是guest:
docker run -d --hostname rabbit-svr --name rabbit -p 5672:5672 -p 15672:15672 -p 25672:25672 -v /data/rabbitmq:/var/lib/rabbitmq rabbitmq:management

方式2:设置新用户名和密码:
docker run -d --hostname rabbit-svr --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=xx1811 -p 5672:5672 -p 15672:15672 -p 25672:25672 -v /data/rabbitmq:/var/lib/rabbitmq rabbitmq:management

命令解释:docker拉取mq的镜像以及对mq的端口进行映射,将需要用的端口从容器中暴露出来。如5672,一般都用这个,这是外部调用的端口。访问ui界面的端口是15672,25672用于部署集群,如果不需要进行集群部署可以暂不设置。

修改密码

 docker exec -it rabbitmq容器id bash
 
 rabbitmqctl change_password guest Tx132.7

检查myq状态

docker ps | grep rabbit
  • -d:后台运行容器。
  • --name:指定容器名。
  • -p:指定服务运行的端口(5672:应用访问端口;15672:控制台Web端口号)。
  • -v:映射目录或文件。
  • --hostname:主机名(RabbitMQ的一个重要注意事项是它根据所谓的“节点名称”存储数据,默认为主机名)。
  • -e:指定环境变量(RABBITMQ_DEFAULT_VHOST:默认虚拟机名;RABBITMQ_DEFAULT_USER:默认的用户名;RABBITMQ_DEFAULT_PASS:默认用户名的密码)。

●启动rabbitmq_management脚本命令如下:

docker exec -it rabbit rabbitmq-plugins enable rabbitmq_management 

开启防火墙15672端口

firewall-cmd --zone=public --add-port=15672/tcp --permanent 
firewall-cmd --zone=public --add-port=5672/tcp --permanent 
firewall-cmd --reload 
--查看是否开通访问权限 
firewall-cmd --permanent --zone=public --query-port=15672/tcp
firewall-cmd --permanent --zone=public --query-port=5672/tcp

登录rabbitmq控制台

139.196.23.173:15672

guest用户进控制台建立新用户分配权限

image.png

创建完用户后,点击用户名lamptest可以给该用户分配更具体的权限(点了没反应直接刷新页面,我这里有点卡

image.png

Dockerfile部署springboot应用

mkdir /home/lamp 上传springboot应用jar包到此目录下 在此目录下创建Dockerfile文件

基于Dockerfile构建镜像

#docker build –f (dockerfile文件路径) –t 镜像名称:版本  .
docker build -f ./Dockerfile -t app .

基于该镜像创建容器

#docker run -id -p 主机端口号:容器端口号 容器名字(app)
docker run -id -p 7777:7777 app

别忘了给7777端口加到ecs安全组中

配置防火墙

开放7777端口 
firewall-cmd --zone=public --add-port=7777/tcp --permanent 
# 重新加载防火墙使开放的端口即时生效
firewall-cmd --reload

idea利用Docker插件部署springboot应用

配置docker远程连接端口

vi /usr/lib/systemd/system/docker.service

找到 ExecStart,在最后面添加 -H tcp://0.0.0.0:2375,如下图所示

image.png

重启docker

systemctl daemon-reload
systemctl restart docker
# 查看2375端口是否开启成功
netstat -nltp | grep 2375

开放端口

firewall-cmd --zone=public --add-port=2375/tcp --permanent  

# 重新加载防火墙使开放的端口即时生效
firewall-cmd --reload

阿里云配置安全组

idea安装Docker插件后重启idea

image.png

配置Docker的远程连接地址

image.png

yum阿里镜像源

为了使用阿里云的YUM镜像源,你需要执行以下步骤:

  1. 备份你当前的YUM仓库配置。
  2. 替换现有的CentOS-Base.repo文件。
  3. 下载阿里云的CentOS仓库配置文件。
  4. 清理YUM缓存并生成新的缓存。

以下是具体的命令:

  1. 备份当前的CentOS-Base.repo sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

  2. 下载阿里云的CentOS仓库配置文件 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo mirrors.aliyun.com/repo/Centos…

  3. 清理YUM缓存 sudo yum clean all

  4. 生成新的缓存 sudo yum makecache

部署

安装宝塔

yum install -y wget && wget -O install.sh https://download.bt.cn/install/install_lts.sh && bash install.sh ed8484bec

centos离线安装docker-compose

可以参考:www.runoob.com/docker/dock… 如果不能在线安装,可以参考以下这种方式:

docker-compose离线包下载路径: github.com/docker/comp…

我选择的版本是v2.19.1

image.png

下载好后上传到我们的linux服务器,依次执行以下命令即可:

mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose

chmod +x /usr/local/bin/docker-compose

sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

docker-compose -v

centos安装tdengine

docker安装tdengine-server

tdengine.yml文件如下:

version: '3.2'
services:
  tdengine:
    image: tdengine/tdengine:2.6.0.8
    container_name: tdengine
    hostname: node1
    ports:
      - 6030-6041:6030-6041/tcp
      - 6030-6041:6030-6041/udp
    volumes:
      - /home/tdengine/data:/var/lib/taos
      - /home/tdengine/log:/var/log/taos
    restart: always
    tty: true
networks:
  my_network:
    external: true

启动tdengine-server

docker-compose -f tdengine.yml up -d

安装tdengine-client

下载链接:docs.taosdata.com/releases/td…

下载好TDengine-client-2.6.0.8-Linux-x64.tar.gz,上传到我们的服务器上使用tar -zxvf TDengine-client-2.6.0.8-Linux-x64.tar.gz解压到本地

修改本机的hostname

vim /etc/hostname

使修改的生效: sudo hostname -F /etc/hostname

修改host映射

vim /etc/hosts image.png 172.16.246.18是本机ip,td1是hostname

修改 /etc/taos/taos.cfg

image.png

firewall-cmd --zone=public --add-port=6030/tcp --permanent
firewall-cmd --zone=public --add-port=6030/udp --permanent
firewall-cmd --reload

执行taos

image.png