16

我有一个想要在 Raspberry Pi 上运行的 Node.js 应用程序。

而且,我希望能够将我的应用程序的新版本以及 Node.js 的新版本远程部署到该 Raspberry Pi。

基本上,例如:

$ pi-update 192.168.0.37 node@0.11.4
$ pi-update 192.168.0.37 my-app@latest

我对如何将我的应用程序转移到 Pi 没有任何偏好,可能是推还是拉。我不在乎(尽管我应该补充一点,应用程序的代码可从私有 GitHub 存储库中获得)。

此外,一旦部署了 Node.js 和/或我的应用程序,我希望重新启动可能正在运行的 Node.js 应用程序。

我怎么能这样做?我应该研究哪个软件?这是可以使用 Raspbian 的工具轻松完成的事情,还是我应该寻找 3rd 方软件(devops 工具,例如 Chef & co.),或者......?

任何帮助是极大的赞赏 :-)

4

3 回答 3

12

a) 要连续运行脚本,您可以使用foreverpm2之类的工具,否则您也可以使应用程序成为 raspian 上的 debian 守护程序,您可以使用它来运行sudo <servicename> start(如果您正在运行 Arch Linux,我猜这会以不同的方式处理)。

b) 如果您的 Raspberry 可以从 Internet 访问,您可以在每次将更改推送到存储库时使用GitHub 挂钩API 文档)运行。这个钩子基本上是你 Pi 上的一个 URL 端点,它在本地运行一个小 shell 脚本。

这个脚本应该优雅地关闭你的应用程序,git pull为你的存储库做一个并再次启动应用程序/服务。您还可以从本地机器通过 SSH 触发此 shell 脚本,例如ssh pi@192.168.0.37 /path/to/your/script

更新脚本可能如下所示:

# change the 'service' command to your script runner of choice
service <yourapp> stop
cd /path/to/your/app
git pull
service <yourapp> start

c) 远程更新 Node 本身的问题是,Raspberry Pi 的官方二进制构建只是非常不规则地出现,否则很容易使用 wget 或 curl 下载/更新二进制文件。所以大多数时候你要么需要在自己的机器上交叉编译 Node,要么花大约两个小时在你的 Pi 上重新编译它。如果你想使用GitHub 上的非官方版本,你可以安装它们,curl -# -L https://gist.github.com/raw/3245130/v0.10.17/node-v0.10.17-linux-arm-armv6j-vfp-hard.tar.gz | tar xzvf - --strip-components=1 -C /usr/local但你需要检查每个版本的文件名。

于 2013-08-25T13:13:41.553 回答
4

只要看看resin.io,你所需要的就是用他们的图像刷新你的rpi,然后git push你的项目。resin.io 将为您的设备架构编译其代码和依赖项,并将结果发送到您的设备(在 docker 文件中)。

于 2015-03-17T05:50:21.520 回答
2

您可以使用supervisor创建一个非常简单的持续集成方案,它会做两件事:

  • 即使失败也能保持你的进程运行,
  • 如果任何文件发生更改,则重新启动您的进程。

保持你的应用程序更新成为一个简单的问题:你只需要运行命令git pull; npm install:当下载代码(甚至节点模块更改)时,主管将自动为你重启应用程序。

如果 Raspberry Pi 在 Internet 上可见,您可以使用GitHub webhook,将其指向一个非常简单的页面,该页面git pull; npm install使用child_process.exec(). (一个重要的注意事项:使用一个重要的 URL(带有代码或其他东西),这样人们就不会误入它。)例如,每隔一小时左右从 crontab 运行这些命令。

至于更新 node.js 本身,我会使用官方的Debian 包,无论是从测试还是从不稳定的获取。否则你将不得不创建一个私人仓库来托管你自己的包,这可能不值得麻烦;但可行。

于 2013-08-25T16:02:31.590 回答