原文連接node
像Hexo這種靜態博客用起來很方便,可是硬傷就是沒有後臺管理,每次想寫博客或者說想要修改原博客的話,都須要在本機上找markdown文件,修改以後發佈,尤爲是若是機器上沒有安裝hexo,git等工具的時候,就沒法修改了。所以hexo可不能夠以像wp,ghost這種有後臺管理, 隨時隨地編輯博客呢?nginx
正巧hexo專門有一個插件hexo-admin 提供了在web UI下增刪改查博客的功能,我也正好有一個VPS, 因而就有了下面的一種方法.git
首先說一下條件與需求。 我本身有一個的VPS,原本是能夠直接將hexo部署到VPS的,可是考慮到本身維護的VPS的穩定性等問題,最後決定將hexo的靜態頁面部署github-pages上。 github
個人目的有兩個:web
擁有在線編輯博客的後臺markdown
本地機器同時也能夠編輯發佈博客hexo
兩者須要保持同步函數
基於這樣的需求,僅僅靠github pages顯然不可行了,必須藉助VPS了.保持同步的意思是VPS的內容與本地機器上的博客的資源要保持一致。就是說我在線修改了某篇博客,而後以後若是能夠很簡單的同步到本地,使得兩端保持同步,反過來同樣。工具
個人作法是:spa
將hexo目錄下的相關文件包括_config.yml,source/等文件創建一個私人repo(我的使用coding.net)
VPS上安裝好hexo,具體過程與換臺機器安裝同理, 可參考這篇博客hexo遷移重裝。
VPS上安裝hexo-admin插件,這樣能夠在線編輯了. 在這一步的時候, 爲了方便,我用了一個子域名以及在VPS上用nginx作前段端口轉發.
到這裏後臺管理基本沒有問題了. 接下來就是在線發佈了. 正巧的是hexo-admin提供了這個功能, 有一個Deploy的功能,具體實現是使用nodejs的spawn
函數來執行發佈腳本的. 一開始不太懂spawn
這個函數的使用, 就直接在deploy中隨便輸入了東西,結果各類 spawn err. 後來查過資料,才知道deploy的輸入的位置實際上是對hexo-admin
的配置裏面deployCommand
的選項,能夠爲空. 打個比方,若是我在deployCommand
寫的是./hexo-deploy
, 而後點擊deploy按鈕以後, 後臺就能夠執行hexo-deploy
腳本的內容了. 有了這個接口就很是靈活了. 由於基於此, 咱們不但來發布博客,甚至能夠把同步的腳本加進去.具體參考 https://github.com/jaredly/he...
下面說一下發布以及同步的操做:
在博客目錄寫一個有關git同步的小腳本:server-upload.sh
用來同步VPS目錄下的變化,主要代碼其實就是先git pull
拉取repo最新, 以後在push. 具體腳本代碼再也不贅述.
建一個hexo-deploy
的腳本,內容:
hexo g && hexo d ./server-upload.sh
利用hexo-admin的deploy功能,能夠在線發佈,注意修改_config.yml
: 加上hexo-admin的admin選項, 加一個deployCommand: ./hexo-deploy
的字段,以下:
admin: username: XXX password: XXXXX deployCommand: './hexo-deploy'
編輯完博客時候,發佈的時候,須要點擊hexo-admin的deploy。這樣在後臺就能夠執行前面定義的hexo-deloy
腳本了
本地機器也須要有一個upload.sh
的腳本, 每次一樣須要先git pull 在git push 到私人repo. 其實就是版本控制那一套.
到如今基本完成了本身能夠隨時隨地編輯博客而且多端同步的需求了. 以前也考慮過CI持續集成,可是大部分都是再創建一個分支, 須要把博客的source公開, 不太合適. 因此就選擇了hexo-admin這種方法.
這篇博客即是在線完成的.
其實這裏面的坑仍是蠻多的(主要不熟悉node). 此外開始使用supervisor作後臺運行監控, 結果不知爲什麼, 在hexo d
包括git的pull或者push等操做,都會報錯,提示讓我確認git用戶, 可是我已經設置了git config
的email和name. 查了不少資料也沒有解決, 後來直接拋棄supervisor, 直接使用nohup
來放後臺運行了. 大概是這樣了, 有什麼問題能夠留言或者郵件.