摘要:也許有人看過我之前的一篇博文解決禁止百度爬蟲的方法與可行性分析。為了解決文章中的這個問題,我最后建立了一個只服務于百度爬蟲的一個備份服務器。于是我要完成的事情便是完成一個能夠將我最新版本的博客,隨時同步到備份服務器的。
本文最初發布于我的個人博客:咀嚼之味
Webhook,也就是人們常說的鉤子,是一個很有用的工具。你可以通過定制 Webhook 來監測你在 Github.com 上的各種事件,最常見的莫過于 push 事件。如果你設置了一個監測 push 事件的 Webhook,那么每當你的這個項目有了任何提交,這個 Webhook 都會被觸發,這時 Github 就會發送一個 HTTP POST 請求到你配置好的地址。
如此一來,你就可以通過這種方式去自動完成一些重復性工作;比如,你可以用 Webhook 來自動觸發一些持續集成(CI)工具的運作,比如 Travis CI;又或者是通過 Webhook 去部署你的線上服務器。
Github 開發者平臺的文檔中對 Webhook 的所能做的事是這樣描述的:
面臨的問題You’re only limited by your imagination.
我目前正好面臨了這樣一個問題 —— 麻煩的人肉部署。也許有人看過我之前的一篇博文《解決 Github Pages 禁止百度爬蟲的方法與可行性分析》。為了解決文章中的這個問題,我最后建立了一個只服務于百度爬蟲的一個備份服務器。但是隨之而來的問題是,每次我的博客有些更新,都不得不 ssh 到那臺服務器上把代碼 pull 下來。如此做了兩三次以后,我覺得我不能再這么墮落下去,于是還是決定嘗試一下 Webhook。
于是我要完成的事情便是完成一個能夠將我最新版本的博客,隨時同步到備份服務器的 Webhook。簡單分析一下我需要什么:
一臺外網可以訪問的主機
一個能夠響應 Webhook 的服務器
配置 Webhook
1. 一臺外網可訪問的主機什么叫外網可訪問的主機?像阿里云的試用版就不行,它不提供外網 IP。而我使用的是 DigitalOcean 的云主機,主要的作用是架梯子,現在也順便用來做備份服務器。當然你們也可以用類似 SAE 的服務,雖然沒有 IP,但有獨立的外網訪問地址。
2. 響應 Webhook 的服務器為了響應 Webhook 所發出的請求,從而做一些我們想做的事情,我們得先實現一個響應服務器。本文采用 Node 來實現一個原型,你當然也可以用 PHP,python 等,全憑個人喜好啦。代碼很短,就直接陳列在下方了:
var http = require("http") , exec = require("exec") const PORT = 9988 , PATH = "../html" var deployServer = http.createServer(function(request, response) { if (request.url.search(/deploy/?$/i) > 0) { var commands = [ "cd " + PATH, "git pull" ].join(" && ") exec(commands, function(err, out, code) { if (err instanceof Error) { response.writeHead(500) response.end("Server Internal Error.") throw err } process.stderr.write(err) process.stdout.write(out) response.writeHead(200) response.end("Deploy Done.") }) } else { response.writeHead(404) response.end("Not Found.") } }) deployServer.listen(PORT)
如果還需要實現更多,更復雜的功能,直接在 commands 數組中添加便是。此處我的博客根目錄 html 與部署服務器根目錄同屬一個目錄,所以配置常量 PATH = "../html"。只要啟動了服務器,那么 Webhook 就可以通過類似于 http://104.236.xxx.xxx:9988/deploy/ 的路徑來部署我的博客備份啦。
# 在后臺啟動部署服務器 $ node server.js &
我以為服務器部署到這兒就完了,其實并沒有,我遇到了一些麻煩。
Run Node Server Forever我在實際使用的時候發現,我的 Node 服務器時不時會自動停掉,具體原因我暫時還沒有弄清楚。不過似乎很多人都遇到了這樣的困擾,要解決這個問題,forever 是個不錯的選擇。借助 forever 這個庫,它可以保證 Node 持續運行下去,一旦服務器掛了,它都會重啟服務器。
安裝 forever:
$ [sudo] npm install -g forever
運行:
$ cd { 部署服務器的根目錄 } $ forever start server.js
我在 DigitalOcean 上的服務器安裝的是 Ubuntu 系統,而 Ubuntu 中原本就有一個叫 node 的包。為了避免沖突,在 Ubuntu 上安裝或使用 Node 得用 nodejs 這個名字。而 forever 默認是使用 node 作為執行腳本的程序名。所以為了處理 Ubuntu 存在的這種特殊情況,在啟動 forever 時得另外添加一個參數:
$ forever start server.js -c nodejs3. 配置 Webhook
如果像是本文這種最簡易的應用,Webhook 的配置是十分簡單的。首先進入你的 repo 主頁,通過點擊頁面上的按鈕 [settings] -> [Webhooks & service] 進入 Webhooks 配置主頁面。也可以通過下面這個鏈接直接進入配置頁面:
https://github.com/[ 用戶名 ]/[ 倉庫名稱 ]/settings/hooks
此處只需要配置 Webhook 所發出的 POST 請求發往何處即可,于是我們就配置我們所需要的路徑: http://104.236.xxx.xxx:9988/deploy/。這個地址指向的就是那個能夠響應 Webhook 所發出請求的服務器。
配置好 Webhook 后,Github 會發送一個 ping 來測試這個地址。如果成功了,那么這個 Webhook 前就會加上一個綠色的勾;如果你得到的是一個紅色的叉,那就好好檢查一下哪兒出問題了吧!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91542.html
摘要:自動部署基礎實踐熟悉的基本操作實現本地后自動構建部署服務此實踐用于優化自己在實際工作中的工作流在本地開發到服務器登錄云服務器或者簡化流程后本地開發云服務器自動構建部署本實踐將結合技術來實現云服務器對各種環境的切換與部署。 Docker + Jenkins + webhooks 自動部署基礎實踐 熟悉 jenkins 的基本操作 ?? 實現本地 git push 后 jenkins 自...
摘要:實踐四環境容器化最近把公司的環境做了容器化,目前達到的效果是代碼提交到,觸發將代碼部署到測試服務器,然后就可以根據前后端不同的分支組合的域名來訪問,從而省去了每次前后端代碼都合并到分支才能測試的環節。 Docker 實踐(四): Beta 環境容器化 最近把公司的 beta 環境做了容器化,目前達到的效果是代碼提交到 gitlab,觸發 webhook 將代碼部署到測試服務器,然后就可...
摘要:之前雖然了解各種概念,但是自己搗鼓后,才算是真正的理解。只能把文檔渲染成,但是不包括,所以需要配合。這里是啟動腳本,看最后一行,定義了默認啟動腳本。這個腳本負責監聽,啟動部署。如何使用這個項目已經放到了和上。 API Blueprint 上次介紹的 API Blueprint 解決方案 雖然不錯,但是有一些問題: 部署麻煩,需要裝不少東西 文檔更新后不支持自動部署 沒有權限控制 以...
摘要:應用鏡像示例應用基于官方鏡像,修改了頁面信息應用鏡像推送應用鏡像到指定的遠程鏡像倉庫創建通過創建,,命令行如下驗證服務打開瀏覽器,訪問服務,確認應用的內容。驗證更新打開瀏覽器,訪問服務,驗證服務升級內容是否正常。 概述 結合大家CI/CD的應用場景,本篇Blog旨在介紹如何通過Rancher的webhook微服務來實現CI/CD的聯動。 流程介紹 本次實踐的主要流程如下: CI/CD...
摘要:安全功能的最新引入是一組稱為準入控制器的插件。通過將標志傳遞給服務器來配置啟用的準入控制器集。本討論將僅關注基于的準入控制器。摘要準入控制器為安全性提供了顯著優勢。 作者:Malte Isberner(StackRox) Kubernetes極大地提高了當今生產中后端群集的速度和可管理性。由于其靈活性、可擴展性和易用性,Kubernetes已成為容器編排器的事實標準。Kubernete...
閱讀 1213·2021-11-25 09:43
閱讀 1969·2021-11-11 10:58
閱讀 1187·2021-11-08 13:18
閱讀 2659·2019-08-29 16:25
閱讀 3509·2019-08-29 12:51
閱讀 3307·2019-08-29 12:30
閱讀 748·2019-08-26 13:24
閱讀 3683·2019-08-26 10:38