不能直接用,宝塔不提供Git Hook服务端监听能力;需通过Webhook接收+本地脚本执行实现无缝部署,或定时轮询(不推荐)。

Git Hooks 能不能直接在宝塔里用?
不能直接用,宝塔面板本身不提供 Git Hook 服务端监听能力。你提交代码到 GitHub/GitLab 后,远程仓库没法主动通知宝塔服务器“该拉新代码了”。常见误区是以为在宝塔文件管理里点个“Git 拉取”就叫自动化——那只是手动触发,不是无缝部署。
真正可行的路径只有两条:Webhook 接收 + 本地脚本执行,或 定时轮询拉取(不推荐)。前者才是“无缝”的核心。
- Webhook 方式需要一个轻量 HTTP 服务接收 POST 请求(比如用 Python 的
Flask或 Node.js 的express) - 这个服务必须能被公网访问(或内网穿透),否则 GitHub/GitLab 发不出回调
- 接收到请求后,脚本需校验
X-Hub-Signature-256(GitHub)或X-Gitlab-Token(GitLab),防恶意调用 - 验证通过后,
cd /www/wwwroot/your-site && git pull origin main才安全
怎样让宝塔网站根目录支持 git pull?
默认新建站点时,宝塔不会初始化 Git 仓库,git pull 必然失败。必须先在目标目录完成首次克隆或关联远程仓库。
操作顺序不能错:
- 进宝塔终端,
cd /www/wwwroot/your-site - 若目录为空:运行
git clone https://github.com/xxx/yyy.git .(注意末尾的.) - 若已有代码:先
git init,再git remote add origin https://github.com/xxx/yyy.git - 确认分支名一致:
git branch -M main(GitHub 默认主分支是main,不是master) - 设好 SSH Key 或使用 HTTPS + Token(避免交互式密码输入导致
git pull卡住)
特别注意:/www/wwwroot/your-site 目录权限要能让 Webhook 脚本用户(如 www 或 root)读写,否则 git pull 权限拒绝。
Webhook 脚本怎么写才不被宝塔重启干掉?
宝塔重启、系统 reboot 后,你手动跑的 python webhook.py 就断了。必须做成系统服务,且不能依赖宝塔进程生命周期。
- 用
systemd管理最稳:写一个/etc/systemd/system/webhook.service,指定User=www和工作目录 - 禁止用
nohup &或screen—— 宝塔更新或系统维护时大概率被 kill - 脚本里执行
git pull前,务必加cd /www/wwwroot/your-site && git reset --hard && git clean -fd,防止冲突或残留文件干扰 - 日志重定向到文件(如
> /var/log/webhook.log 2>&1),方便排查git pull报错“Permission denied (publickey)”这类问题
为什么改了代码,Webhook 触发后网站没更新?
90% 是因为静态资源没刷新,或者 PHP/Node.js 进程没重载。Git 拉取成功 ≠ 网站实时生效。
- 前端项目(Vue/React):拉取后需自动运行
npm install && npm run build,生成新dist/内容 - PHP 项目:如果用了 OPcache,得调用
opcache_reset()或重启php-fpm(宝塔里可执行bt restart php) - Node.js 项目:Webhook 脚本里不能只
git pull,还得pm2 reload app或systemctl restart my-node-app - 检查宝塔「网站」→「设置」→「SSL」或「伪静态」是否缓存了旧响应,临时关掉试试
最容易被忽略的是:Webhook 服务和网站运行用户不一致,导致拉下来的文件属主是 root,但 www 用户无法读取——记得 chown -R www:www /www/wwwroot/your-site。

















