作者:小傅哥 博客:https://
?沉淀、分享、成長,讓自己和他人都能有所收獲!?? ? 目錄一、前言 二、環(huán)境說明 三、站點配置 1. 環(huán)境安裝 2. 站點配置 3. 訪問站點
四、創(chuàng)建公鑰 五、webhooks 更新博客 1. 克隆我的代碼 2. 部署到站點 3. 更改網站運行目錄 4. 配置 webhooks
六、部署驗證 1. index.php 新增代碼 2. push 代碼到 Github 3. 驗證博客更新 4. 查看腳本執(zhí)行日志 5. 查看webhooks推送日志
七、總結 八、系列推薦
一、前言小傅哥,我搞了三臺服務器,維護學校游戲社站點,我麻了!
??女粉來信:傅哥,我大二了,就編程學的還可以的那種大二女生??。最近我不是天天看見一大堆人宣傳服務器白皮襖嗎,我就在11.1日也買了,還讓宿舍的兩個同學一起跟著買了,都買了三年。想著這樣我們三個人就可以搭建和維護我們學校游戲社團的站點了,日常維護著學校的游戲比賽、宣傳、通知,還能順便就把我學的編程技術用上,一舉多得嘛。本來還想,可以趕在 EDG VS DK 的時候上線秀一下呢,但是域名要備案好多天,只能鴿了。而且隨著我們三個熬夜的折騰服務器、做站點網站、備案域名,真是遇到太多問題了,以前感覺課本學了就能起飛呢,現在全拉胯了。只能一遍學習傅哥的云服務器操作視頻,一遍部署驗證,真的學到了好多好多!再次感謝傅哥!那么現在問題來了,就是傅哥你的B站視頻只有6節(jié),我看完也跟著做了,但這回我遇到了新的問題,就是就是,我三個服務器,按照視頻配置完 Nginx 負載以后,每次都要通過 FTP 把網站文件傳到三個服務器上去,有時候還忘記一個。這咋弄呀,傅哥給想想辦法嘛。 ??傅哥回信:辦法是有的,可以把你的網站代碼設置私有倉庫傳到 Github 或者 Gitee,這兩個代碼庫都支持 webhook 簡單說就是當你把代碼 push 到代碼庫以后,代碼庫會調用你預先配置好的一個或者多個回調鉤子,其實也就是調用你三個負載均衡的站點提供的 URL,來通知你現在這個代碼庫有最新更新的代碼,你可以在收到 URL 的調用通知以后,通過 git pull 命令把最新上傳的網站代碼,拉取到服務器上。那么現在的效果就是,你把代碼維護在 GitHub 以后,上傳最新的網站內容以后,三個站點就可以自動部署了,簡要流程如下: 
方案流程:
- 在自己的網站站點中,提供 webhooks URL 訪問地址,配置到
Github/Gitee 代碼庫的 Settings -> Webhooks 在下文中會有詳細介紹 - 例如圖中 webhooks.php 開發(fā)的內容就是在接收到調用的時候,獲取入參以后開始執(zhí)行 git pull 操作
shell_exec("git pull origin main 2>&1"); - webhooks 配置完成以后,當我們再通過 git push 把本地代碼推送到倉庫(Github/Gitee)的時候,倉庫就會調用全部的 webhooks.php,把倉庫(Github/Gitee)中的代碼拉取到站點中,這樣就完成了整個站點內容的更新。
?? 傅哥,你說的我悟了,但需要你再手把手,操作下! 二、環(huán)境說明- 【必須】使用 Github、Gitee、Codechina 維護網站代碼,因為這些代碼庫可以支持配置 webhooks
- 【必須】Linux 云服務器(公網IP);安裝Git、安裝Nginx、安裝PHP、安裝FTP
- 【可選】使用寶塔運維面板,部署站點博客,操作起來會比較方便
三、站點配置首先,我們使用 Linux 寶塔運維面板,添加一個博客站點,在添加之前需要在寶塔中安裝 Nginx、FTP、PHP模塊,如果你對這里的操作比較陌生,可以先看小傅哥在B站錄制好的云服務器學習視頻,地址:https://space.bilibili.com/15637440/channel/seriesdetail?sid=479958 PS:當然你也可以不使用寶塔,通過命令安裝 Nginx 或者 Apache 服務器等所需要的軟件也是可以的。 1. 環(huán)境安裝安裝 Git - 需求:在站點接收到 webhooks 回調時,使用 git pull 拉取網站代碼,所以需要安裝 git
[root@CodeGuide ~]# git version git version 2.27.0
安裝 Nginx、FTP - 需求:部署博客站點時會需要到Nginx服務器、FTP上傳
配置 PHP,允許 exec 腳本指令 需求:由于我們使用的是 PHP 開發(fā)的 webhook 回調操作,所以這里需要安裝 PHP 模塊 配置:安裝完 PHP 模塊以后,還需要對 PHP 的 php.ini 進行更改,刪除 disable_functions 下的 exec、shell_exec,這樣才能在 webhooks.php 文件中,執(zhí)行腳本命令。如圖: 
2. 站點配置
- 環(huán)境安裝完畢后,就可以添加一個網站的站點了,你的網站運行代碼都需要上傳到這個站點中,它提供了 FTP 操作以及寶塔運維面板中還有一個
文件 ,可以在線修改站點內容。
3. 訪問站點 - 地址:http://39.96.73.167 - 你換成自己的訪問IP即可
- 描述:默認創(chuàng)建完站點,會在
/www/wwwroot/39.96.73.167 目錄下有一個 index.html 此時你可以進行在線修改
四、創(chuàng)建公鑰SSH 是 Linux 系統(tǒng)的登錄工具,現在廣泛用于服務器登錄和各種加密通信。 1. 查看運行用戶一般php運行使用的是 www 用戶,我們可以通過 ftp 上傳一個 index.php 到站點根目錄下,之后進行訪問站點,查看項目路徑和用戶目錄。 index.php 中的代碼如下 <?php header('Content-type: text/html; charset=utf-8'); ini_set("error_reporting", "E_ALL & ~E_NOTICE");
echo "Hi,Webhooks!By 小傅哥<br/>";
echo '<br/>測試:輸出項目路徑和用戶目錄:<br/>';
exec("cd ~ && cd - && cd -", $output);
echo '<pre>'; echo print_r($output); echo '</pre>';
- 如果你未對
php.ini 中的 disable_functions = {exec、shell_exec} 刪掉,那么執(zhí)行這個 php 文件的中腳本指令會報錯。
訪問站點  - 項目路徑:
[0] => /www/wwwroot/39.96.73.167 - 用戶目錄:
[1] => /home/www - www 就是這個用戶目錄,也就是我們需要為其創(chuàng)建 ssh 公鑰的用戶
2. 生成和配置公鑰2.1 開啟 www 用戶配置:把 sbin/nologin 為 bin/bash 
2.2 生成公鑰因為我們已經開始了 www 登錄權限,那么在生成公鑰之前,需要切換到 www 賬戶下,命令:su www 生成公鑰:ssh-keygen -t rsa -C "184172133@qq.com" - 默認回車即可 查看公鑰:cat ~/.ssh/id_rsa.pub - 其他賬戶下不可見,只有切換到 www 可見

