配置hexo博客,讓云服務器執行它計算處理的使命

原文鏈接:https://www.bigademo.com/2017/03/28/%E9%85%8D%E7%BD%AEhexo%E5%8D%9A%E5%AE%A2%EF%BC%8C%E8%AE%A9%E4%BA%91%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%89%A7%E8%A1%8C%E5%AE%83%E8%AE%A1%E7%AE%97%E5%A4%84%E7%90%86%E7%9A%84%E4%BD%BF%E5%91%BD/index.html

由來:之前使用過一段時間的hexo,但是每回提交文章的時候,就在本地的電腦上執行一段時間,雖然不多,但是挺煩的。
靈感:無意之中,看到了云主機和VPS的區別這類的文章,忽然想到既然我的云主機有計算的能力,那為何我非得自己的電腦執行一堆云主機也可以執行的命令了,云主機我也是花了真金白銀的。讓云主機老閑著,我都感覺對不起自己,于是乎我重新整理了我的博客,讓云主機開始干那么一點點活。

基礎:

使用過hexo博客的人都知道,hexo博客要使用hexo clean && hexo g && hexo d的命令將本地的MarkDown文件生成html的靜態文件,然后使用hexo d的命令推送到服務器。這里推薦一篇不錯的博客,用于將hexo的博客部署到自己的云主機上。https://www.micronbot.com/blog/8.html

條件:

  • 新建一個用戶用于Git的推送和克隆
  • Git服務端
  • nvm 用于安裝node環境
  • hexo
  • pm2 用于維護hexo的進程

這里以CentOS的為例

Step1:新建一個用戶用于Git的推送和克隆(強烈建議第一步執行這個)

useradd git
passwd git
//建立git這個用戶的密碼
su git //切換到git用戶,執行后面的操作。

后面的命令一定要在git用戶下操作,要么會導致git權限不夠的問題

Step2:配置Git服務端

執行一句命令即可

yum install git 

等待一段時間以后,可以使用如下命令查看是否安裝成功。

git --version

Step3:安裝nvm 用于安裝node環境

Node Version Manager 這個nvm在github的官網

用于如下命令安裝nvm,當然官網也提供了wget的安裝方式,請大家到NVM的官網自己去看吧。

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash

同樣,可是使用nvm --version的命令查看nvm的安裝情況。

Step4:安裝NodeJS 用于安裝hexo環境

使用如下命令會安裝嘴最新版本的Node,當然也可以安裝指定的版本。

nvm install node

同樣,使用node --version的命令查看Node的安裝情況。

Step5: 安裝hexo環境

安裝好Node的同時,也安裝NPM的這個管理器,我們使用npm的命令安裝hexo。HEXO官網

npm install hexo-cli -g

Step6: 安裝PM2用于維護hexo的進程

推薦一個PM2的介紹文章PM2 介紹
使用如下命令安裝PM2

npm install pm2 -g

這樣的話,準備工作完成了,接下來開始配置,首先說一個流程

  1. 配置裸倉庫
  2. 建立hexo博客訪問的目錄
  3. 新建app.js ,用于PM2維護hexo
  4. 使用端口轉發的命令,讓hexo博客默認的4000端口轉到80端口
  5. 新建hooks,每當git更新的時候,用于更新博客
  6. 修改git權限,禁止ssh登錄。

我這里將倉庫和訪問目錄全部放在git這個用戶的家目錄里/home/git/

Step1: 配置裸倉庫

這里說一下裸倉庫和普通倉庫的區別,裸倉庫沒有工作區,而普通倉庫有。普通倉庫不能提交,而裸倉庫可以。

git init --bare hexo.git

使用上面的命令建立一個裸倉庫,現在我們可以在本地克隆這個倉庫,也可以提交,但是由于沒有工作區我們不能直觀的看到提交的東西。我們可以使用這個命令來查看

git clone /home/git/blog/hexo.git /home/git/blog/hexo/

上面的命令是將hexo.git 克隆到/home/git/blog/hexo/,其實和我們克隆服務端的git一樣。那么克隆成功以后,我們就可以在/home/git/blog/hexo/這個目錄里看到我們提交的文件了,一會我們會在hooks里配置這個命令的。

Step2:配置Hexo博客(在本地電腦執行)

當我們在本地克隆下hexo.git的倉庫后,會有一個hexo的文件夾。那么我們就在這個文件夾里初始化hexo,建立hexo博客,然后提交到服務端。

hexo init 

建立好hexo的博客以后,我們在source/posts這個文件夾里新建一個MarkDown的文件,然后我們提交到服務器上,使用上之前提到的命令可以看到我們提交的東西。

Step3:新建app.js ,放在本地hexo的文件夾里,用于PM2維護hexo

我這個是在網上復制的

var spawn = require('child_process').spawn;

free = spawn('hexo', ['server', '-p 4000']);/* 其實就是等于執行hexo server -p 4000*/

free.stdout.on('data', function (data) {

    console.log('standard output:\n' + data);

});

free.stderr.on('data', function (data) {

    console.log('standard error output:\n' + data);

});

free.on('exit', function (code, signal) {

    console.log('child process eixt ,exit:' + code);

});

Step4: 使用端口轉發的命令,讓hexo博客默認的4000端口轉到80端口

因為80端口只有root權限的用戶才能使用,而我們使用git這個用戶無法使用80端口,那么我們使用端口轉發的功能。大家可以看這個文章配置iptables,把80端口轉到8080

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 4000

Step5:新建hooks,每當git更新的時候,用于更新博客

新建一個名叫post-receive的文件,這個文件放在/home/git/blog/hexo.git/hooks/文件夾里。

#!/bin/bash -l
GIT_REPO=/home/git/blog/hexo.git
PUBLIC_WWW=/home/git/blog/hexo
rm -rf ${PUBLIC_WWW}
git clone $GIT_REPO $PUBLIC_WWW
cd $PUBLIC_WWW
hexo clean && hexo g
pm2 delete all
pm2 start app.js
if [[ $? == 0 ]]
then
    echo "Congratulations! Your blog has been correctly deployed"
else
    echo "Unfortunately your blog has not been deployed correctly"
fi

這里講一下這個Shell腳本,

  1. GIT_REPO這個是上面建立的裸倉庫。
  2. PUBLIC_WWW這個是用于展示的目錄。
  3. 刪除展示目錄
  4. 克隆
  5. 切換到展示目錄
  6. 清除緩存,并生成新的靜態博客。
  7. pm2刪除所有運行的進程(這個只是為了維護hexo的進程,沒有其他的,如果有其他的進程,那么根據進程ID刪除
  8. 使用pm2維持hexo博客的進程。

復制上面的代碼到post-receive這個文件里保存。這里需要注意的是,post-receive這個文件的權限應該是git這個用戶的。如果不是,使用如下這個命令修改,這里講git家目錄下的文件夾和文件的權限的變成git這個用戶。

chown -R git:git  /home/git/blog/

再使用如下命令,為post-receive這個文件增加執行的權限

chmod +x /home/git/blog/hexo.git/hooks/post-receive

Step6:修改git權限,禁止ssh登錄

打開/ect/passwd這個文件,找到git這個用戶,修改他的權限

git:x:1003:1003:,,,:/home/git:/bin/bash

改為

git:x:1003:1003:,,,:/home/git:/usr/bin/git-shell

主要是修改后面的usr/bin/git-shell這個部分。

到此為止,就配置完了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,967評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,273評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,870評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,742評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,527評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,010評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,108評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,250評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,769評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,656評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,853評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,371評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,103評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,472評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,717評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,487評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,815評論 2 372

推薦閱讀更多精彩內容