如何用Hexo搭建個(gè)人博客

題圖

以前用Wordpress搭建過一個(gè)博客網(wǎng)站表制,Wordpress雖然安裝簡單,功能強(qiáng)大埋泵,但是對(duì)于個(gè)人建站來說有點(diǎn)復(fù)雜了幔欧。最近發(fā)現(xiàn)用Hexo建站很流行,于是將網(wǎng)站從Wordpress遷移到了Hexo丽声。

Hexo是如何工作的礁蔗?

首先,Hexo是一個(gè)搭建靜態(tài)網(wǎng)站的工具雁社,所以Hexo生成的文章頁面都是靜態(tài)頁面浴井。根據(jù)我的總結(jié),用Hexo發(fā)布一篇文章的大致流程如下:

Hexo

雖然Hexo還有很多豐富強(qiáng)大的功能歧胁,但以上流程可以很好幫助我們大致理解Hexo這個(gè)工具滋饲,很明顯它和Wordpress之類的建站工具不太一樣,Hexo更多的事都是在“本地”操作的喊巍,因?yàn)樯傻氖庆o態(tài)頁面屠缭,所以你網(wǎng)站所在的服務(wù)器只需要存儲(chǔ)Hexo生成的結(jié)果即可。

Hexo + Github + 阿里云服務(wù)器

阿里云服務(wù)器+域名+hexo搭建個(gè)人博客

安裝配置

請(qǐng)?jiān)谀阕约旱碾娔X上安裝好Node.js和Hexo(你在哪兒寫Markdown就把Hexo安裝到哪里)崭参。Hexo的下載和安裝可以直接參考官方文檔呵曹,此處略過。如何配置Hexo以及用Hexo生成一篇文章也請(qǐng)參考官方文檔何暮,比較簡單奄喂。

Hexo目錄放到Github

建議將你的Hexo目錄放到github上管理,可以在github上新建一個(gè)private的repo海洼。Hexo生成目錄的時(shí)候會(huì)自動(dòng)包含一個(gè).gitignore 文件跨新,請(qǐng)保留這個(gè)文件。如何在Github創(chuàng)建repo并和本地同步坏逢,請(qǐng)單獨(dú)搜索相關(guān)教程域帐,比較常規(guī)。

網(wǎng)站目錄托管到Github

注意是整,我們需要另外一個(gè)Git Repo來存放你的網(wǎng)站文件肖揣,這個(gè)和剛才的Hexo目錄并不是一回事,同樣我們需要在Github上新建一個(gè)repo浮入,然后在本地的Hexo配置文件_config.yml中將配置修改成如下的樣子龙优。參考:https://hexo.io/zh-cn/docs/one-command-deployment.html

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
  type: git
  repo: git@github.com:xxxxxxxx/blog.git
  branch: master

這樣當(dāng)你每次用Hexo生成好靜態(tài)文件后,可以通過* hexo d *命令一鍵將你的網(wǎng)站上傳到github事秀。

自動(dòng)部署到個(gè)人服務(wù)器

你的整個(gè)靜態(tài)網(wǎng)站目前就是github上的一個(gè)repo彤断,你希望將其部署到你的服務(wù)器上野舶,所以你需要一種方式將其自動(dòng)部署到服務(wù)器上,這個(gè)過程是怎么實(shí)現(xiàn)的呢瓦糟?我們可以通過如下方式完成:

  1. 在服務(wù)器端 clone 下來你的repo
  2. 在github上配置webhook筒愚,指向你的server
  3. 在server端監(jiān)聽webhook的事件
  4. 監(jiān)聽到事件之后自動(dòng)運(yùn)行g(shù)it pull

1. 在服務(wù)器端 clone 下來你的repo

這一步需要你在服務(wù)器端安裝git,同時(shí)在github端加入你自己的SSH KEY菩浙,相當(dāng)于在github上給服務(wù)器添加到白名單巢掺,這樣每次服務(wù)器git pull 的時(shí)候才能順利完成。clone 的時(shí)候一定要選擇ssh方式劲蜻,形如: git clone git@github.com/...

2. 在github上配置webhook陆淀,指向你的server