2.3 配置公鑰(Github)地址:https://github.com/settings/ssh/new 配置:把你通過 cat ~/.ssh/id_rsa.pub 查看到的公鑰,配置到這里即可,如下:

- 有了這個公鑰的配置,我們通過 webhooks.php 中的腳本指令就可以自動的拉取代碼了。
五、webhooks 更新博客1. 克隆我的代碼
- 源碼:關注公眾號:bugstack蟲洞棧 - 回復:
guide-webhooks 即可獲得 - 使用:你可以把我的源碼先fork到自己的Github,然后部署到你的站點中。在學習完成搞清楚原理后,再處理你自己的站點
2. 部署到站點 - 這里我們需要先在站點使用
git clone ”你的網站代碼git地址“ ,把Github代碼克隆到自己的博客中,其實也就是啟動了部署做的作用。而這步操作,其實就是日常使用 Git 的方式,先克隆代碼,在不斷 git pull 更新。 - 命令:
[www@CodeGuide 39.96.73.167]$ git clone git@github.com:fuzhengwei/guide-webhooks.git - 注意,你需要切換為自己的代碼庫地址,否則 webhooks 不能生效
3. 更改網站運行目錄
- 因為我們已經在博客站點中,從 Github 克隆下來我們的博客運行代碼,那么這里需要把網站的運行目錄切換到這個文件夾下,這樣就能正常訪問到我們的博客代碼了。
4. 配置 webhookswebhooks.php  回調腳本 <?php /** * Git webhooks 自動部署腳本 * 地址:https://github.com/fuzhengwei/guide-webhooks/settings/hooks */
// 接收post參數 $requestBody = file_get_contents("php://input"); if (empty($requestBody)) { exit('data null!'); }
// Content type = application/json $content = json_decode($requestBody, true);
// 驗證 Webhooks 配置的 Secret,也可以不驗證 /*if (empty($content['password']) || $content['password'] != '123456') { exit('password error'); }*/
// 項目存放物理路徑,也就是站點的訪問地址 $path = "/www/wwwroot/39.96.73.167/guide-webhooks/";
// 判斷需要下拉的分支上是否有提交,我們這里的分支名稱為 main if ($content['ref'] == 'refs/heads/main') {
// 執(zhí)行腳本 git pull,拉取分支最新代碼 $res = shell_exec("cd {$path} && git pull origin main 2>&1"); // 當前為www用戶
// 記錄日志 ($content 返回的是一整個對象,可以按需獲取里面的內容,寫入日志) $res_log = '------------------------->' . PHP_EOL; $res_log .= '用戶 ' . $content['pusher']['name'] . ' 于 ' . date('Y-m-d H:i:s') . ' 向項目【' . $content['repository']['name'] . '】分支【' . $content['ref'] . '】PUSH ' . $content['commits'][0]['message'] . PHP_EOL; $res_log .= $res . PHP_EOL;
// 追加方式,寫入日志文件 file_put_contents("git_webhook_log.txt", $res_log, FILE_APPEND); } echo 'done';
在我們從 Github 克隆下來的代碼文件中,有一個名為 webhooks.php 的文件,它是用于處理 Github 回調時拉取 Github 對應博客代碼庫的腳本文件。 現在 http://39.96.73.167/webhooks.php 就可以配置到 Github 的 webhooks 下了,如圖:

