Laravel应用结合Git优化部署流程的技术问询
适配Laravel的GitHub高效部署方案
没问题,我给你一套完全贴合你现有环境的Git部署流程,既能利用GitHub的版本管理能力,又能高效管理生产环境的代码:
1. 先在服务器上把GitHub仓库克隆到/var/www外的目录
首先选一个合适的位置,比如/opt/laravel-app-repo(完全在/var/www之外,符合你的要求),执行以下命令:
# 创建目录并设置权限(替换成你服务器的用户组,比如www-data或你的登录用户) sudo mkdir -p /opt/laravel-app-repo sudo chown your-server-user:your-server-group /opt/laravel-app-repo # 进入目录并克隆你的GitHub仓库(推荐用SSH免密,HTTPS也可以) cd /opt/laravel-app-repo git clone git@github.com:your-username/your-laravel-repo.git .
小提示:如果用SSH,记得在服务器上生成SSH密钥并添加到GitHub账户,这样后续拉取代码不用每次输密码,更省心。
2. 写个一键部署脚本(核心高效操作)
手动复制代码容易出错,写个bash脚本放在克隆的仓库里,一键完成拉取代码、同步到生产目录、Laravel部署配置:
创建/opt/laravel-app-repo/deploy.sh文件,内容如下:
#!/bin/bash # 替换成你的实际路径 REPO_PATH="/opt/laravel-app-repo" APP_PATH="/var/www/your-host-name" # 这里填你的<host's name> # 拉取GitHub上最新的master分支代码 cd $REPO_PATH git pull origin master # 同步代码到生产目录,排除不需要的文件(比如.git、本地.env、依赖包等) rsync -avz --delete \ --exclude='.git/' \ --exclude='node_modules/' \ --exclude='.env' \ --exclude='.gitignore' \ --exclude='deploy.sh' \ $REPO_PATH/ $APP_PATH/ # 进入生产目录,执行Laravel必要的部署步骤 cd $APP_PATH # 安装生产环境依赖(跳过dev依赖,优化自动加载) composer install --no-dev --optimize-autoloader # 清理并缓存配置、路由 php artisan cache:clear php artisan config:cache php artisan route:cache # 设置Laravel所需的文件权限(确保web服务器能读写) sudo chown -R www-data:www-data storage bootstrap/cache sudo chmod -R 775 storage bootstrap/cache
给脚本添加执行权限:
chmod +x /opt/laravel-app-repo/deploy.sh
3. 日常开发推送流程
你本地开发的时候,还是按你习惯的方式来:
- 写完代码后提交到本地Git:
git add . git commit -m "fix: 修复用户登录bug"
- 推送到GitHub的master分支:
git push origin master
4. 一键部署到生产服务器
要部署的时候,只需要登录服务器,执行这个脚本就行:
cd /opt/laravel-app-repo ./deploy.sh
进阶玩法:如果想更自动化,可以配置GitHub Actions,每次推master自动触发服务器执行部署脚本,不过先从手动执行开始,简单易排查问题。
几个关键注意点
- .env文件:生产环境的
.env绝对不要提交到GitHub,服务器上的/var/www/<host's name>/.env要单独维护,脚本里已经排除了这个文件,不用担心被覆盖。 - 依赖环境:确保服务器上已经装了Composer、PHP的必要扩展(比如mbstring、xml等),不然
composer install会报错。 - 回滚方案:可以在脚本开头加个备份步骤,比如把生产目录打包备份到别的位置,万一部署出问题能快速回滚。
内容的提问来源于stack exchange,提问作者Johnny
相关产品推荐
相关产品推荐

