You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让树莓派上的Node.js服务器自动获取GitHub代码变更?

解决方案建议

一、先完成树莓派代码与GitHub仓库的同步

如果还没把树莓派上的代码推到GitHub,先执行以下步骤:

  • 进入树莓派的项目目录,初始化Git仓库:
    git init
  • 添加所有项目文件到仓库:
    git add .
  • 提交初始版本:
    git commit -m "initial commit"
  • 关联你在GitHub创建的空远程仓库:
    git remote add origin 你的GitHub仓库地址
  • 推送到GitHub:
    git push -u origin main

二、在线VS Code编辑代码(用GitHub Codespaces)

直接在GitHub仓库内启动在线VS Code:

  • 打开你的GitHub仓库页面,点击顶部的「Code」按钮,切换到「Codespaces」标签,创建新的Codespace即可在线编辑代码。编辑完成后,提交并推送到main分支即可。

三、树莓派拉取代码并重启服务(核心解决你的问题)

方法1:手动执行(新手友好,快速上手)

每次在线编辑推送代码后,通过SSH连接到树莓派,执行以下命令:

  1. 进入项目目录:
    cd 你的项目绝对路径
  2. 拉取最新代码:
    git pull origin main
  3. 重启Node.js服务:
    • 如果之前用nodemon app.js启动,先终止旧进程:
      pkill -f nodemon
    • 后台重启nodemon:
      nodemon app.js &

方法2:自动拉取+重启(进阶,无需手动操作)

通过webhook监听GitHub推送事件,自动触发更新和重启:

  1. 树莓派上安装webhook工具:
    sudo apt install webhook
  2. 创建钩子配置文件hooks.json(放在项目目录或任意路径),内容如下:
[
  {
    "id": "update-banana-site",
    "execute-command": "/home/pi/update-site.sh",
    "command-working-directory": "/home/pi/你的项目目录",
    "trigger-rule": {
      "and": [
        {
          "match": {
            "type": "payload-hash-sha1",
            "secret": "自定义密钥(比如abc123xyz,越复杂越好)",
            "parameter": {
              "source": "header",
              "name": "X-Hub-Signature"
            }
          }
        },
        {
          "match": {
            "type": "value",
            "value": "refs/heads/main",
            "parameter": {
              "source": "payload",
              "name": "ref"
            }
          }
        }
      ]
    }
  }
]
  1. 创建执行脚本update-site.sh,赋予执行权限:
    chmod +x update-site.sh
    脚本内容:
#!/bin/bash
# 拉取最新代码
git pull origin main
# 重启服务(如果用systemd管理,替换成下面的命令)
# sudo systemctl restart banana.service
pkill -f nodemon
nodemon app.js &
  1. 后台启动webhook服务:
    webhook -hooks hooks.json -port 9000 &
  2. 配置GitHub仓库的webhook:
    • 进入GitHub仓库的「Settings」→「Webhooks」,点击「Add webhook」
    • Payload URL填写:http://你的树莓派公网IP:9000/hooks/update-banana-site(局域网内的树莓派需要在路由器做端口映射,把9000端口映射到树莓派的内网IP)
    • Content type选择application/json
    • Secret填写你在hooks.json里设置的自定义密钥
    • 勾选「Just the push event」,点击「Add webhook」保存

之后每次在线编辑推送代码,GitHub会自动通知树莓派拉取代码并重启服务。

四、更稳定的服务管理建议

用systemd管理Node.js服务,避免进程意外终止,且树莓派重启后自动启动:

  1. 创建systemd服务文件:
    sudo nano /etc/systemd/system/banana.service
  2. 写入以下内容:
[Unit]
Description=Banana Website Service
After=network.target

[Service]
User=pi
WorkingDirectory=/home/pi/你的项目目录
ExecStart=/usr/bin/nodemon app.js
Restart=always

[Install]
WantedBy=multi-user.target
  1. 启用并启动服务:
    sudo systemctl daemon-reload
    sudo systemctl enable banana.service
    sudo systemctl start banana.service
  2. 后续重启服务只需执行:
    sudo systemctl restart banana.service

内容的提问来源于stack exchange,提问作者KozynTheTaquito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 01:00:57