直接到你的repo的setting選項(xiàng)里面去找,按照提示操作先嬉。

3. 在server端監(jiān)聽webhook的事件

首先要在你個(gè)人的服務(wù)器上安裝 webhook 插件轧苫,這一步必不可少:

npm install -g github-webhook-handler

然后在服務(wù)器新建 webhook.js 文件,名字你可以任意取疫蔓,這個(gè)文件其實(shí)就是一個(gè)node服務(wù)含懊,一會(huì)我們要運(yùn)行它。

var http = require('http');
var spawn = require('child_process').spawn;
// 在我的服務(wù)器上使用相對(duì)路徑會(huì)出錯(cuò)衅胀,所以下面用了絕對(duì)路徑“ /usr/... 的格式
var createHandler = require('/usr/lib/node_modules/github-webhook-handler');

// 下面填寫的myscrect跟github webhooks配置一樣岔乔,下一步會(huì)說;path是我們?cè)L問的路徑
var handler = createHandler({ path: '/hexo', secret: '你的密碼滚躯,要和github上配置的一致' });
http.createServer(function (req, res) {
  handler(req, res, function (err) {
    res.statusCode = 404;
    res.end('no such location');
  })
}).listen(7777);
handler.on('error', function (err) {
  console.error('Error:', err.message)
});
// 監(jiān)聽到push事件的時(shí)候執(zhí)行我們的自動(dòng)化腳本
handler.on('push', function (event) {
  console.log('Received a push event for %s to %s',
    event.payload.repository.name,
    event.payload.ref);
  runCommand('sh', ["/path/to/deploy.sh"], function( txt ){
    console.log(txt);
  });
});
function runCommand( cmd, args, callback ){
    var child = spawn( cmd, args );
}

其中deploy.sh中的內(nèi)容如下:

#!/bin/bash

cd /var/www/blog
git reset --hard origin/master
git clean -f
git pull origin master

然后雏门,先用如下命令驗(yàn)證一下服務(wù)是否可以正常運(yùn)行:

node webhook.js

沒問題之后可以用pm2這個(gè)工具來重新運(yùn)行服務(wù)(如果沒有pm2請(qǐng)先用node安裝它)

pm2 start webhook.js

大功告成,之后你每次用hexo d部署之后掸掏,你的文件都會(huì)上傳到github茁影,然后自動(dòng)推送到你個(gè)人的服務(wù)器上。

更多討論請(qǐng)關(guān)注我的公眾號(hào): 黑客悟理

如果你喜歡我的文章丧凤,可以在任一平臺(tái)搜索【黑客悟理】關(guān)注我募闲,非常感謝!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末愿待,一起剝皮案震驚了整個(gè)濱河市浩螺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呼盆,老刑警劉巖年扩,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚁廓,死亡現(xiàn)場(chǎng)離奇詭異访圃,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)相嵌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門腿时,熙熙樓的掌柜王于貴愁眉苦臉地迎上來况脆,“玉大人,你說我怎么就攤上這事批糟「窳耍” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵徽鼎,是天一觀的道長盛末。 經(jīng)常有香客問我,道長否淤,這世上最難降的妖魔是什么悄但? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮石抡,結(jié)果婚禮上檐嚣,老公的妹妹穿的比我還像新娘。我一直安慰自己啰扛,他們只是感情好嚎京,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著隐解,像睡著了一般鞍帝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厢漩,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天膜眠,我揣著相機(jī)與錄音,去河邊找鬼溜嗜。 笑死宵膨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炸宵。 我是一名探鬼主播辟躏,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼土全!你這毒婦竟也來了捎琐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤裹匙,失蹤者是張志新(化名)和其女友劉穎瑞凑,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體概页,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡籽御,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片技掏。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡铃将,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哑梳,到底是詐尸還是另有隱情劲阎,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布鸠真,位于F島的核電站悯仙,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吠卷。R本人自食惡果不足惜雁比,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望撤嫩。 院中可真熱鬧偎捎,春花似錦、人聲如沸序攘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽程奠。三九已至丈牢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間瞄沙,已是汗流浹背己沛。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留距境,地道東北人申尼。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像垫桂,于是被迫代替她去往敵國和親师幕。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348