为什么不直接上 CI/CD 平台
先说我的取舍:小项目、个人站、或者服务器本身就不想对第三方暴露部署密钥的场景,GitHub Actions 这类托管 CI/CD 其实有点重。它要你把服务器 SSH 私钥或者部署令牌交给平台托管,还得配 runner。我更想让”push 一下就上线”这件事完全跑在自己这台雨云 VPS 上,密钥不出机器。webhook 自动部署就是干这个的:一个轻量脚本在服务器上听着,Git 平台一推就触发拉取和发布,逻辑你全看得见。
webhook 自动部署到底干了啥
流程很短,但得先理清:
- 你在本地
git push到 Gitea、GitHub 或 GitLab。 - 平台按配置向你的服务器发一个 HTTP POST(就是 webhook)。
- 服务器上的小脚本收到请求,进入网站目录执行
git pull,再按需要重新构建或重启服务。
核心就是”推代码 → 通知 → 拉取 → 发布”四步。比起把整条流水线交给 CI 平台,webhook 只借平台的”通知”能力,真正干活的全在你自己机器上。很多 VPS测评 只比配置和带宽,这种部署链路顺不顺反而没人聊,但它直接决定你改一行代码要花多少时间。
在雨云上把这套跑起来
我习惯用裸仓库(bare repo)加 post-receive 钩子,最省事,不用额外起 web 服务:
# 在雨云VPS上,用部署专用账户
mkdir -p /home/deploy/site.git && cd /home/deploy/site.git
git init --bare
写 hooks/post-receive:
#!/bin/bash
TARGET=/var/www/my-site
GIT_DIR=/home/deploy/site.git
git --work-tree=$TARGET --git-dir=$GIT_DIR checkout -f
cd $TARGET && npm run build 2>/dev/null || true
systemctl restart my-app 2>/dev/null || true
给钩子加执行权限 chmod +x hooks/post-receive,然后在 Git 平台把仓库的 webhook 指向你的服务器 IP 加端口(或走 SSH 推送地址)。如果你不想开端口,纯用 SSH 推送的 bare repo 方案连 web 服务都不用起,最省心。
如果你更想要一个能收 HTTP webhook 的入口(比如配合 Gitea 的 webhook URL),起个最小的 Flask 或 Node 脚本监听一个高位端口,收到带正确 token 的请求才 git pull,也行。国内机房节点记得在控制台安全组和系统防火墙只放行你信任的来源,别把钩子端口裸开在公网。
和你已经跑的服务怎么衔接
- 宝塔 / 1Panel 面板:面板里的网站根目录就是
git checkout的目标,钩子把代码拉进去,面板负责 Nginx 和 PHP 运行,两边不冲突。建站流程里那套从零部署 WordPress的思路也能套:把 wp-content 或主题放进仓库,push 即同步。 - 数据库:发布前最好先对 MySQL 做个备份(MySQL 安装备份调优里讲的定时 dump 思路),万一代码带崩了配置还能回退。
- 和 GitHub Actions 的取舍:GitHub Actions 一键推上云服务器适合多人协作、要跑测试再发布的团队;webhook 裸仓库方案适合一个人、求快、密钥不想出机的场景。两者不矛盾,甚至可以 Actions 跑测试、通过后调你服务器的 webhook 做发布。
几个我踩过的坑
- 钩子环境找不到 git:post-receive 跑在受限 shell 下,有时
git不在 PATH。脚本开头显式写export PATH=/usr/bin:/bin:$PATH,或者直接用绝对路径。 - 权限问题:web 服务(www-data / nginx)要对目标目录有读权限,部署账户要对它有写权限。我一般把目录属主设成部署账户,再让 www-data 进同一个组。
- 构建产物目录:前端项目
git pull后记得npm run build,并把 Nginx 根目录指到dist而不是仓库根,不然会暴露.git。 - 回滚:出问题别手忙脚乱。要么
git checkout 上一个commit,要么部署前先git tag,回滚就是切回旧 tag。 - secret 校验:公网收 webhook 一定要带 token 校验,不然谁都能打你接口触发拉取。GitHub/Gitea 都支持在 URL 里拼
?secret=xxx或在 header 里带签名,脚本里比对一下再执行。
香港、美国节点的几点提醒
香港VPS、美国VPS 这些免备案VPS 节点公网直连方便,收 webhook 不用绕,但同样别裸开端口;用 token 校验 + 安全组限制来源是最低要求。价格上雨云这类节点便宜、性价比高,拿来跑个人站和自动部署很合适。如果你还没开机器,用雨云优惠码 admin01 五折开一台小规格先把这套部署链路跑通,比每次手动 scp 强太多。
使用雨云云服务器及本文所述的自动部署方案,请遵守《网络安全法》《个人信息保护法》《数据安全法》等相关规定,仅部署你拥有合法权利的代码与内容,不将相关能力用于突破国家网络管控或任何违法违规用途。






