宝塔面板 Webhook 自动部署怎么做
学完这篇,你就能让服务器在每次 git push 之后自动拉取最新代码,不用再登录宝塔面板手动点部署。
第一步:确认站点已经是 Git 仓库
这一步的目标是让网站目录本身就是一个 Git 仓库,并且能手动拉取成功,后面才谈得上自动化。
在宝塔面板「终端」(左侧菜单)里执行:
cd /www/wwwroot/your-site
git status
如果提示 not a git repository,说明目录不是仓库,先克隆下来:
cd /www/wwwroot
rm -rf your-site
git clone git@gitee.com:yourname/your-site.git
注意:一定要先在服务器上手动执行一次
git pull,确认能成功拉取、不弹密码提示。这一步不通过,Webhook 配了也不会生效。
第二步:配置服务器 SSH 免密拉取
这一步是让服务器有权访问你的代码仓库,做完后 git pull 不再需要输入账号密码。
ssh-keygen -t rsa -b 4096 -C "deploy@server"
cat ~/.ssh/id_rsa.pub
复制输出的整段公钥,粘贴到 Git 平台:
- Gitee:右上角头像 →「设置」→ 左侧「SSH 公钥」→ 填标题、粘贴公钥 →「确定」
- GitHub:右上角头像 →「Settings」→「SSH and GPG keys」→「New SSH key」
注意:宝塔面板终端默认以 root 登录,公钥在
/root/.ssh/下。如果 Webhook 脚本以 www 用户执行,会读不到 root 的密钥,这也是后面脚本里要写完整路径的原因之一。
第三步:安装宝塔 Webhook 插件并新建任务
这一步是给服务器开一个「接收推送通知」的入口。
进入宝塔面板左侧「软件商店」→ 搜索框输入 Webhook → 找到宝塔官方插件(Linux 面板 8.x / 9.x 均支持,免费)→ 点「安装」。
安装完成后点「设置」→「添加 Webhook」,填写:
- 名称:
deploy - 执行脚本:
#!/bin/bash
cd /www/wwwroot/your-site || exit 1
git fetch --all
git reset --hard origin/master
git pull origin master
chown -R www:www /www/wwwroot/your-site
保存后,页面会生成一个形如 http://服务器IP:8888/hook?access_key=xxxxxxx¶m=xxxxxxx 的 URL,复制它。
注意:这个 URL 里的
access_key就相当于密码,谁拿到谁就能触发部署,不要发到公开群里。如果面板开启了 SSL,记得把 URL 开头的http改成https,否则请求会被拒绝。另:脚本里的分支名按实际情况改,主分支是main就写main。
第四步:在代码托管平台填 Webhook 地址
这一步是把「代码推送」和「服务器部署」连起来。
Gitee:进入仓库 → 顶部「管理」→ 左侧「Webhook」→「添加 Webhook」→ 粘贴上一步的 URL,密码留空 → 勾选「Push」→「添加」,然后点该条记录右侧的「测试」,看到返回 success 就通了。
GitHub:进入仓库 →「Settings」→ 左侧「Webhooks」→「Add webhook」→ Payload URL 粘贴地址,Content type 选 application/json,最下方选「Just the push event」→「Add webhook」。
注意:如果测试返回超时或连接失败,99% 是云服务器安全组没放行面板端口(默认 8888)。去阿里云/腾讯云控制台的「安全组」里加一条入方向 TCP 8888 规则。部分云厂商默认封禁 8888,也可以在宝塔「面板设置」里把面板端口改成 8080 之类的常见端口。
第五步:验证自动部署
在本地电脑改一行代码,提交并推送:
git add .
git commit -m "test webhook"
git push
推送完成后等 3~5 秒,回到宝塔 Webhook 页面点「日志」,能看到一条执行记录;或者直接在终端 cd /www/wwwroot/your-site && git log -1,看到刚才那条 commit 就说明成功了。
注意:
git reset --hard会丢弃服务器上所有手动改动的文件。如果你曾经直接在服务器上改过代码,先备份。前端项目还需要在脚本末尾加npm run build,并确认服务器装了 Node。
小结
- 部署能自动化的前提是服务器能免密
git pull,先手动跑通再配 Webhook - 宝塔「软件商店」安装 Webhook 插件,脚本里用
cd + git fetch + git reset --hard三步最稳 - Webhook URL 含密钥,别外泄;面板端口要在云服务器安全组放行
- 推送后通过插件「日志」和
git log -1双重验证结果 git reset --hard会覆盖服务器本地改动,脚本里建议追加chown和构建命令
原文链接:https://www.gj0.com/thread-1126.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。