使用gitbook和hooks搭建自動(dòng)更新的博客筆記

前端整理學(xué)習(xí)的技術(shù)點(diǎn)有很多退敦,個(gè)人喜歡以markdown筆記的形式記錄诅岩,方便查閱。

本篇就介紹/記錄下應(yīng)用gitbook芒炼、nodejs、github hooks在服務(wù)器配置能自動(dòng)同步的學(xué)習(xí)筆記术徊。

具體涉及的點(diǎn)包括:

  1. 介紹gitbook的簡(jiǎn)單使用
  2. 在服務(wù)器上配置靜態(tài)資源站點(diǎn)
  3. 配置github hooks
  4. 配置hooks所需的腳本

gitbook的介紹

gitbook 是一個(gè)寫作工具本刽,我們通過安裝它的命令行工具 gitbook-cli 可以方便地將markdown文件生成靜態(tài)html。

安裝后如下幾個(gè)命令基本可以滿足需求:

  • gitbook init: 在當(dāng)前文件夾初始book赠涮,包含_book文件夾用于輸出html子寓,SUMMARY.md代表了入口
  • gitbook serve: 會(huì)在本地啟動(dòng)一個(gè)web服務(wù)器,修改了目錄下的文件會(huì)自動(dòng)觸發(fā)刷新
  • gitbook build: 將markdown文件生成html后打包到_book

書寫好的markdown文件笋除,經(jīng)過gitbook servegitbook build后斜友,就可以提交到在github新建的倉(cāng)庫(kù)了,比如:https://github.com/tangyefei/courses垃它。

服務(wù)器配置

在自己的服務(wù)器上安裝git鲜屏,并拉取項(xiàng)目烹看;然后安裝nginx,將指定訪問地址指向到自己的clone的項(xiàng)目文件夾下的_book即可訪問(nginx會(huì)默認(rèn)去該文件夾下找index.html文件)洛史。

github hooks

github hooks簡(jiǎn)單來(lái)說就是Github提供鉤子惯殊,能根據(jù)你的一些動(dòng)作,來(lái)做一些響應(yīng)也殖。

這個(gè)"動(dòng)作"可能是你向倉(cāng)庫(kù)push了代碼土思,這里"響應(yīng)"是Github會(huì)自動(dòng)發(fā)送一個(gè)可訪問的公網(wǎng)請(qǐng)求。

我們要做的就是毕源,將這個(gè)公網(wǎng)請(qǐng)求的地址作為接口地址在服務(wù)器上實(shí)現(xiàn)浪漠,讓它能在接收到Github發(fā)送的請(qǐng)求后,在服務(wù)器上進(jìn)行代碼同步操作霎褐。在Github上址愿,打開項(xiàng)目的Setting界面,定位的hooks的欄目冻璃,單擊新增按鈕响谓,需要配置的參數(shù)有三個(gè):

  • Payload URL: 請(qǐng)求地址 比如 http://mysite.org:8081
  • Secret: 請(qǐng)求密碼,可以設(shè)置一個(gè)密碼省艳,用于服務(wù)器校驗(yàn)
  • Content type: 請(qǐng)求類型娘纷,考慮后面要用node.jscreateServer進(jìn)行處理,就選擇application/json即可
hook add

配置腳本

我們?cè)诖a倉(cāng)庫(kù)中新增一個(gè)github-hooks.js跋炕,并提交并同步到服務(wù)器上赖晶,內(nèi)容如下:

let crypto = require('crypto');
let secret = "THIS-IS-YOUR-SECRET";
let repo = "/home/courses";
let http = require('http');
let exec = require('child_process').exec;
let port = '8081';

function getSignature(buf) {
    var hmac = crypto.createHmac("sha1", secret);
    hmac.update(buf, "utf-8");
    return "sha1=" + hmac.digest("hex");
  }
  
function verifyRequest(req, res, buf) {
   // github基于密碼發(fā)送的簽名
    var expected = req.headers['x-hub-signature'];
   // 本地根據(jù)密碼計(jì)算的簽名
    var calculated = getSignature(buf);
    console.log("X-Hub-Signature:", expected, "Content:", "-" + buf.toString('utf8') + "-");
    // TODO the compare always not pass
    if (expected !== calculated) {
      console.error("Invalid signature.");
    //   throw new Error('wrong signature')
    } else {
      console.log("Valid signature!");
    }
}

