如何将软件大规模部署到基于 Linux 的 IoT 设备

物联网( IoT) 改变了我们与世界互动的方式,将无数设备连接到互联网,从我们家中的智能恒温器到制造工厂的工业传感器。这些 IoT 设备的很大一部分依赖于 Linux 操作系统,因为它具有灵活性、稳健性和开源特性。

将软件大规模部署到基于 Linux 的设备是一个复杂而关键的过程,需要进行规划、深思熟虑的流程并遵守最佳实践,以确保物联网设备的稳定性、安全性和可管理性。在本文中,我们将探讨在大型基于 Linux 的 IoT 设备上部署软件的一些最佳实践。

使用容器

对于初始部署,请考虑使用容器化部署方法。这涉及将软件及其依赖项打包到容器映像中,然后可以将其巧妙地部署到物联网设备。Docker 容器已迅速成为部署物联网应用程序的热门选择,因为它们提供了许多好处,包括:

● 隔离:容器内的应用程序隔离有助于提高安全性和可靠性。

● 可移植性:Docker容器可以部署到任何支持Docker的平台上,并且可以轻松地将物联网应用程序部署到各种设备上。

● 可重复性:Docker 容器是可重复的,这意味着它们可以在不同的环境中一致地创建和部署。

● 高效:Docker 容器非常节省资源,非常适合内存和存储有限的物联网设备。

● 成熟:Docker 技术成熟、易于理解且得到良好支持。

使用集中管理平台

集中管理平台可用于自动化监控和管理物联网设备群的过程。拥有一个集中式仪表板,可以全面了解车队的运行状况,并能够获取详细信息,可以节省大量时间和精力,同时降低错误风险。

当使用数百或数千台设备时,您会希望物联网设备上安装的上述映像自动“回拨”到管理平台,并以安全的方式在平台上自行注册。

有许多不同的集中管理平台可用,包括商业平台和开源平台。选择平台时,重要的是要考虑您组织的具体需求。该平台可以支持您正在使用的 Linux 版本吗?它可以支持您选择的设备类型吗?它能提供您所需的安全级别吗?它能与您现有和未来的开发工作流程很好地集成吗?

分段您的部署

管理大型车队时,创建分组和子分组层次结构的能力是可扩展管理的基础。分组允许基于共享特征来组织设备,从而促进高效的监控、配置和软件更新。分组可以按位置、设备类型、操作系统、应用程序版本等进行组织。能够从中央仪表板查看特定组将使扩展更易于管理。

自动软件更新

初始部署后的某个时间,您不可避免地需要更新已部署设备上的软件。再次强调,自动化至关重要。您可以编写大量脚本来执行此操作,但它们仍然必须自动查找要更新的设备,安全连接它们,并将更新推送到这些设备 - 希望更新成功。在走这条路之前,请考虑任务的复杂性、错误的风险、所需的时间和资源,以及依赖脚本开发人员的专业知识时可能缺乏支持。

更好的方法是使用物联网管理平台来实现自动化。有许多商业和开源物联网管理平台可以为您自动执行软件更新过程。这些平台通常提供许多功能,使其比自定义脚本更可靠、更高效,例如:

设备注册和发现:物联网管理平台可以自动注册您的设备,无需手动跟踪和更新物联网设备的库存。对于位于其他公共或专用网络和防火墙上的物联网设备,需要一个安全平台来建立和管理与这些设备的连接,即使它们的 IP 地址被防火墙隐藏和保护。

软件更新计划和编排:物联网管理平台可以自动为您的物联网设备计划和编排软件更新。这可确保以受控且高效的方式部署更新。

无线 (OTA) 更新:这似乎是显而易见的,但值得强调。OTA 安全更新无需物理访问设备即可部署更新。这意味着您的团队可以从任何地方将更新部署到任何设备。

分段和版本控制:对于大量的物联网设备,设备的类型和配置可能差异很大,具有不同的实用程序、版本、依赖关系,甚至功能。管理平台必须能够处理不同设备部分的不同更新,即使设备群中可能有数千台设备,并且更新应该足够通用以允许不同的类型和配置。

