将Node.js和Node.js应用部署到树莓派上

17

我有一个 Node.js 应用程序,想在树莓派上运行。

而且,我希望能够远程部署我的应用程序的新版本以及 Node.js 的新版本到那个树莓派上。

基本上,需要实现这样的功能:

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

我对如何将我的应用程序传输到 Raspberry Pi 上没有任何偏好,不管是推送还是拉取都可以。我并不在意(尽管我应该补充说明,该应用程序的代码可从私人 GitHub 存储库获取)。

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

我该如何做?应该查找哪些软件?这是否可以使用来自 Raspbian 的工具轻松完成,还是应该寻找第三方软件(devops 工具,例如 Chef&co.),或者......?

非常感谢任何帮助 :-)

3个回答

12

a) 为了使脚本持续运行,您可以使用 foreverpm2 等工具,否则您还可以将应用程序变成 raspian 上的 debian 守护进程,然后可以使用 sudo <servicename> start 运行(如果您正在运行 Arch Linux,则处理方式可能不同)。

b) 如果您的 Raspberry 可以从互联网访问,您可以使用一个 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 自身的问题在于,树莓派的官方二进制构建版本出现不规则性,并不经常,否则只需要使用 wget 或 curl 下载/更新二进制文件就很容易了。因此大部分时间你需要在自己的机器上进行交叉编译,或者花费约两个小时在树莓派上重新编译它。如果你想使用 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安装它们,但你需要检查每个版本的文件名。


关于远程更新Node.js本身,您有什么建议吗?如果树莓派无法从互联网访问,只能在本地区域网络中访问怎么办?那么GitHub钩子就不起作用了,我猜;-) - Golo Roden
1
已更新上面的答案。如果树莓派在您的本地网络上并且具有互联网连接,则只需在本地或通过SSH运行shell脚本即可。 - Frederic
1
获取最新的Node.js发布版本变得更加容易了,只需查看:http://nodejs.org/dist/latest/ 并找到node-v<version>-linux-arm-pi.tar.gz的最新版本。 - Frederic

4
无需再寻找,就在 resin.io。你只需要使用他们的镜像刷新你的树莓派,然后 git push 你的项目。resin.io 将为你的设备架构编译其代码和依赖项,并将结果发送到你的设备(以 Docker 文件形式)。

2
您可以使用supervisor创建一个非常简单的持续集成方案,它可以完成以下两个任务:
  • 即使进程失败也能保持其运行状态
  • 如果文件发生更改,则重新启动进程。
这变成了一个简单的问题,只需运行git pull; npm install命令即可更新您的应用程序:当代码被下载(或甚至节点模块发生更改)时,supervisor将自动为您重启应用程序。
如果树莓派在Internet上可见,您可以使用GitHub webhook,将其指向运行命令git pull; npm install的非常简单的页面,使用child_process.exec()。(一个重要的注意事项:使用一个非平凡的URL(带有代码或其他内容),以免人们错误地运行它。)否则,每隔一小时左右从crontab中运行这些命令即可。
关于更新node.js本身,我会使用官方的Debian软件包,可以从测试中获取或者从不稳定源获取。否则,你需要创建一个私有仓库来托管自己的软件包,这可能不值得麻烦,但是可行的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接