核心是用Web用户身份通过SSH免密执行git pull,并由Git Hooks或Webhook自动触发,再配合权限修复、OPcache清理等收尾操作实现PHP项目自动部署。

用 Git 拉取代码并部署 PHP 项目,核心是把“获取最新代码”和“让 Web 服务能运行它”两步连起来。不依赖复杂 CI/CD 工具,靠 Shell 脚本 + Git 基础操作 + 少量权限配置就能稳定跑起来,适合中小项目或测试环境。
一、先确保服务器能正常拉取代码
这是自动部署的前提。重点不是“会不会 git pull”,而是“以谁的身份、用什么方式、有没有权限拉”:
- 用 Web 服务用户(如 www 或 nginx)身份执行 git 操作,避免权限混乱导致网页无法读取文件
- 推荐用 SSH 方式克隆仓库(
git@gitee.com:user/repo.git),比 HTTPS 更省事;提前为该用户配置好 SSH 免密登录(生成密钥、公钥加到 Git 托管平台) - 首次部署时,在目标目录手动执行一次:
git clone git@xxx.com:your/project.git .(注意末尾的点,表示克隆到当前目录) - 确认
.git/config中的url是 SSH 地址,且分支名(如main或master)与你推送的一致
二、写一个安全可控的拉取脚本
别直接裸奔执行 git pull,加一层控制更稳妥:
- 脚本开头检查当前目录是否为 Git 仓库:
if [ ! -d ".git" ]; then echo "Not a git repo"; exit 1; fi - 只允许指定分支更新,比如只拉
main:git checkout main && git pull origin main - 拉取失败时退出,不继续后续步骤:
|| { echo "Pull failed"; exit 1; } - 可选:拉取前备份上一版代码(压缩整个目录或只备份
config/和upload/等敏感目录)
三、让拉取动作被自动触发
两种主流方式,按你的 Git 托管平台选一种:
立即学习“PHP免费学习笔记(深入)”;
-
Git Hooks(适合自建 Git 仓库):在远程 bare 仓库的
hooks/post-receive里写脚本,推送后自动 checkout 到网站目录。需注意git --work-tree和--git-dir路径必须准确,且该文件要有可执行权限(chmod +x) -
Webhook(适合 GitHub / GitLab / Gitee):在平台设置中填入服务器上的一个 PHP 接口地址(如
https://yoursite.com/hook.php),PHP 脚本里校验密码、调用 shell 命令执行git pull。记得给 PHP 进程执行 shell 的权限(如www用户加 sudo 免密或直接允许执行 git)
四、部署后的小但关键收尾动作
光拉代码不够,PHP 项目常需要额外几步才能正常访问:
- 修复文件权限:比如
find . -type f -exec chmod 644 {} \;和find . -type d -exec chmod 755 {} \;,再把runtime/、storage/等目录设为可写 - 清空 OPcache(如果启用):
opcache_reset()或用shell_exec('curl -s http://localhost/opcache-reset.php') - 重载或重启相关服务(如 Nginx 配置有变更)、启动队列进程(Laravel 的
queue:work)等,视项目而定 - 记录日志:每次拉取时间、分支、提交 hash、是否成功,方便排查问题



















