以前的WP博客荒廢了很久以後終於感受該作點正事了,因此這幾天花了點時間從新弄了下hexo,畢竟是比較符合前端的一個博客框架。比起wp來講,hexo輕量級的多,並且易部署(指速度優化方面),也不須要一個專門的服務器來放置(這個實際上是我選擇hexo的最終緣由。手裏雖然有vps,可是由於跑着ss加上國內ping值過高,最終確定影響國內速度,因此就一直沒用來放blog)固然沒有後臺也就意味着不能隨時隨地寫了就發,這個相對WP來講是弱勢,但我感受還好,畢竟不會經常在外面跑,並且寫博客基本都是在電腦前,再不濟也能夠先把MD文件寫完後拷回去發佈。css
先大概說下我目前blog的部署方式:html
github和gitcafe雙線路部署,國內線路解析到gitcafe,國外線路解析到github。前端
本身的域名且未備案(我的博客不建議備案)node
域名解析採用dnspod國際版(這個很重要,後面會解釋)linux
使用QQ的自定義域名郵箱git
圖片採用七牛存儲分流github
多說評論有必定優化(顯UA以及自定義樣式等)shell
而後下面說下我部署過程當中遇到的部分問題以及相應的解決方法,因爲我本身是Windows 7
環境,因此下面不少解決方法可能對*nix黨不適用,還請注意。問題的排列按照最基礎的node安裝,git配置,域名配置,hexo安裝,hexo優化美化的順序來,不過會跳過不少能夠直接百度到的內容,因此建議參考Hexo常見問題解決方案以及hexo你的博客若是你遇到的問題我這裏沒提到的話,你能夠去這兩篇文章搜下解決方案。npm
因爲某些你們都知道的緣故,npm官方源在國內的下載速度極其慢,用官網的npm install hexo-cli -g
速度很是感人,因此不推薦這種方式。這裏我推薦用淘寶的npm分流——cnpm
安裝過程很簡單:npm install -g cnpm --registry=https://registry.npm.taobao.org
而後等着裝完便可,以後的用法和npm同樣,無非是把npm install
改爲cnpm install
,可是速度比以前快了不止一個數量級(不過下文爲了方便理解,仍是會用默認的npm安裝,若是你發現速度很差的話,請自行替換成'cnpm')segmentfault
npm安裝的時候有時候會出各類錯,而最多見的無非是權限問題、網絡鏈接、包名輸錯。注意看cmd窗口的報錯信息便可。
windows黨請注意安裝的時候將cmd用管理員方式打開(這個是我見過報錯最多的),想必npm ERR! Please try running this command again as root/Administrator.
各位也不是第一次見了
hexo插件安裝的時候先cd
到blog根目錄,而且安裝參數不要帶-g
。 (即不要全局安裝,由於全局安裝的時候插件會被裝到node的根目錄下去,而不是blog目錄),hexo的插件須要在blog目錄下才能工做
有部分hexo插件用普通的install
可能會出現安裝完的版本和最新版本有區別,並且怎麼也升級不上去的狀況(npm update
無效),這種狀況下請手動指定版本安裝:
語法:npm install [@<scope>/]<name>@<version>
例子:npm install hexo@3.1.1 --save
由於是gitcafe和github多線路部署,加上不想每次更新的時候都輸賬號密碼,因此https傳輸確定不行了,只能是ssh傳輸。不過大部分教程都是單網站部署。因此特意把這個單獨拿出來。建議參考gitcafe的這篇部署教程,通常人看完應該就不須要看我這底下的內容了,我這裏步驟都複製以上教程,僅對部分地方加點我我的感受比較重要的註釋
git客戶端安裝的時候能夠選擇要不要集成到cmd裏,有些人可能和我同樣沒有集成,致使cmd對部分linux下的命令沒法解析(好比~
)
強烈建議如下操做在git bash裏進行。不要在cmd裏敲git命令!
強烈建議如下操做在git bash裏進行。不要在cmd裏敲git命令!x2
強烈建議如下操做在git bash裏進行。不要在cmd裏敲git命令!x3
由於很重要因此說三遍
生成新的 SSH 祕鑰
記得把如下命令中的 YOUR_EMAIL@YOUREMAIL.COM 改成你的 Email 地址ssh-keygen -t rsa -C "YOUR_EMAIL@YOUREMAIL.COM" -f ~/.ssh/gitcafe
上面最末尾的./ssh/gitcafe中的'gitcafe'即爲存在本地的密鑰文件名,因此這裏是可 以自定義的。
密鑰文件本地存放路徑爲git的home參數對應路徑下的.ssh文件夾,通常是"C:/Users/[username]/.ssh",若是沒有找到的話到git bash裏輸入$HOME
回車而後自行 去對應目錄查找便可
生成過程當中會出現如下信息,按屏幕提示操做,並記得輸入 passphrase 口令。
$ ssh-keygen -t rsa -C "YOUR_EMAIL@YOUREMAIL.COM" -f ~/.ssh/gitcafe Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /c/Users/username/.ssh/gitcafe. Your public key has been saved in /c/Users/username/.ssh/gitcafe.pub. The key fingerprint is: 15:81:d2:7a:c6:6c:0f:ec:b0:b6:d4:18:b8:d1:41:48 YOUR_EMAIL@YOUREMAIL.COM
這將在 ~/.ssh/ 目錄下生成 gitcafe 和 gitcafe.pub 文件,記住千萬不要把私鑰文件 gitcafe 透露給任何人。
passphrase的做用是在密鑰傳輸的過程當中加一個解密鑰的過程,使得即便密鑰文件不當心泄露了,別人也不能直接利用密鑰操做你的git賬號,可是因爲我我的處理不了ssh-agent自動填充的問題,致使每次更新git都要輸passphrase,因此我就沒加了,上面的過程裏是直接兩次回車過去了。
在 SSH 用戶配置文件 ~/.ssh/config 中指定對應服務所使用的公祕鑰名稱,若是沒有 config 文件的話就新建一個,並輸入如下內容:
Host gitcafe.com www.gitcafe.com IdentityFile ~/.ssh/gitcafe
因爲是gitcafe和github雙站,因此這裏須要再參考上面的語法另外創建一個github的規則
添加 gitcafe.pub 中的內容到 GitCafe 網站。
具體請參考[如何安裝和設置 Git](http://gitcafe.com/GitCafe/Help/wiki/%E5%A6%82%E4%BD%95%E5%AE%89%E8%A3%85%E5%92%8C%E8%AE%BE%E7%BD%AE%20Git)中的第三節。
最後測試配置文件是否正常工做
ssh -T git@gitcafe.com
若是鏈接成功的話,會出現如下信息。
Hi USERNAME! You've successfully authenticated, but GitCafe does not provide shell access.
對於這一步,個人建議是測試命令裏再加個
-v
參數,即
ssh -vT git@gitcafe.com
由於比起"ssh -T"返回的模糊信息相比,"-v"會把整個傳輸過程當中的操做都顯示出來,哪一步出錯很明顯就能夠看出來,利於出現問題的調試
完成
測試經過後,你就可使用獨立的一套公祕鑰來使用 GitCafe 了。Enjoy!
這個解決方法來自v2ex的"wy315700",感謝指點
因爲網站未備案,因此不能直接放在七牛上(不過若是所有放在七牛,也就失去了雙線路的部署意義,因此我我的感受不必全站七牛)
先科普一些域名相關的小知識:
關於A解析和CNAME解析的區別:
A解析:只能填IP地址,IP地址若是換了的話就須要換解析記錄
CNAME解析:解析到另外一個域名,即便被指向的域名的ip發生變化,也不須要更改解析記錄。CNAME優先級高於A解析(至少在DNSPOD是這樣的)
域名的nameserver(通常簡稱"NS")
nameserver的做用是指定域名的dns解析服務商,好比同時在萬網和dnspod給"www.a.com"作了解析,那麼哪一個解析起做用,就是由NS來決定的。這個在域名註冊商的域名管理的裏能夠更改。NS記錄建議只寫一個dns解析商的,多NS可能會有問題,能夠參考這篇文章
DNSPOD國內版本目前只對國內線路作細分,沒有海外線路的選擇,因此不推薦,建議用dnspod的國際版
操做流程:
註冊dnspod國際賬號
域名服務商那裏更改ns記錄爲dnspod國際版的nameserver,默認爲
a.dnspod.com. b.dnspod.com. c.dnspod.com.
在dnspod添加域名解析:
先加一條cname解析國內線路給gitcafe,而後再加一條默認線路的cname給github便可完成雙線路解析
github自定義域名須要在項目根目錄下添加一個CNAME
文件,文件內容爲自定義域名。CNAME文件建立完以後扔到blog/source目錄下便可 (不能直接扔到public下,理由見下文)
gitcafe須要在項目作設置,具體參考官方wiki
好比i@chitanda.me
這種郵箱,目前我用的QQ的域名郵箱,免費,不過我這邊會遇到有時候gmail丟件的問題,因此準備看看過段時間轉zoho。
具體實現很簡單,就是域名解析里加條mx記錄,不作詳細解釋,能夠參考QQ域名郵箱的幫助(因爲通配的mx記錄和cname會有語法衝突,有些dns解析商是不支持這種寫法的,可是dnspod對語法要求不嚴格,能夠這麼寫。因此這也是我推薦dnspod的另外一個緣故)
另外有些域名服務商可能免費送了mail服務,也能夠用自帶的那個。我因爲域名註冊在name.com上,它們沒送,因此只能另外想辦法
首先須要明確一點,public目錄下的文件每次'hexo -g'的時候就會被從新生成,因此不要往這裏面聽任何東西,否則每次都要另外加。
而blog/source和blog/theme/[theme-name]/source裏的文件是不會被另外處理的,因此有些須要添加在網站根目錄的文件(如favicon,谷歌百度的站點認證文件之類的)能夠直接扔到這兩個文件夾底下,具體選哪一個路徑要視狀況而定
yml語法極度嚴格,不經過每每是空格問題,記得全部設置參數屬性末尾都要加空格
這個和主題有關,默承認能沒有,瀏覽器打開後根據開發者工具裏能夠看到當前主題下'favicon'的具體路徑和要求文件格式,對應作一個就能夠了。有時候是'png'但也有時候強制要求'.ico',能夠去比特蟲d等網站在線製做。
安裝hexo-deployer-git的0.0.4版!
安裝hexo-deployer-git的0.0.4版!
安裝hexo-deployer-git的0.0.4版!
很重要因此說三次。我以前安裝的時候默認都是0.0.3版,哪怕其實0.0.4已經出來了。而即便是徹底正常的配置,0.0.3版都會提示"fatal: Unable to create 'XXXXXX/.git/index.lock': File e
xists."(固定版本安裝辦法能夠看上文)
查看當前已安裝版本:
npm ls hexo-deployer-git
附正確配置:
deploy: type: git message: "xxxxx" repo: github: git@github.com:chitanda/chitanda.github.io.git,master gitcafe: git@gitcafe.com:chitanda/chitanda.git,gitcafe-pages
跟在","後面的是分支名字。注意傳輸地址應該是ssh格式的,不要弄成了https的地址
其實從評論質量來講的話,disqus可能更好點(畢竟是gfw認證網站,相比多說門檻稍微高一點,能夠過濾部分人羣),不過拖累網頁加載速度,因此我就換成多說了。
多說樣式能夠後臺自定義css,本站的多說css來自Next.Mist主題製做者的樣式
顯UA功能須要改多說的js,具體參考此文
單說"Next"主題下改完embed.js後須要作的事情:
"Next"主題內嵌多說,因此須要更改主題文件:
打開/themes/next/layout/_scripts/comments/duoshuo.swig
,更改"embed.js"的文件路徑便可。這裏我是把js扔到7牛上去了,你也能夠直接放到主題裏而後更新到gitpage上去。
因爲git-page自帶空間只有300M,看起來博客夠用了,可是總以爲憋得慌,對於全圖片直接扔上去這種事我的沒太大信心,因此決定圖片用七牛分流(雖然這樣某種意義上對雙線路部署的作法產生了消極影響,不過考慮到七牛的CDN速度以及資本主義國家的網速加上未雨綢繆的300M空間,最終仍是決定圖片傳到七牛上去)
我最初的辦法是用hexo的一個插件(hexo-qiniu-sync)
可是後來發現這個插件效率不高,一開整個hexo的反應都慢了,並且最主要一點是失去了MD文件的通用性,因此最終棄用該方法。
另外採用了一個本地同步文件到七牛的插件:qiniu4blog,使用很簡單,具體能夠看文檔。
~~原本想用網盤的自動備份工具,可是考慮到blog的posts文件夾在寫文章時的更新頻率,我又放棄了這種作法。
另外因爲"_config.yml"裏有七牛的密鑰數據,因此整個blog文件扔到git上也是不可取的。我的建議仍是打個包直接另外一臺電腦解壓吧(通常來講拷貝source文件夾,theme文件夾,靜態資源文件夾以及站點配置文件便可)。~~
上面刪除線內的是我對備份的最初想法,而後實際使用後發現有至少兩個缺點:
麻煩,每次另外一臺電腦上都要從百度雲下載更新文件夾手動覆蓋
hexo s
開啓本地服務器狀態的時候,會對文件夾進行監視,動態編譯生成的文件,而百度雲的自動備份會在你每次保存文件的時候都生成一個.cfg文件,致使hexo編譯失敗,而後就會中止本地服務器解析,又要手動開啓一次(寫文章的時候隨時順手CTRL+S是個好習慣)
以上兩個緣由致使了"百度雲備份"這個方案被否決,因此最終仍是回到了git備份的路子。因爲blog全站備份,因此建議放私有倉庫,另外根目錄下_config.yml
儘可能不要放上去(有些插件好比我如今在用的"hexo-qiniu-sync"就有七牛的key,因此不建議同步到git上)
這裏寫起來篇幅可能比較長,因此我另外寫了一篇文章單獨來說同步:
hexo博客多PC間同步解決方案
能夠參考。
須要注意的事,無論這臺電腦上以前有沒有安裝過hexo,安裝完成後都是不須要hexo init
的——這個操做會把config初始化。。
直接在複製過來的blog文件裏運行hexo的命令便可。不過hexo插件都須要從新安裝下。
衆所周知hexo會把文件夾內的全部md文件解析成html,而github的readme只支持MD格式。(因此想在這裏直接插html繞過限制的就只能說殘念了)
網上以前不少方法,不過都沒有說到點子上,由於即便把README.MD文件放到source或者theme對應的source文件夾下,再加上layout:false
,hexo仍是會把文件解析掉。
另外有一種不怎麼優雅的解決方法是把'README.MD'的後綴去掉,改爲'README'
,不過這樣的話github只能支持部分解析,不會當作一個完整的MD文件來處理,樣式上和期待值有差異
正確的解決方法其實很簡單:
**把'README.MD'文件的後綴名改爲"MDOWN"而後扔到blog/source文件夾下便可,這樣hexo不會解析,github也會將其做爲MD文件解析
效果可參考我這個github的主頁
建議對應代碼塊語法選擇相應的註釋符號。好比html
用<!-- -->
,css
用/* */
,不然可能會出現代碼不高亮或者高亮有問題的狀況。
table
的語法MD寫法:
| 連接 | 結果 | 緣由 | |:-----|:---:|----------:| |文本內容| **`是`** |同協議同域名同端口| |文本內容| **`是`** |同協議同域名同端口| |文本內容| **`是`** |同協議同域名同端口|
最上面一行是表格第一列的值。第二行的冒號位置決定表格內文本的對齊方式。有
水平居中
、水平靠左對齊
、水平靠右對齊
三種.切記表格要與上面的文本內容空一行。不然解析不出來
每列的寬度是根據對應列裏最長的文原本決定的
輸出結果:
連接 | 結果 | 緣由 |
---|---|---|
文本內容 | 是 |
同協議同域名同端口 |
文本內容 | 是 |
同協議同域名同端口 |
文本內容 | 是 |
同協議同域名同端口 |
以上是以前我以前部署的時候有遇到過的一些問題,後面會視狀況再不定時更新下。但願對看到這篇文章的人有所幫助