http.createServer(function (req, res) {
   console.log('sync repo reach...');
   // 只要有請(qǐng)求進(jìn)入,就會(huì)執(zhí)行到此處
    req.on('data', function(chunk) {
       // POST類型的請(qǐng)求會(huì)到此處
        try {
            verifyRequest(req, res, chunk)
            exec('cd ' + repo + ' && git pull');
        } catch(e) {
            console.error(e)
        }
    });
    res.end();
}).listen(port);

我們可以通過node github-hooks.js 啟動(dòng)它辐烂,雖然它接收POST請(qǐng)求才能正常處理遏插,但先確保在瀏覽器上訪問 http://mysite.org:8081/ 能返回200狀態(tài)(表示請(qǐng)求有效)。

下一步就可以在驗(yàn)證鉤子是否生效纠修,通過在個(gè)人電腦上提交代碼胳嘲,然后查看服務(wù)器上命令行中是否有 sync repo reach...的輸出。

麻煩的是扣草,我們需要在命令行執(zhí)行Ctrl+C退出啟動(dòng)的github-hooks.js了牛,然后去查看文件是否更新,或者手動(dòng)重啟下nginx辰妙。

forever后臺(tái)運(yùn)行腳本

為了在服務(wù)器上后臺(tái)運(yùn)行github-hooks.js鹰祸,我們需要通過npm安裝forever,然后通過命令后臺(tái)啟動(dòng):

$ npm install forever -g
$ nohup forever start github-hooks.js &

注:forever啟動(dòng)命令執(zhí)行完成后上岗,回車后可以回退到命令行繼續(xù)操作福荸。如果發(fā)現(xiàn)啟動(dòng)的服務(wù)Exit 了,需要檢查是否拼寫錯(cuò)誤肴掷,比如 start github-hooks.js 寫成了 start github-hooks敬锐;只有發(fā)現(xiàn)回車后背传,服務(wù)狀態(tài)Done的狀態(tài)才算啟動(dòng)成功。

當(dāng)然也可以 forever list 查看啟動(dòng)的服務(wù)台夺,它會(huì)列出服務(wù)相關(guān)的列參數(shù)(包括id)径玖;可以使用forever kill id 來(lái)關(guān)閉服務(wù)。

使用自動(dòng)更新提交自動(dòng)觸發(fā)

在個(gè)人電腦上書寫的目錄中颤介,gitbook serve可以啟動(dòng)web服務(wù)器后梳星,可以書寫完成的時(shí)候用git命令提交。

代碼提交后滚朵,就能在服務(wù)器上看到自己書寫的最新的內(nèi)容冤灾。

下圖是Github Hooks中成功觸發(fā)的信息,可以詳情辕近,也可以手動(dòng)再次觸發(fā):

delivery history

下圖是個(gè)人筆記站點(diǎn)上的內(nèi)容韵吨,有代碼提交就能直接同步到:

course home
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市移宅,隨后出現(xiàn)的幾起案子归粉,更是在濱河造成了極大的恐慌,老刑警劉巖漏峰,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糠悼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡浅乔,警方通過查閱死者的電腦和手機(jī)倔喂,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)靖苇,“玉大人滴劲,你說我怎么就攤上這事」烁矗” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵鲁捏,是天一觀的道長(zhǎng)芯砸。 經(jīng)常有香客問我,道長(zhǎng)给梅,這世上最難降的妖魔是什么假丧? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮动羽,結(jié)果婚禮上包帚,老公的妹妹穿的比我還像新娘。我一直安慰自己运吓,他們只是感情好渴邦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布疯趟。 她就那樣靜靜地躺著,像睡著了一般谋梭。 火紅的嫁衣襯著肌膚如雪信峻。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天瓮床,我揣著相機(jī)與錄音盹舞,去河邊找鬼。 笑死隘庄,一個(gè)胖子當(dāng)著我的面吹牛踢步,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丑掺,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼获印,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吼鱼?” 一聲冷哼從身側(cè)響起蓬豁,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎菇肃,沒想到半個(gè)月后地粪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琐谤,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年蟆技,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斗忌。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡质礼,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出织阳,到底是詐尸還是另有隱情眶蕉,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布唧躲,位于F島的核電站造挽,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏弄痹。R本人自食惡果不足惜饭入,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望肛真。 院中可真熱鬧谐丢,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至饭耳,卻和暖如春串述,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背寞肖。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工纲酗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人新蟆。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓觅赊,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親琼稻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子吮螺,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容