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