如何让Web服务器自动从Bitbucket仓库同步更新代码?
实现Bitbucket master分支变更自动同步到Web服务器的方案
下面是两种可落地的实现方式,按需选择即可:
方案1:Webhook + 服务器端触发脚本(实时同步,首选方案)
全程配置完成后可实现推送即同步,无延迟:
- 第一步:服务器端提前配置拉取权限
在Web服务器的站点根目录初始化git仓库,绑定你对应的Bitbucket远程仓库地址,配置好SSH密钥保证可以无交互拉取master分支的代码,先手动执行一次git pull origin master确认没有权限、冲突问题。 - 第二步:编写同步执行脚本
在服务器非公开目录下新建脚本文件,比如/opt/sync_site.sh,参考内容如下:
脚本写完后执行#!/bin/bash # 替换成你自己的站点根目录实际路径 cd /var/www/your_site_root # 可选:重置本地所有未提交的变更,避免本地修改导致拉取冲突,不需要可删除 git reset --hard origin/master # 拉取master分支最新代码 git pull origin master # 可选:如果你的站点需要构建,在此处添加对应构建命令,比如前端项目的npm install && npm run build # 可选:如果需要调整目录权限保证Web服务可读取,在此处添加对应权限命令,比如chown -R www-data:www-data /var/www/your_site_root # 可选:如果是动态站点需要重启服务,在此处添加对应重启命令,比如重载php-fpm、重启Node服务等chmod +x /opt/sync_site.sh给脚本添加执行权限。 - 第三步:配置服务器端Webhook接收接口
用你熟悉的方式监听一个HTTP接口,比如用Python Flask、Nginx配合CGI都可以,接口逻辑只需要做两件事:校验你自己预设的请求密钥(防止恶意请求触发同步),校验通过就执行上面的同步脚本。 - 第四步:Bitbucket端配置Webhook
进入你的Bitbucket仓库设置页面,找到Webhooks入口,新建Webhook,URL填写你刚才配置的服务器接口地址,触发条件选择「Repository push」事件保存即可,后续只要有代码推送到仓库,就会自动触发服务器同步。
方案2:定时拉取(配置最简单,可接受延迟的情况下使用)
如果不需要实时同步,能接受1-5分钟的延迟,直接用定时任务实现即可,不需要配置Webhook:
- 同样先完成站点目录的git仓库初始化、SSH权限配置,手动拉取验证可用。
- 复用上面写的
/opt/sync_site.sh同步脚本。 - 执行
crontab -e添加定时任务,比如设置每2分钟拉取一次:
保存后定时任务自动生效,同步日志会写入*/2 * * * * /bin/bash /opt/sync_site.sh >> /var/log/site_sync.log 2>&1/var/log/site_sync.log方便后续排查问题。
注意事项
- 如果你的站点配置了静态资源缓存,可以在同步脚本最后添加清理缓存的命令,保证访问时直接拿到最新资源。
- 生产环境使用的话建议在脚本里添加同步校验逻辑,拉取失败时自动回滚到上一个可用版本,避免异常影响站点访问。
内容的提问来源于stack exchange,提问作者GavTheWood
相关产品推荐
相关产品推荐

