利用 webhook 实现 Git 自动部署 Laravel 代码
我们把项目放在github或者coding等代码仓库,每次本地开发好push后可能还要进入项目部署目录pull一遍,很麻烦,利用webhook可以很好地将这两步操作变为一步,本地push代码,服务器接收到请求自动进入项目目录pull,完成。
整个过程分为以下几步:
-
在github或coding(我是用coding)添加部署服务器的公钥。
$ ssh-keygen -t rsa -C "example@email.com" //一路回车 $ cat ~/.ssh/id_rsa.pub //复制内容添加到coding个人账户ssh公钥列表
-
新建一个仓库,部署服务器生成部署公钥并添加到项目公钥设置。
//部署公钥是为单个项目设置, //以Nginx为例,sudo -Hu www是切换到www用户生成部署公钥 //如果是apache,应该是sudo -Hu apache(-Hu是指切换用户和对应HOME环境变量) //如果出错,可能是不存在/home/www目录,可以新建,记得chown -R www:www /home/www $ sudo -Hu www ssh-keygen -t rsa //一路回车 $ cat /home/www/.ssh/id_rsa.pub //复制添加到coding项目部署公钥
-
添加hook。
<?php // routes/web.php Route::post('/deploy', function () { $path = base_path(); $token = 'token'; $json = json_decode(file_get_contents('php://input'), true); if (empty($json['token']) || $json['token'] !== $token) { exit('error request'); } $cmd = "cd $path && git pull"; shell_exec($cmd); });
在coding项目设置,新建一个webhook,url为http://test.com/deploy(假设你的项目地址为test.com),填写token,在laravel的VerifyCsrfToken中间件中排除
/deploy
这条路由,勾选push后保存,将本地代码推送到coding仓库。 -
第一次拉取代码,完成测试。
# 第一次还是要进入项目目录手动pull一次 $ sudo -Hu www git config --global credential.helper store # 永久保存,后续免输密码 $ sudo -Hu www git config --global user.name "phpbest" $ sudo -Hu www git config --global user.email "example@email.com" # 邮箱请与conding上一致 $ sudo -Hu www git clone url # url为仓库地址 $ composer install $ cp .env.example .env $ php artisan key:generate
如果以上没问题,那么coding项目设置webhook那里就显示状态绿灯,在本地改动推送测试一下,看服务器有没有自动pull。
解释一直用sudo -Hu www操作的原因,因为webhook通知
/deploy
更新代码,这时候是用nginx的www用户来操作,否则就会出现权限问题。
原文地址:phpbest.cn
本作品采用《CC 协议》,转载必须注明作者和本文链接
本帖由系统于 2年前 自动加精
高认可度评论:
其实,你还可以做得更多
composer install
php artisan migrate
其实,你还可以做得更多
composer install
php artisan migrate
@XiaohuiLam 可以的
@XiaohuiLam 有具体的写法吗?大神
@Johnson16 没有