我們把專案放在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 協議》,轉載必須註明作者和本文連結