You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu Git服务器Push后,如何触发独立Web服务器自动拉取master分支?

跨机场景下Git Push后Web服务器自动拉取Master分支的实现方案

嘿,这个跨机自动部署的需求我太熟了——好多团队从同机换成跨机架构后都会遇到这个问题。核心逻辑其实就是让Git服务器在收到Push后,主动触发Web服务器上的代码拉取操作,下面我给你拆解成一步步可落地的步骤:

第一步:搞定跨机免密SSH登录(关键前提)

要让Git服务器能远程执行Web服务器的命令,首先得实现免密登录,不然每次Push都要输密码,完全达不到自动的效果:

  • 切换到Git服务器上运行Git服务的用户(通常是git用户),执行命令生成SSH密钥对:
    ssh-keygen -t ed25519
    
    一路按回车就行,不用设密码,这样才是真正的免密。
  • 把Git服务器上生成的公钥(路径是~/.ssh/id_ed25519.pub)内容复制出来,粘贴到Web服务器上部署代码的目标用户(比如www-data,或者你专门建的部署用户)的~/.ssh/authorized_keys文件里。
  • 测试一下:在Git服务器上执行ssh 部署用户名@Web服务器IP,如果能直接登录Web服务器而不需要输入密码,这步就搞定了。一定要确保这步能成功,不然后面的自动操作全白搭

第二步:在Git服务器配置Post-Receive Hook

Git的hooks机制是核心,我们要利用post-receive这个钩子,在Push完成后触发远程拉取:

  • 找到你的Git仓库的hooks目录,一般是你的仓库路径/.git/hooks/
  • 新建一个名为post-receive的文件(注意没有任何后缀),把下面的内容粘进去,记得替换成你自己的实际信息:
    #!/bin/bash
    # 只监听master分支的Push操作
    while read oldrev newrev refname
    do
        # 解析当前Push的分支名称
        branch=$(git rev-parse --symbolic --abbrev-ref $refname)
        # 如果是master分支,触发Web服务器拉取
        if [ "$branch" = "master" ]; then
            # 替换成你的Web服务器信息和项目路径
            ssh 部署用户名@Web服务器IP 'cd /你的Web项目根目录 && git pull origin master'
        fi
    done
    
  • 给这个脚本加上执行权限,不然Git没法运行它:
    chmod +x post-receive
    

第三步:权限与安全细节(别踩坑)

这部分很容易忽略,搞不好会导致拉取失败或者有安全隐患:

  • 确保Web服务器上的部署用户对项目目录有读写权限,不然git pull会因为权限不足报错。
  • 为了安全,限制Git服务器用户的SSH权限:在Web服务器的authorized_keys文件里,给Git服务器的公钥加上命令限制,比如只允许执行拉取代码的命令,防止恶意操作。格式大概是:
    command="cd /你的Web项目根目录 && git pull origin master",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty 这里粘贴Git服务器的公钥内容
    
  • 建议给钩子脚本加日志功能,方便排查问题。比如把命令的输出重定向到日志文件:
    ssh 部署用户名@Web服务器IP 'cd /你的Web项目根目录 && git pull origin master' >> /var/git/hooks/logs/post-receive.log 2>&1
    
    记得提前创建日志目录和文件,给Git用户写权限。

第四步:测试验证

最后一步就是验证效果:

  • 在你的本地开发机上,修改点代码,然后推送到Git服务器的master分支:
    git push origin master
    
  • 去Web服务器的项目目录看看代码是不是已经更新了,或者查看日志文件有没有报错信息。如果一切顺利,就大功告成了!

内容的提问来源于stack exchange,提问作者Eng.Helewa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:36:31