php框架项目可通过git自动化部署实现多人协作:创建专用部署用户与ssh密钥,配置带写权限的deploy keys;在服务器设裸库与post-receive钩子自动检出代码、安装依赖、清理缓存并处理.env;支持一键回滚。

团队协作中,PHP框架项目需要多人并行开发、统一代码管理、即时同步线上环境,且不能因部署操作中断服务或覆盖他人改动。手动FTP上传、逐台服务器执行命令已无法支撑每日多次发布节奏。
初始化远程Git仓库并配置权限
在目标服务器上新建专用部署用户,避免用root或www直接操作代码:
sudo useradd -m -s /bin/bash deploy
切换至该用户并生成密钥对:
su - deploy → ssh-keygen -t ed25519 -C "deploy@project" -f ~/.ssh/id_ed25519
将公钥内容(cat ~/.ssh/id_ed25519.pub)添加到Git托管平台(GitHub/GitLab/Gitee)的Deploy Keys中,【务必勾选“允许写入”权限】,否则后续push会失败。
设置.ssh目录权限:
chmod 700 ~/.ssh && chmod 600 ~/.ssh/id_ed25519 && chmod 644 ~/.ssh/id_ed25519.pub
配置生产环境Web根目录与Git裸库
在Web服务器文档根目录外新建一个纯Git仓库(裸库),用于接收推送:
mkdir -p /var/repo/myapp.git && cd /var/repo/myapp.git && git init --bare
创建钩子脚本post-receive:
cd hooks && touch post-receive && chmod +x post-receive
编辑post-receive内容(注意替换实际路径):
#!/bin/bash
REPO=/var/repo/myapp.git
DEPLOY_PATH=/var/www/myapp
git --work-tree=$DEPLOY_PATH --git-dir=$REPO checkout -f
chown -R deploy:www-data $DEPLOY_PATH
find $DEPLOY_PATH -type f -exec chmod 644 {} \;
find $DEPLOY_PATH -type d -exec chmod 755 {} \;
本地项目关联远程仓库并推送首次代码
方法一:已有本地项目
cd /path/to/your/laravel-or-symfony-project
git remote add production ssh://deploy@server-ip/var/repo/myapp.git
git push production main
方法二:全新拉取框架模板
git clone https://github.com/laravel/laravel.git myapp && cd myapp
git remote add production ssh://deploy@server-ip/var/repo/myapp.git
git push production main
这一步执行后,服务器裸库收到推送,自动触发post-receive钩子,将代码检出到/var/www/myapp目录下。此时若Nginx已指向该路径,访问域名即可看到首页。
部署时自动安装依赖与清理缓存
第一步:修改post-receive,在checkout之后插入Composer与框架指令:
cd $DEPLOY_PATH
composer install --no-dev --optimize-autoloader --quiet
php artisan config:clear 2>/dev/null || true
php artisan cache:clear 2>/dev/null || true
php artisan view:clear 2>/dev/null || true
第二步:确保deploy用户能无密码执行关键命令,编辑/etc/sudoers:
deploy ALL=(www-data) NOPASSWD: /usr/bin/composer, /usr/bin/php
第三步:为.env文件单独处理——禁止Git提交敏感配置,部署前检查是否存在:
if [ ! -f "$DEPLOY_PATH/.env" ]; then cp $DEPLOY_PATH/.env.example $DEPLOY_PATH/.env; fi
注意:.env文件权限必须设为600,否则Laravel会拒绝加载:
chmod 600 $DEPLOY_PATH/.env
一键回滚至上一个Git版本
步骤一:登录服务器,切换到部署目录
cd /var/www/myapp
步骤二:查看最近三次提交记录
git log --oneline -n 3
步骤三:硬重置到上一版(慎用,会丢弃当前未提交更改)
git reset --hard HEAD~1
步骤四:强制同步到裸库,确保下次推送基准一致
cd /var/repo/myapp.git && git update-server-info
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