安全性:物联网管理平台通常提供许多安全功能,以在软件更新过程中保护您的物联网设备。用于验证其真实性的加密连接和安全令牌交换是一个良好的开始。但软件更新不应只限于加密,还应检查软件的合规性和漏洞。

如果您认真对待管理物联网软件更新,我建议使用经过验证的物联网管理平台。从长远来看,这些平台可以为您节省时间、金钱和麻烦。

制定回滚计划

由于物联网设备位置偏远且网络连接不一致,因此更新可能具有挑战性。这就是为什么制定回滚计划很重要,以防部署更新出现问题。回滚计划应该快速将设备恢复到之前的状态。如果您没有回滚计划,并且网络中断导致更新停止,您可能会发现许多设备不再工作,从而需要昂贵的现场访问。如果更新失败,正确部署的设备应自动回滚到之前的工作状态。

您可以维护回滚映像并尝试将该映像重新发布到设备。然而,即使使用脚本,该选项也感觉非常手动和乏味,并且它假设您可以访问故障设备。一些物联网管理平台部署智能客户端来帮助管理与设备的安全连接,包括在更新失败后将设备恢复到之前状态的能力。

采用物联网 DevOps

IoT 开发可能还处于初级阶段,可能尚未成为主流DevOps流程的一部分 - 您可能仍处于实验的早期阶段。一旦准备好扩展,您就需要将 IoT 纳入 DevOps 范围。不用说,处理数千个已部署设备的规模和成本是巨大的。

DevOps 是确保无缝高效地交付物联网设备软件开发、更新和增强功能的重要方法。通过将 IoT 开发集成到已建立的工作流程中,您将获得改进的协作、敏捷性、有保证的交付、控制和可追溯性,这是现代 DevOps 流程的一部分。

保护您的部署过程

使用安全的部署流程来保护您的 IoT 设备免受未经授权的访问、无意的漏洞和恶意软件的侵害至关重要。安全部署必须包括访问设备和管理平台的强大身份验证方法。设备与管理平台之间传输的数据应进行加密保护。部署后客户端设备连接到平台的方式也应始终加密。

为了确保物联网设备有效并且与其通信的管理平台也有效,应该进行令牌交换来验证客户端和平台。换句话说,设备和平台都应该生成和交换独特且难以伪造的代币。然后,这些令牌可用于验证设备和平台的身份。

除了加密之外,您还必须考虑软件本身的安全性。该软件是否没有漏洞?部署前是否已扫描潜在漏洞?在整个开发过程中都是这样做的吗?如果您正在利用开源软件,可以使用cve.org和vulndb等漏洞数据库来提供有关特定软件包的信息。

除了软件本身之外,还应考虑检查是否存在可能使设备容易受到攻击的潜在部署错误配置。要自动化此过程,请考虑使用软件组合分析(SCA) 工具来扫描漏洞,或许还可以使用静态应用程序安全测试(SAST) 工具来帮助开发人员在部署之前找到代码中的弱点。虽然这些工具很有用,但有时它们可​​能会因误报而让开发人员不知所措。为了减少错误警报并避免浪费时间和精力,请找到一种可以考虑软件应用程序用例上下文的现代工具。

安全扫描应该在整个软件开发生命周期(从编码到部署)中持续进行。将自动化安全流程构建到 DevOps 流程中将对安全部署大有帮助。DevOps 和 SecOps 的合并通常被称为DevSecOps,并且应该被视为当今软件开发中的标准实践。

自动监控和警报

监控大型物联网设备对于确保其性能、安全性和可靠性至关重要。通过不断收集和分析物联网设备的数据,组织可以深入了解其使用模式、识别潜在问题并采取纠正措施。考虑到规模,自动化监控和警报过程的能力应该是一个要求。设备是否离线?是否超出了 CPU、磁盘或内存使用的预配置设备阈值?正在监视的特定进程是否仍然处于活动状态?通过自动化所有设备的监控和警报,您可以在问题升级之前解决问题。

实施远程访问

现场工作费用昂贵。应尽可能避免人员成本、时间和身体旅行。这就是为什么远程访问设备至关重要。如果设备出现故障需要手动干预,远程终端访问可以挽救局面,因为开发人员可以无缝访问设备,就像设备在办公桌上一样。最常见的方法是使用 SSH(安全外壳)。SSH 是一种安全协议,允许您连接到远程计算机并直接在设备上运行脚本和命令。您需要确保设备进行相应配置以支持此功能。

