本篇是在VPS上搭建Hexo靜態博客的第一篇博文,寫本篇的目的一是紀念一下,二是作為一個部署文檔保留。 "博客地址" 相關描述 VPS環境是在 "搬瓦工" 上安裝的centos6(x86),1核,512MB,10GB,1000GB/月的配置($19.99/年,可用支付寶支付),主要的功能是搭個梯子, ...
本篇是在VPS上搭建Hexo靜態博客的第一篇博文,寫本篇的目的一是紀念一下,二是作為一個部署文檔保留。
相關描述
VPS環境是在搬瓦工上安裝的centos6(x86),1核,512MB,10GB,1000GB/月的配置($19.99/年,可用支付寶支付),主要的功能是搭個梯子,只做梯子好像有點浪費,於是買了個功能變數名稱,搭建了這個博客。
Hexo好早之前有聽說了,尤其喜歡next主題,簡潔大方,考慮到VPS環境的不穩定問題,所以使用github作為博文的中轉及保存的倉庫,利用github的webhooks,當有push操作時直接發送請求,VPS監聽該請求並執行更新操作,這樣即使VPS環境掛了,博文信息還在github上,重新部署一遍就可以了。
具體過程
主要的步驟有:Hexo本地環境搭建、github倉庫創建、webhooks創建、VPS伺服器Hexo下載安裝、VPS監聽和更新腳本。
Hexo本地環境搭建
關於Hexo本地環境搭建比較簡單,直接參考Hexo,這裡只做簡單的記錄:
npm install -g hexo-cli
hexo init hexoblog
cd hexoblog
npm install
# 新增文章
hexo new <title>
# 生成靜態文件
hexo generate
# 簡寫
hexo g
# 啟動服務,查看博文
hexo server
有關Hexo主題,本人比較喜歡next,最近好像有點樣式的調整,不是特別喜歡,所以使用的還是原有的舊版。
github倉庫創建
github遠程倉庫創建so easy,直接進入github倉庫tab頁面,點擊創建即可。為了提交本地hexo相關文件的方便,我在github上配置了本地環境的ssh公匙信息,以達到不用輸入用戶名密碼即可使用git命令將更改的文件提交到github相關倉庫上。
具體配置過程
首先在本地環境配置生成秘鑰文件,使用git的命令客戶端
# 檢查本地環境是否已有生成的密匙信息
cd ~/.ssh
# 如果沒有.ssh目錄文件,執行下麵命令,直接一路回車
ssh-keygen -t rsa
生成如下結構
.
├── id_rsa
├── id_rsa.pub
└── known_hosts
直接拷貝id_rsa.pub裡面的內容,併在github-setting-SSH and GPG keys中創建SSH key,粘貼內容到Key中,title可不填,保存後title直接顯示所添加主機的主機名。
webhooks創建
鉤子的創建在github上配置非常簡單,進入到倉庫頁面,點擊Settings-Webhooks,直接Add webhooks,這裡只選擇監聽push事件,push事件發生後github將發送請求到VPS監聽的URL(http://host:監聽埠/webhooks/push/123 ) 上,VPS負責相關的更新操作。
VPS伺服器安裝Hexo
與本地安裝一樣,執行
npm install -g hexo-cli
即可(當然首先需要安裝nodejs環境)
VPS監聽
最近一直研究Nodejs,所以在VPS上使用Nodejs啟動監聽服務,非常簡單:
// hexowebhooks.js
var http = require('http')
var exec = require('child_process').exec
http.createServer(function (req, res) {
if(req.url === '/webhooks/push/123'){
exec('sh ./deploy.sh');
}
res.end()
}).listen(監聽埠)
其中,deploy.sh為更新腳本,用於更新VPS靜態博文,將監聽埠更換成你要監聽埠即可。這裡使用pm2管理監聽服務。
運行
pm2 start hexowebhooks.js
更新腳本
更新腳本使用shell腳本,主要步驟是:
- 清除靜態文件
- 刪除db.json文件(不然pull github代碼有衝突)
- 拉github上的代碼
- 生成靜態文件
在執行shell之前,需要先將github倉庫代碼pull下來,設置遠程倉庫信息
git clone https://github.com/tonny0812/hexoblog.git
或者
git clone [email protected]:tonny0812/hexoblog.git
cd hexoblog
git remote add hexo "[email protected]:tonny0812/hexoblog.git"
其中,hexo是遠程倉庫地址的別名。
更新腳本:
// deploy.sh
hexo clean
rm -f ./db.json
git pull hexo master
hexo g
然後訪問博客網址即可,這裡使用nginx反向代理,將靜態網頁內容映射到80埠上,由於VPS在美國,所以不需要備案即可訪問80埠,國內的VPS(如阿裡雲)需要備案,查到使用HTTPS監聽443埠不需要備案可以使用,還沒有去折騰。
總結
這裡的關鍵是使用了github的webhooks鉤子機制,可以利用github這種免費的git數據倉庫保存文章信息,VPS直接拉github上的代碼,然後執行更新腳本,發佈文章,由於使用nginx做代理,所以直接執行完更新腳本之後就可以直接訪問新寫的文章了。