用Git Hook自动部署网站:push代码就上线,不用FTP了

王尘宇 实用技巧 3

以前更新网站的工作流:本地改代码 → 打开FileZilla → 找到对应文件 → 上传 → 刷新看效果 → 又改了 → 再上传。改一个CSS颜色能来回上传五六次,一天下来光等FTP传输就浪费半小时。

后来配了Git Hook自动部署,改好代码 git push,服务器自动拉取更新。体验直接上一个档次。

原理很简单:Git仓库有一个hooks目录,里面可以放脚本,在特定事件触发时执行。我们用的是post-receive——服务端收到push后自动执行的钩子。

具体步骤:

1. 在服务器上创建一个裸仓库(bare repo):

git init --bare /var/repo/mysite.git

2. 创建post-receive钩子:

cd /var/repo/mysite.git/hooks
nano post-receive

3. 写入以下脚本:

#!/bin/bash
GIT_DIR=/var/repo/mysite.git
WORK_TREE=/var/www/mysite
while read oldrev newrev ref
do
if [ "$ref" = "refs/heads/main" ]; then
git --work-tree=$WORK_TREE --git-dir=$GIT_DIR checkout -f main
echo "Deployed to $WORK_TREE"
fi
done

4. 给执行权限:chmod +x post-receive

5. 本地添加远程仓库:git remote add production ssh://user@你的服务器IP/var/repo/mysite.git

6. 推送部署:git push production main

之后每次改完代码,git add + git commit + git push production main,服务器自动更新。三秒内网站就变了。

几个注意点:

这个方案适合静态网站和PHP网站——文件直接覆盖就行。Node.js项目需要在post-receive里加npm install和pm2 restart。数据库有变更的话,钩子里跑一遍migration脚本。

安全问题:服务器上的git用户权限要控制好,建议单独建一个deploy用户,只给/var/www/mysite的写权限。
备份问题:建议在post-receive里加一行备份命令——部署前先把当前版本tar打包存到备份目录。万一新版本有问题,一分钟就能回滚。

从FTP到Git Hook,本质上是从「手动上传文件」变成了「自动化流程」。省下来的时间可以多想点产品,少看点进度条。

标签: Git Hook 自动部署 Git 开发工具 网站部署

发布评论 0条评论)

  • Refresh code

还木有评论哦,快来抢沙发吧~