当设备部署在防火墙后面的专用网络上时,您将不知道设备的 IP 地址,也无法使用标准 SSH 穿过防火墙。常见的方法是使用反向 SSH 隧道,也称为 SSH 端口转发。这允许您从本地主机连接到远程主机,即使远程主机位于防火墙后面。它的工作原理是创建从设备启动到外部计算机的 SSH 隧道。此隧道允许您访问设备,就好像它与您的计算机位于同一网络上一样。

更好的选择是使用强大的物联网管理平台来管理您的车队,该平台拥有与企业一起开发和部署应用程序的良好记录。该平台为您希望监督和管理的每台设备部署一个轻量级智能代理应用程序。该代理可以处理中央物联网平台的连接、安全、监控、警报以及安全远程访问设备所需的基本反向 SSH 信息。然后,中央仪表板将提供整个车队的整体视图,提供适应您不断变化的规模和要求所需的可见性和框架。

不要单独行动

作为开发人员,您可能会想要构建自己的自定义平台和智能代理来管理您的物联网车队。这需要时间、专业知识以及对少数内部专家的大量信任投资。要更新、控制和管理大型且关键任务的物联网设备,与具有良好记录的专业、成熟的供应商合作更为实际。这将使您的开发团队能够专注于构建出色的物联网应用程序,而不必构建和维护基础设施来管理它们。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/477299.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

react-jsx

react04 jsx语法 - 01 基础知识: jsx javascript xml(html) 把js和heml标签混合到一起 react视图编写及构建的简要流程 : 如何在react中使vs code支持格式化和快捷键提示:1, 2,修改文件后缀为jsx,因为webpack的打包规则中可以…

【蓝桥杯】RMQ(Range Minimum/Maximum Query)

一.概述 RMQ问题,是求区间最大值或最小值,即范围最值问题。 暴力解法是对每个询问区间循环求解,设区间长度n,询问次数m,则复杂度是O ( nm )。 一般还可以使用线段树求解,复杂度是O(mlogn)。 但还有一种…

守护数据安全,远离.locked勒索病毒:有效防御策略分享

导言: 随着信息技术的飞速发展,网络空间的安全问题日益凸显,其中勒索病毒便是一种严重的网络安全威胁。近年来,.locked勒索病毒逐渐进入人们的视野,其强大的破坏性和高隐蔽性使得许多个人和企业深受其害。本文将对.lo…

比堆垛机方案省电65% 实施快50% 四向车系统柔性化建设进程异军突起

对物流企业来说,供应链的数智化升级并非“赶时髦”,它需要找到一个既懂物流行业,又有数字化技术作基础的仓储方案提供商。而河北沃克基于AI底层技术、软硬一体化产品体系和技术创新行业经验双轮驱动的业务团队等“技术产品人才”三位一体优势…

AndroidStudio 由dolphin升级到giraffe,出现“gradle project sync failed“

1 现象描述 将AS由之前的dolphin版本升级到giraffe之后,接着打开以前的Android project,出现了"Gradle project sync failed…"的异常提示,在build面板中并没有出现project sync过程中报错的日志。 异常提示如下图所示&#xff1a…

知识蒸馏——深度学习的简化之道 !!

文章目录 前言 1、什么是知识蒸馏 2、知识蒸馏的原理 3、知识蒸馏的架构 4、应用 结论 前言 在深度学习的世界里,大型神经网络因其出色的性能和准确性而备受青睐。然而,这些网络通常包含数百万甚至数十亿个参数,使得它们在资源受限的环境下&…

【OpenGL手册19】几何着色器

目录 一、说明 二、渲染管线的逻辑 三、几何着色器 四、使用几何着色器 五、造几个房子 六、几何着色器渲染爆破物体 一、说明 如果说用顶点和片段着色器干了什么,其实不多。加入几何着色器,能够加大渲染能力,简化数据结构,…

前端项目部署后,如何提示用户版本更新

目录 前言解决方案1、public目录下新建manifest.json2、写入当前时间戳到manifest.json3、检查版本更新4、woker线程5、入口文件引入 可能出现的问题好书推荐 前言 项目部署上线后,特别是网页项目,提示正在操作系统的用户去更新版本非常 important。一般…

