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

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

- 有了這個(gè)公鑰的配置,我們通過 webhooks.php 中的腳本指令就可以自動(dòng)的拉取代碼了。
五、webhooks 更新博客1. 克隆我的代碼
- 源碼:關(guān)注公眾號(hào):bugstack蟲洞棧 - 回復(fù):
guide-webhooks 即可獲得 - 使用:你可以把我的源碼先fork到自己的Github,然后部署到你的站點(diǎn)中。在學(xué)習(xí)完成搞清楚原理后,再處理你自己的站點(diǎn)
2. 部署到站點(diǎn) - 這里我們需要先在站點(diǎn)使用
git clone ”你的網(wǎng)站代碼git地址“,把Github代碼克隆到自己的博客中,其實(shí)也就是啟動(dòng)了部署做的作用。而這步操作,其實(shí)就是日常使用 Git 的方式,先克隆代碼,在不斷 git pull 更新。 - 命令:
[www@CodeGuide 39.96.73.167]$ git clone git@github.com:fuzhengwei/guide-webhooks.git - 注意,你需要切換為自己的代碼庫地址,否則 webhooks 不能生效
3. 更改網(wǎng)站運(yùn)行目錄
- 因?yàn)槲覀円呀?jīng)在博客站點(diǎn)中,從 Github 克隆下來我們的博客運(yùn)行代碼,那么這里需要把網(wǎng)站的運(yùn)行目錄切換到這個(gè)文件夾下,這樣就能正常訪問到我們的博客代碼了。
4. 配置 webhookswebhooks.php  回調(diào)腳本 <?php /** * Git webhooks 自動(dòng)部署腳本 * 地址:https://github.com/fuzhengwei/guide-webhooks/settings/hooks */
// 接收post參數(shù) $requestBody = file_get_contents("php://input"); if (empty($requestBody)) { exit('data null!'); }
// Content type = application/json $content = json_decode($requestBody, true);
// 驗(yàn)證 Webhooks 配置的 Secret,也可以不驗(yàn)證 /*if (empty($content['password']) || $content['password'] != '123456') { exit('password error'); }*/
// 項(xiàng)目存放物理路徑,也就是站點(diǎn)的訪問地址 $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"); // 當(dāng)前為www用戶
// 記錄日志 ($content 返回的是一整個(gè)對(duì)象,可以按需獲取里面的內(nèi)容,寫入日志) $res_log = '------------------------->' . PHP_EOL; $res_log .= '用戶 ' . $content['pusher']['name'] . ' 于 ' . date('Y-m-d H:i:s') . ' 向項(xiàng)目【' . $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 克隆下來的代碼文件中,有一個(gè)名為 webhooks.php 的文件,它是用于處理 Github 回調(diào)時(shí)拉取 Github 對(duì)應(yīng)博客代碼庫的腳本文件。 現(xiàn)在 http://39.96.73.167/webhooks.php 就可以配置到 Github 的 webhooks 下了,如圖:

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

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