Git仓库自动同步部署更新跨境站点
适用场景与准备工作
如果你的跨境站点托管在多台不同地区的服务器上,每次改完代码都要手动SSH进去拉取,不仅累还容易漏。
使用 Git 仓库自动同步部署更新跨境站点,能让远程一提交代码,服务器立即自动更新,省时省力。
你需要准备:
- 一台能外网访问的服务器(已安装LNMP/宝塔面板皆可)
- 一个Git仓库(GitHub / Gitee / GitLab均可)
- 服务器已安装
git(宝塔面板已自带) - 一个用来存放站点的目录(例如
/www/wwwroot/example.com)
如果你还没有初始化Git仓库,先在服务器站点目录里执行 git init 并关联远程仓库。
第一步:配置服务器端自动拉取脚本
在服务器站点目录下创建一个部署脚本 /www/wwwroot/your-site/deploy.sh,内容如下:
#!/bin/bash
# Git仓库自动同步部署更新跨境站点 - 脚本
cd /www/wwwroot/your-site
git pull origin main 2>&1 >> deploy.log
echo "$(date): 同步完成" >> deploy.log
给执行权限:
chmod +x deploy.sh
然后手动测试一次:./deploy.sh,检查 deploy.log 看是否报错。
如果首次拉取需要输入密码,请先配置SSH免密。
SSH密钥配置(给新手):
- 服务器执行
ssh-keygen -t rsa -b 4096,一路回车。 - 查看公钥
cat ~/.ssh/id_rsa.pub,复制全部内容。 - 登录Git仓库(如GitHub),Settings → Deploy Keys → Add deploy key,粘贴公钥并勾选允许写入。
- 在服务器上执行
ssh -T git@github.com测试连通性,输入yes确认。
第二步:搭建Webhook接收器
我们需要一个公网可访问的URL来接收Git仓库发来的推送通知。
最简单的方式是用宝塔面板的“Webhook”插件(免费)。
- 在宝塔应用商店搜索“Webhook”并安装。
- 添加一个Webhook:填写名称,URL建议保持自动生成的随机字符串(例如
http://你的域名/webhook?key=abc123),执行脚本选择刚才创建的deploy.sh。 - 保存后手动执行一次测试,看返回状态是否为200,并检查
deploy.log。
如果你没有宝塔面板,也可以自己用Python写一个简单的HTTP服务(Flask),但宝塔插件对新手更友好。
第三步:在Git仓库配置Webhook
登录你的Git仓库(GitHub示例):
- 仓库页面 → Settings → Webhooks → Add webhook。
- Payload URL 填入上一步得到的宝塔Webhook地址(如
http://www.example.com/webhook?key=abc123)。 - Content type 选择
application/json。 - 选择“Send me everything”或只监听推送事件。
- 保存后,GitHub会立即发送一次ping测试,查看宝塔Webhook日志是否收到。
常见问题与避坑指南
- 拉取失败:无法连接远程仓库:检查服务器是否能够正常访问外网,以及SSH密钥是否添加正确。可以用
git ls-remote git@github.com:用户/仓库.git测试。 - 权限拒绝(Permission denied):确保
deploy.sh的所有者与站点目录所有者一致(通常为www用户),或给脚本加上www用户可执行权限。 - 站群/多站点同步:每个站点的部署脚本单独写一个,Webhook地址也分开,或者在脚本里根据仓库分支做判断。
- 跨境节点同步慢:Git仓库尽量选择离服务器近的平台,或者用国内Gitee降低延迟。
验证自动同步是否生效
- 在本地修改任意文件并提交推送到远程仓库。
- 几秒钟后访问站点,看更新是否已经上线。
- 也可以查看服务器上的
deploy.log确认最新同步时间戳。 - 刻意制造冲突测试:在服务器直接修改文件并提交一个版本,然后本地再推一次,观察脚本是否正常处理合并冲突(建议服务器只拉取不写入,避免冲突)。
如果你正在处理 Git 仓库自动同步部署更新跨境站点,建议先按本文步骤完整执行一遍,再根据自身网络和权限做微调。
遇到异常时优先检查 Webhook 日志和 deploy.log 中的错误信息。