如何做物联网设备的软件部署(基于Linux)?

我正在为客户服务的客户有一批BeagleBones / Raspberry PI在客户地点运作。 这些设备安装在本地networking和防火墙后面。 对于SSH连接有几个选项,但我们仍然在这些设备上的软件部署困难。 目前我们并不依赖容器技术,所以Docker Cloud或者Resin.io不是一种select,但是resin.io看起来很有希望。 我们正在使用AWS IoT进行数据收集。

有关部署的一些要求:

  • 推软件服务器 – >设备
  • 分阶段推出,随着时间推移增加到设备的百分比
  • 回滚软件
  • 设备configuration
  • 没有容器技术

有什么好办法来达到这个目的?

(免责声明:开发者在这里resin.io传道士)。

好的一点是,那些不依赖容器的软件仍然可以打包(而不是相反)。 resin.io中的容器被用作将软件传送到设备上的手段,并实现有趣的,有用的和安全的更新策略,否则这些策略是不可能的或者会更难。 例如:

  • 你的应用程序代码有一个错误(发生!)和崩溃。 这是否取消了包括网络在内的整个设备? (在resin.io容器有助于限制损坏,你的应用程序崩溃,但设备在线,可以更新)
  • 当您有应用程序更新时,是否必须更新整个机器映像? (使用像这样的容器,更新应用程序代码中发生的变化,大部分时间会导致很少的数据流量,并在需要时进行非常快速的更改)
  • 使用这样的容器可以使您几乎不需要停机升级(启动新的应用程序,旧的运行版本将资源移交给新的应用程序)。

这并不是说服你了解容器技术,只是强调你自己的应用程序是否是容器化的(最有可能不是,并且会保持这种状态!),不要选择使用该技术的服务作为其一部分。 每项服务都会尝试以任何必要的方式提供您所需要的功能。

至于你关于resin.io的清单:

  • 推软件服务器 – >设备 :检查, git push resin master ,你的代码正在部署
  • 分阶段发布,随着时间推移增加到一定比例的设备 :不是通用功能集的一部分,但是使用树脂管理程序API很容易实现:例如锁定所有设备的更新,并且您可以选择哪些设备将被解锁并更新。 由于全部都是通过API实现的,因此可以根据您的首选部署策略进行定制
  • 回滚软件 :不是通用功能集(但是)的一部分,但使用git很容易重新推送以前的版本。 需要注意在您的设置中固定库的版本以产生可重复的设置,但在实践中可行。
  • 设备配置 :自动设备设置或通过API / SDK / CLI进行配置可用
  • 没有容器技术 :如上所述,在实践中,您不必过多地关心服务提供软件的方式,因为在大多数情况下,它不会影响您的应用程序的行为方式。

另外,您提到了AWS IoT,还有一些关于将resin.io与AWS集成的文档 ,其中包括一个使用AWS IoT(插入设备并自动获取AWS IoT凭据)自动设备resin.io设备的示例项目。 这可能是你感兴趣的东西。