OTA-Docker架构设计&源码

架构设计

Docker容器的主要任务:运行所需的应用程序

Docker容器映射文件目录:完成与本地文件共享数据,OTA-Client控制共享文件目录下的更新和容器的重启

最终实现基于Docker的SOTA应用升级。

整体架构的设计思路如下

  1. 终端需要一个OTA-Client,云端需要一个OTA-Server;
  2. 云端OTA-Server负责上传新文件,终端的OTA-Client负责订阅OTA-Server的更新文件;
  3. 终端的OTA-Client负责接收更新文件,将更新文件放在映射目录(终端和容器共享数据目录)下;
  4. 当终端的OTA-Client接收完成更新文件后,检测当前镜像是否有容器在运行,如果没有容器运行,则绑定映射目录启动容器,自运行启动脚本;如果有容器运行,则关闭当前运行容器,再绑定映射目录启动容器,自运行启动脚本;
  5. 当终端的OTA-Client完成容器的重新启动后,即完成容器应用更新。

OTA协议选择

OTA(Over-The-Air)升级是一种通过无线网络实现远程设备升级的技术,具体实现需要遵循一定的协议标准。MQTT 和HTTP OTA都是常用的OTA升级协议。
下面将从以下几个方面详细分析并对比这两种协议:

传输协议MQTT 使用MQTT协议,而HTTP 使用HTTP协议。MQTT协议是一种轻量级的消息传输协议,适用于低带宽、高延迟、不可靠网络环境下的数据传输。HTTP协议则是一种基于请求-响应模式的协议,用于传输Web上的数据。在传输效率方面,MQTT 由于采用了轻量级的传输协议,数据传输效率要高于HTTP 。
适用场景MQTT 适用于需要快速响应和实时性要求较高的场景,如车联网等。MQTT协议的优点是可以大幅减少通信量、降低通信延迟,实现快速响应。而HTTP 更适用于在网络环境相对稳定的场景中进行升级。
安全性MQTT 可以通过加密和认证等措施提高升级过程的安全性,而HTTP 在传输过程中可能存在安全问题,需要采取额外的安全措施。例如,HTTPS可以提供数据加密和身份验证功能,从而更加安全。
OTA的实现方式MQTT 和HTTP 的实现方式略有不同。MQTT 通常使用MQTT消息队列作为升级包的传输通道,设备可以从MQTT Broker中订阅升级包。而HTTP 则通常使用HTTP服务器作为升级包的来源,设备可以通过HTTP请求下载升级包。
     综上所述,MQTT 和HTTP 各有优缺点,具体应用需要根据场景和要求进行选择。如果要求传输效率高、响应速度快、安全性好,则可以选择MQTT ;如果网络环境相对稳定,可以选择HTTP OTA。在本文中,将MQTT 和HTTP 结合使用,从而兼顾两者的优点,MQTT 用于消息的发布和订阅,HTTP 用于web文件处理和传输。

MQTT服务搭建

MQTT适用于需要快速响应和实时性要求较高的场景,如车联网等。

主要用于消息的发布和订阅。

MQTT Broker 搭建

 sudo apt-get update
 sudo apt-get install mosquitto
 pip install paho-mqtt

查看MQTT服务
systemctl status mosquitto.service 

在这里插入图片描述

查看MQTT服务详细信息
mosquitto -v

在这里插入图片描述
在这里插入图片描述

通信测试

需要在客户端或本机安装mosquitto-clients

sudo apt-get install mosquitto-clients
mosquitto_pub -h 30.178.38.62 -t "wp/test" -m "l want the world\n" -u ellison -P 1
mosquitto_sub -h 30.178.38.62 -t "wp/test" -u ellison -P 1

在这里插入图片描述

HTTP服务搭建

开源代码:https://github.com/weipengyiyu/OTA-Docker

  • 本机的OTA-Client接收服务端下发的更新文件,检测当前本机是否存在此文件,如果存在则删除本机文件,然后更新新文件;如果不存在,之间更新新文件;
  • 在OTA-Server上传文件压缩包文件或者文件目录、文件;
  • 在每一个终端上启动一个OTA-Client,PC端启动OTA-Server,采用分布式-发布订阅的方式进行升级。

服务端

需要配置IP,用户名和密码,以便客户端连接

"mosquitto_pub -h 30.178.38.62 -t 'wp/test' -m 'update file' -u ellison -P 1"

执行下面操作,即可进入HTTP服务端

python3 ota_server.py

进入服务端本地浏览器:http://127.0.1.1:8000/
在这里插入图片描述
其中dirtree.txt如下

directory tree
|____ota_client.py 3.25K
|____README.md 56B
|____dirtree.txt 325B
|____ota_server.py 22.46K

File Path  File Size  File Modify Time
README.md  56B  2023-05-13 19:19:42  
dirtree.txt  325B  2023-05-14 13:21:44  
ota_client.py  3.25K  2023-05-13 19:19:42  
ota_server.py  22.46K  2023-05-13 19:19:42  

选择需要更新应用程序,应用程序以*.tar.gz压缩文件的方式进行上传。当服务端接受完成文件后,会分别发布更新消息到订阅相关需要应用更新的Docker客户端,对应的客户端就会向服务端申请下载文件及更新本地Docker应用程序。

客户端

在执行客户端之前,需要对客户端进行需要更新的压缩文件名、IP 、用户名、密码、订阅的topic_name等相关配置。

在另一台或本机上执行

python3 ota_client.py

容器文件映射

"docker run -it -v /home/wp/ota-client:/root -d weipengyiyu/ubuntu:18.04"

这样在容器启动后,容器内会自动创建/root的目录。通过这种方式,我们可以明确一点,即-v参数中,冒号":"前面的目录是宿主机目录/home/wp/ota-client,后面的目录是容器内目录。

注意:容器目录不可以为相对路径;宿主机目录如果不存在,则会自动生成。

这样即可在容器内操作挂在在宿主机目录下的文件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

踏马潜行

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值