- 配置,URL、Content type、Secret、trigger,配置完成后確認即可,另外你可以把多個服務器實例都配置上 webhooks,這樣就可以在推送代碼到 Github 倉庫時一起部署了。
六、部署驗證目前,訪問博客是這樣,如下:接下來我們開始修改博客文件并提交,驗證自動部署更新站點  1. index.php 新增代碼
- 你可以在 index.php 文件中修改任意內容,或者添加新的內容。
2. push 代碼到 Github
- 推送新修改的內容,到代碼庫中,等待 Github webhooks 回調腳本
3. 驗證博客更新效果:  - 通過訪問博客地址,已經可以看到我們新加入的內容,已經自動部署更新到站點了!???
4. 查看腳本執(zhí)行日志在我們的 webhooks.php 中,執(zhí)行 git pull 腳本的時候,還有一段日志記錄,便于知曉誰對網站對了什么! git_webhook_log.txt 
- git_webhook_log.txt 是在 webhooks.php 中記錄的日志文件,你可以自行擴展其他需要輸出的內容。
5. 查看webhooks推送日志

- 每一次 webhooks 執(zhí)行時,都會有對應的記錄,來告訴你本次代碼推送是否被回調成功。并且在日志中,你還可以看到 webhooks 向你推送的內容 JSON 文件內容,你可以從中獲取需要的信息,比如這是誰推送的、在哪個分支推送的、推送的文件有哪些等等。
- 這里也截取了一段推送的 JSON,其余信息你可以在推送記錄中自己查看了。
七、總結- 本章節(jié)我們帶著大家徹底的把 webhooks 的使用走了一遍,也讓需要此技術的小伙伴可以讓自己的站點部署變更的更加
聰明一些 。當然自己做記錄也幫助了一些師弟和小姐姐! - 那么現在如果你手里有服務器正在吃灰不知道怎么用起來,現在可以折騰起來了,因為傅哥給你錄好了入門視頻、寫好了操作文章,那么不要等待了,上吧!年輕人!課程鏈接:https://space.bilibili.com/15637440/channel/seriesdetail?sid=479958
- 最后,如果你還沒有服務器,那么趕緊搞一個吧,趁著還有活動?? 鏈接:https://www.aliyun.com/minisite/goods?taskPkg=1111ydsrwb&pkgSid=11388&recordId=1033318&userCode=is4kfbdt
八、系列推薦
|