Java并发

目录 线程 什么是线程 进程和线程的区别 线程的生命周期 什么是多线程 并发与并行 多线程的三种实现方式 继承Thread类 1.创建类继承Thread类 2.重写run()方法 3.创建对象启动线程 实现Runnable接口 1.自己定义一个类实现Runnable接口 2.重…

java-11-openjdk-11.0.xxx/lib/tzdb.dat (No such file or directory)

项目用的是JAVA 11 build 的时候报错 ava-11-openjdk-11.0.xxx/lib/tzdb.dat (No such file or directory)这个问题困扰了很久,最终在redhat 上找到了root case: 该版本JDK 有bug 别挣扎了直接升级JDK

进程创建,程序加载运行,以及进程终止,什么是僵尸进程,什么是孤儿进程

进程控制 创建进程,撤销进程,实现进程转换(必须一气呵成,使用原语) 原语不被中断是因为有关中断指令 创建进程 撤销进程 进程创建fork fork()函数会创建一个子进程,子进程会返…

HarmonyOS 应用开发案例

本帖下方集中了HarmonyOS Next应用开发时,会遇到的常见应用案例。后续会持续更新大量案例,帮助开发者快速学习。欢迎感兴趣的同学加入Q:454901491 72.手写绘制及保存图片案例(0319更新)(点此查看源码实现&…

数字孪生与智慧城市:重塑城市生活的新模式

随着信息技术的迅猛发展,数字孪生作为一种新兴的技术理念,正在逐渐改变城市建设和管理的传统模式。智慧城市作为数字孪生技术应用的重要领域,正在以其独特的优势和潜力,重塑着城市生活的方方面面。本文将从数字孪生的概念、智慧城…

Nginx:部署及配置详解(linux)

Nginx:部署及配置详解(linux) 1、nginx简介2、安装编译工具及库文件3、安装 pcre4、nginx安装5、nginx配置文件nginx.conf组成6、nginx配置实例-反向代理7、nginx 配置实例-负载均衡 💖The Begin💖点点关注&#xff0c…

计算机组成原理 双端口存储器原理实验

一、实验目的 1、了解双端口静态随机存储器IDT7132的工作特性及使用方法 2、了解半导体存储器怎样存储和读出数据 3、了解双端口存储器怎样并行读写,产生冲突的情况如何 二、实验任务 (1)按图7所示,将有关控制信号和和二进制开关对应接好,…

Umi-OCR:开源、免费的离线OCR软件,一键解码万物语言,图像转文本轻松搞定!

Umi-OCR:瞬间捕获,字句跃然眼前!精准识别图文信息,让数据提取无限拓展! - 精选真开源,释放新价值。 概览 Umi-OCR是一款强大的开源光学字符识别(OCR)工具,致力于打破现实…

Arduino IDE工程代码多文件编程和中文设置

一、esp8266模块信息 二、中英文切换 点击文件( File )–选择首选项( Preference )—选择语言( Language )—选择中文–点击确定( OK ) 三、多文件编程 在Arduino编程中,将代码分割成多个文件是一种很好的做法,特别是项目变得越来越大和复杂时。这样…

SAP HCM 0008信息类型间接评估与直接评估

如果在间接评估模块输入就是间接评估(tarif是读取下图中的数据 a代表不需要输入工资项,b表示需要找工资相) 不输入就是直接评估需要客户自己输入数字 第2个情况 summe求和 (比如在0008中输入9000与9001 那么自动求出9002工资项数…

分布式锁简单实现

分布式锁 Redis分布式锁最简单的实现 想要实现分布式锁,必须要求 Redis 有「互斥」的能力,我们可以使用 SETNX 命令,这个命令表示SET if Not Exists,即如果 key 不存在,才会设置它的值,否则什么也不做。 …

SQLiteC/C++接口详细介绍sqlite3_stmt类(九)

返回:SQLite—系列文章目录 上一篇:SQLiteC/C接口详细介绍sqlite3_stmt类(六) 下一篇: 无 33、sqlite3_column_table_name 函数 sqlite3_column_table_name 用于返回结果集中指定列所属的表的名称。如果查询中列使…