<var id="xpn71"></var>
<ins id="xpn71"></ins>
<cite id="xpn71"><noframes id="xpn71">
<ins id="xpn71"></ins>
<cite id="xpn71"></cite><del id="xpn71"></del> <var id="xpn71"><dl id="xpn71"></dl></var>
<ins id="xpn71"><span id="xpn71"><listing id="xpn71"></listing></span></ins>
<cite id="xpn71"><dl id="xpn71"></dl></cite><ins id="xpn71"></ins>
<thead id="xpn71"><dl id="xpn71"><progress id="xpn71"></progress></dl></thead>
<var id="xpn71"><dl id="xpn71"><listing id="xpn71"></listing></dl></var>
<listing id="xpn71"></listing>
<var id="xpn71"></var><cite id="xpn71"><dl id="xpn71"></dl></cite> <cite id="xpn71"><dl id="xpn71"></dl></cite><menuitem id="xpn71"><dl id="xpn71"><listing id="xpn71"></listing></dl></menuitem>
<progress id="xpn71"><ruby id="xpn71"><span id="xpn71"></span></ruby></progress>
<ins id="xpn71"></ins>
<cite id="xpn71"></cite>
<thead id="xpn71"></thead>
<cite id="xpn71"><video id="xpn71"><thead id="xpn71"></thead></video></cite>
<cite id="xpn71"></cite>
<ins id="xpn71"><dl id="xpn71"></dl></ins>
<thead id="xpn71"><dl id="xpn71"><address id="xpn71"></address></dl></thead>
<thead id="xpn71"></thead><cite id="xpn71"></cite>
<thead id="xpn71"></thead>
<cite id="xpn71"><dl id="xpn71"></dl></cite>
<ins id="xpn71"></ins><address id="xpn71"><i id="xpn71"><th id="xpn71"></th></i></address>

Hexo建站從入門到精通-Hexo博客本地環境配置,初始化,寫作與部署

免費建站   2016年08月14日 17:39  

Hexo建站從入門到精通-Hexo博客本地環境配置,初始化,寫作與部署

Hexo是一個基于node.js的靜態博客生成系統,它使用markdown語法來寫作,同時支持豐富的自定義標簽系統。用戶在本地安裝Hexo系統并進行寫作,通過一條命令,Hexo可以自動生成靜態頁面,并發布到多個平臺上。與傳統的博客相比,Hexo可以說是一個本地運行遠程發布的博客程序。

Hexo最終生成的是一個靜態博客,這就意味著它擁有其他博客系統無法比擬的低負載與高速度的特性。同時,Hexo支持豐富的第三方服務,包括統計、評論、搜索等,使得它的功能相對于動態博客系統并不是多么遜色。最后,Hexo使用簡潔的YAML標準來建立配置文件。

Hexo通過修改配置文件可以方便快捷地修改站點的多個選項,例如為主題導航欄添加項目,只需要簡單的在配置文件中增加一行即可。實際上,經過一定的修改和折騰,你完全可以將Hexo打造一個類似于Wordpress的博客網站,而且由于頁面完全靜態,服務器承受能力更強,適合性更強,讓你專心寫作。

本篇文章就讓我們跟隨n4l.pw博主在你的OS X、Windows與Linux輕松建立一個Hexo博客。更多的關于建站程序,可以看看:

Hexo從入門到精通-Hexo博客本地環境配置,初始化,寫作與部署

Hexo建站須知之Hexo基礎知識。要建立Hexo博客系統,你需要的相關知識如下:

  • 1、Linux操作系統
  • 2、Git版本控制系統
  • 3、nginx web server
  • 4、(可選)理解和使用HTTPS/TLS協議。
  • 5、(至少)了解HTML/JavaScript/CSS
  • 6、了解Markdown語法和YAML語法
  • 7、(Windows)了解安裝node.js和Git的方法,會配置環境變量
  • 8、(OS X/Linux)熟悉自己系統的包管理工具
  • 9、有自己進行研究解決問題的能力,英語閱讀能力(必須!)

一、Hexo入門:本地安裝Hexo

1、OS X安裝Hexo

執行以下命令安裝node.js(注意:本文代碼中所有S*SH進行了特殊化表示,請去掉中間的*號):

1
brew install node

如果提示:bash: brew command not found ,強力安利一發OS X下最強大的命令行包管理工具Homebrew,官網在這里(有中文版):http://brew.sh/index_zh-cn.html。

通過這個工具可以快速安裝一系列Linux下的軟件包。例如安裝python,只需要:

1
brew install python3

執行以下命令可以快速安裝homebrew:(需要Xcode Command Line Tools)

1
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

測試一下node.js是否安裝成功:node -v 。如果看到有顯示版本號就表示成功了。

然后執行以下命令安裝git

1
brew install git

執行:git --version,查看Git是否安裝成功。如果brew顯示安裝成功,但無法運行上述命令。

Hexo查看Git是否成功

請將/usr/local/bin目錄加入系統PATH變量中。bash(默認)用戶編輯~/.bashrc文件,zsh用戶編輯~/.zshrc文件,找到export PATH行,并在變量值中加入/usr/local/bin項目。如下圖所示(并重啟終端)。

Hexo加入系統變量

執行以下命令即可安裝Hexo:

1
npm install -g hexo-cli

PS:目前npm官方源在國內訪問并不穩定,如果你無法直接安裝,請更換國內npm源或掛上DL。執行以下命令更換淘寶npm源:

1
npm config set registry https://registry.npm.taobao.org

測試是否安裝成功:hexo version.如下圖所示:

Hexo查看版本是否成功

2、Linux安裝Hexo

Hexo文檔中只有Debian系以及RHEL系的安裝方法,其他發行版請參考自己的包管理器用法。執行以下命令用nvm(node version manager)安裝node.js:

1
wget -qO- https://raw.github.com/creationix/nvm/master/install.sh | sh

安裝完成后執行:nvm install stable。即可安裝node.js,測試方法同上。執行以下命令安裝Git:

1
2
sudo apt-get install git-core#debian/ubuntu
sudo yum install git-core#RHEL/centos

執行以下命令即可安裝Hexo:

1
npm install -g hexo-cli

PS:目前npm官方源在國內訪問并不穩定,如果你無法直接安裝,請更換國內npm源或掛上DL。執行以下命令更換淘寶npm源:

1
npm config set registry https://registry.npm.taobao.org

測試是否安裝成功:hexo version。如下圖所示:

Hexo是否成功安裝

3、Windows系統安裝Hexo

你需要到node.js官方網站下載安裝包。點擊這里直達:https://nodejs.org/zh-cn/download/。安裝沒什么好說的,注意到下圖這一步時,勾選npm package manager以及Add to PATH選項。

Hexo安裝軟件

到這里:https://git-for-windows.github.io/,可以下載Git for windows。這個套件不僅僅在windows上安裝了Git版本控制系統,最重要的是這個套件提供了Git Bash,一個可以在windows上運行的Linux風格shell,除非你夠硬核,能忍受win的cmd,否則通過Git Bash使用hexo無疑是最佳選擇。

下圖的選項建議勾選,視覺效果有明顯提升。其余選項保持默認即可。

Hexo勾選協議

運行Git Bash,之后請參考Linux安裝Hexo的命令,即可完成Hexo的安裝。附圖一張:(Git Bash中粘貼請右鍵Paste)

Hexo完成安裝

二、Hexo進階:初步了解Hexo

1、Hexo的文件夾結構

在初始化一個hexo站點文件夾之后(詳見下一節),該文件夾的目錄結構如下:

Hexo目錄結構

詳細說明如下:

  • 1、_config.yml是YAML格式文件,也是Hexo的站點配置文件(敲黑板!重點重點!)
    2、node_modules包含使用Hexo需要的其他node.js模塊,以后安裝的hexo相關模塊也放在這里
    3、package.json配置hexo運行需要的node.js包,不用手動更改(PS:通常不需要干預它,不過其中有一條"name": "hexo-site"起著告訴hexo該文件夾是hexo站點的作用,因此更加不要修改該文件內容,安裝hexo其他模塊也依賴該文件)
    4、scaffolds是模板文件夾,不過這里的“模板”概念沒有那么高端。這個“模板”就是指新建的markdown文件的模板,每新建一個markdown文件(由于Hexo使用markdown語法,在渲染生成靜態HTML頁面之前,源文件都是markdown文件),就會包含對應模板的內容。
    該文件夾內有三個模板:draft.md,草稿的模板page.md,頁面的模板post.md,文章的模板
    5、source是源文件文件夾,此處存有渲染生成靜態頁面需要的所有源文件,包括markdown文件、圖片文件。默認此文件夾下只有一個_post文件夾,存放文章的markdown源文件。每個頁面有一個以該頁面命名的文件夾,也存放在source文件夾下。該文件夾下除了_post外,所有以下劃線開頭的或以.開頭的文件夾都會被忽略。
    6、themes是主題文件夾,Hexo的主題作用與WordPress相同。
    7、public文件夾,默認沒有,存放生成的靜態文件。

2、Hexo命令使用

PS:<參數>為必填參數,[參數]為可選參數。以下命令全部需要在hexo站點文件夾下運行。

1
2
hexo init <folder>
</folder>

此命令用于執行站點的初始化。執行后,folder文件夾會成為一個Hexo站點文件夾,執行過程中涉及安裝多個nodejs模塊包以及git clone操作,因此最好掛上DL。

1
hexo new [layout]

新建一個markdown文件。[layout]是該文件的類型,取值有post、draft和page三種,分別對應新建文章、草稿、頁面。在運行該命令時,會調用scaffolds下的對應模板。

1
hexo clean

清理Hexo緩存。該操作會強制Hexo清空已生成的全部靜態文件以及Hexo自身的數據庫,有時候相當有效(更換主題后建議運行)。

1
hexo generate

生成靜態頁面。在生成時可以加上-d或--deploy參數在生成后立即部署。生成的靜態文件在public文件夾下,沒有則會自動建立。

1
hexo deploy

部署站點。也就是將public目錄下生成的靜態文件上傳到某個特定的位置,Hexo支持多種部署方式,下文詳解。部署時可以加上-g或--generate參數,在部署前先生成一遍靜態文件。

1
hexo publish

發布某篇草稿(即將該markdown文件轉移到_post文件夾下)

1
hexo server

在本地http://localhost:4000啟動一個hexo服務器,可以用來預覽hexo站點的效果。

PS:這里只介紹了Hexo的常用命令,詳細命令請參考中文文檔:https://hexo.io/zh-cn/docs/commands.html

Hexo官方文檔

3、Hexo markdown文件的結構

每個由Hexo建立的markdown文件包含如下兩部分:

Frone-matter:類似于HTML中的元信息,HTTP包中的頭部等等。它也使用YAML格式,定義了一系列Hexo程序需要使用的變量。例如我撰寫這篇文章時的Front-matter內容如下圖所示:

Hexo文件包含部分

正文:使用普通的markdown語法,這是你的文章或頁面的內容。

4、YAML基本語法

YAML基本組件。YAML的基本組件都有區塊(即所謂的代碼塊)和行內(即寫在一行)兩種形式。

1.清單:如字面意思所言,“清單”所表示的就是一系列有序的值。類似于數組。清單的區塊表達方式類似如下:

這就是一系列的簡單字符串。

1
2
3
4
5
6
1
2
3
--- 
- v1
- v2

而其行內表示形式如下:[v1,v2]。其表達方式十分類似于Python的列表。

2.雜湊表:雜湊表是一系列key: value對,它有點像其他語言中的“字典”。由于它的特性,Hexo配置文件使用的主要是雜湊表形式。雜湊表的區塊方式如下:

1
2
3
4
1
2
name: John Smith
age: 33

而其行內表達形式與Python字典幾乎相同:{name: John Smith, age: 33}。需要注意的是,雜湊表的key和value均允許任意的空格,不需要用引號將它們括起來。

注意事項:1.雜湊表的key:后必須有一個空格; 2.一個清單的一個元素可以是一個雜湊表,一個雜湊表的一個元素可以是一個清單,清單和雜湊表可以自身嵌套。嵌套時請注意縮進。

掌握這兩項基本元件編寫Hexo配置文件已經夠用,需要了解更多語法請參考百科上的YAML:https://zh.wikipedia.org/wiki/YAML

Hexo掌握Yaml寫法

三、Hexo精通一:Hexo建站初始化、配置、更換主題、寫作、預覽

3.1 初始化

首先建立一個文件夾:mkdir hexo_blog。執行hexo命令初始化文件夾:hexo init hexo_blog。你可以選擇你喜歡的文件夾名稱。注意,該步驟最好掛DL。

基本配置

PS:有關部署配置在部署一節中講解。

用你喜歡的文本編輯器打開站點文件夾下的_config.yml文件,我用的是Sublime Text 3。本節內容以Hexo官方文檔中的有關內容為主,想了解更多的話強烈建議閱讀官方文檔(純中文!毫無障礙,有疑問可以到文章下方留言)

用一個對代碼支持友好的文本編輯器打開文件后,可以看到標準的YAML文件內容,如下圖所示,涉及到的語法我在圖中有所提示:(點擊放大)

Hexo語法內容

再次提醒,嵌套元件請注意縮進!注意空格!(敲黑板!重點!)對一個新站點來說,需要編輯的項目有:

1
2
3
4
5
6
7
8
9
10
11
12
title: Hexo #站點的標題
subtitle: #站點的副標題
description: #站點的描述,寫一段話來介紹你的博客吧:),主要為SEO使用
author: John Doe #顯示的文章作者名字,例如我配置的是fourstring
language: #語言。簡體中文是zh-Hans
timezone: #時區,可以不配置,默認以本地時區為準
url: http://yoursite.com #你的站點地址,如果是全站HTTPS記得寫成https://domain.com
root: / #如果您的網站存放在子目錄中,例如 http://yoursite.com/blog,則請將您的 url 設為 http://yoursite.com/blog 并把 root 設為 /blog/。(引用自官方文檔)
permalink: :year/:month/:day/:title/ #固定鏈接格式。這項配置的格式為:變量1/變量2/變量3...,其中合法的變量格式為“:變量名”(注意,:是變量的組成部分!)這樣生成的效果為/2016/08/10/文章標題。默認的固定鏈接格式存在一些問題,下文講解
per_page: 10 #設置每頁文章篇數,設為0可以關閉分頁功能
theme: #使用的主題。下文講解
deploy: #部署配置,其值是一個雜湊表,注意縮進,下文詳細講解

如果你想了解更多自定義配置項(就個人安裝體驗來說,其實很多選項保持默認即可),請看上面的官方文檔鏈接。

3.2 更換主題

PS:下文以home代指Hexo根目錄

Hexo的主題存儲在home/themes目錄下(我使用unix的文件路徑表示法,Git Bash可以兼容這種表示法)。我們只要將喜歡的主題下載到這個目錄下,解壓為文件夾,然后將_config.yml中的theme:配置項改為對應主題文件夾名稱即可。

這里特別提醒,主題自身也有一個_config.yml配置文件,配置主題本身需要的一系列選項。語境中通常稱為主題配置文件,請勿與站點配置文件混淆。

另外,強力推薦n4l.pw使用的Hexo主題:Next,功能極其強大,是目前github上star第一的Hexo主題:https://github.com/iissnan/hexo-theme-next。官方文檔講解非常詳細,鑒于篇幅,這里只提一個小技巧,在文章中加入<!--more-->標簽,主題會自動將標簽之前的內容截取作為文章摘要輸出在首頁。(可見下圖效果,點擊放大)。

Hexo主題效果

順便說一句,Hexo自帶的主題顏值也是很不錯的(秒殺WordPress幾千倍),不妨用用~

3.3 寫作

執行:

1
hexo new post "標題"

可以新建一篇文章。post參數可以省略,_config.yml中的default_layout:設置了默認類型,默認值是post,你可以改成draft來默認存儲為草稿(PS:感覺并沒有什么卵用,草稿也可以存為post,不生成部署即可)

然后用任意你喜歡的編輯器打開home/source/_post/標題.md文件就可以寫作了。(PS:Windows下優雅的markdown編輯器實在是少之又少,OS X下我用的是MWeb,功能非常強大)

下面講解一下寫作中可能碰到的幾個問題:

問題1:自定義鏈接格式太蠢。可能語言不是很嚴謹,不過給我的第一感覺就是這樣。

由于鏈接最后沒有帶上.html后綴名,而且生成文件的MIME類型似乎不太對,導致用默認鏈接格式的話,nginx web server會直接進行文件下載。。。能不能像WordPress那樣,為每篇文章自定義一個簡短的英文名稱作為鏈接呢?

答案是可以的。我們需要用到Hexo的permalinkFront-matter選項。先編輯模板文件home/scaffolds/post.md,在其Front-matter中加入permalink:即可。如下圖所示:

記得在寫一篇新文章時設置一下這個值。

問題2:分類和標簽默認的主題菜單欄是沒有標簽和分類兩個頁面的。而且默認的模板中Front-matter也只有tags選項,沒有分類選項。是不是Hexo沒有這些功能呢?答案是否定的。

PS:這兩個選項的值都是一個清單,注意縮進。編輯模板文件home/scaffolds/post.md,加入categories:然后執行:

1
2
hexo new page categories
hexo new page tags

創建標簽和分類頁面,如果你的主題支持,它們不需要填充任何內容,主題會自動生成這兩個頁面的內容,你只需要將它們加入菜單欄即可。(這并不意味著不用生成這兩個頁面)

默認主題菜單欄修改方法如下:編輯home/themes/landscape/_config.yml文件,在menu:項下加入顯示名稱: 路徑即可,如下圖所示:

問題3:評論功能。這個主要看主題是否支持。例如我使用的next主題,支持多說和disqus兩套系統。特別提醒,由于本身是靜態化的,所以必須依靠第三方服務提供評論功能。如果想讓某篇文章禁用評論功能,next主題需要在Front-matter中加入:

1
comment: false

一般來說頁面都不需要評論功能,可以編輯home/scaffolds/page.md,在Front-matter中加入

1
comment: false

問題4:搜索功能:仍然依靠主題支持。

Hexo搜索功能

3.4  OS X下優雅的寫作方式

(對不起Windows讀者,畢竟win下實在沒有像OS X的MWeb這么優雅的Markdown編輯器,sublime text可以勉強頂上)強烈推薦OS X下的優雅的Markdown編輯器MWeb for OS X。點這里直達MAS下載免費試用版。(試用版功能同樣強大,我正在考慮是否入正)

寫作時最大的一個問題是如何優雅的插入圖片。MWeb提供了高效解決方案。在home/source下新建一個images文件夾,然后打開MWeb,按command+E打開外部模式,然后如圖設置:

Hexo配置軟件

選擇“引入文件夾”。定位到home下,點擊source,并單擊“選擇”按鈕(免費版外部模式只能引入一個文件夾。)如下圖配置:(點擊放大)

Hexo引入文件夾

在寫作時,只要把圖片文件拖入編輯器中,就能自動復制到iamges下并且在文檔中插入markdown圖片鏈接,簡直coooooooooool有木有!而且還支持直接從剪貼板插入圖片,截圖后只需command+V,同樣自動復制到images下并幫你加好markdown標記。

另外,OS X 10.11及以上可以使用Split Views功能來實現優雅的分屏。長按窗口左上角的綠色最大化按鈕,即可啟動,此時該app占據新虛擬桌面的一半,然后點擊另一個桌面上的窗口,即可自動將兩個app在同一桌面中分屏。你也可以啟動mission control后,直接將一個窗口狀態的app拖到任何一個space中,也可自動分屏。

我的寫作界面如下圖所示。(點擊放大)

Hexo寫作預覽

預覽

執行:hexo generate 命令,生成靜態文件。執行:hexo server 命令,本地開啟服務器,然后瀏覽器訪問http://localhost:4000即可看到預覽效果了。

四、Hexo精通二:使用Git和rsync部署Hexo

敲黑板!最后一個重點難點內容,如何將public文件夾下的內容發布到服務器上。可供我們選擇的有方法:

  • 1.Github Pages。這個服務允許github用戶發布靜態頁面,無限空間流量,適合輕度用戶。參考:免費開源Github Pages空間
  • 2.直接復制。理論上可行的方法,畢竟public下的文件到哪里都能直接變成一個可運行的站點。但是這種方法太蠢了,看似可行,其實蘊含著一大堆問題。
  • 3.Git版本控制系統。官方支持的部署方式之一。利用Git版本控制系統的強大功能,通過s*s*h上傳文件。這也是我采用并且下文講解的方法。
  • 4.Heroku。沒有了解過這個方式,參考:Heroku免費云空間512M內存可綁定域名
  • 5.Openshift,著名廠商Red Hat的PaaS服務,功能十分強大。參考:新版OpenShift空間申請使用教程
  • 6.rsync。利用強大的同步工具rsync進行同步,這種同步方式只需要用戶提供一個能訪問bash的Linux用戶,并且服務器上安裝了rsync軟件包,其余一切涉及rsync命令的操作都由hexo自動完成,更加簡單。參考:Rsysnc實現VPS主機文件備份同步
  • 7.FTPsync。直接通過FTP協議進行同步。如果購買了虛擬主機,可以考慮這種方式。然而這個插件寫得也很蠢。第一次使用必須自己手動上傳所有文件,否則會無限報連接被重置錯誤(我就不配圖了,工作量有點大)。

基于上述方式的優缺點,本文將講解如何使用Git和rsync進行服務端部署。

4.1 Git版本控制系統

服務端配置。

PS:從此開始home不再代指Hexo安裝目錄

1.編譯安裝nginx。執行以下命令下載nginx源碼:

1
2
3
cd /usr/local/src
wget http://nginx.org/download/nginx-1.11.3.tar.gz
tar xzf nginx-1.11.3.tar.gz

編譯cloudflare patch過的openssl(如果你不使用HTTPS可以跳過本步驟)

1
2
3
4
5
6
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz
tar xzf openssl-1.0.2g.tar.gz
git clone https://github.com/cloudflare/sslconfig
cd openssl-1.0.2g
patch -p1 < ../sslconfig/patches/openssl__chacha20_poly1305_cf.patch

編譯安裝nginx

1
2
3
4
5
6
7
8
9
apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev #非Debian/Ubuntu系統請參考自己的包管理器
groupadd www
useradd www -g www -s /sbin/nologin
cd /usr/local/src/nginx-1.11.3
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_v2_module --with-openssl=../openssl-1.0.2g
make -j`$(nproc)`
make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
#如果你不需要SSL,請在configure時去掉--with-http_ssl_module與--with-http_v2_module,鑒于ipv6并不普及,我也沒有使用ipv6

執行nginx -V測試是否安裝成功。

2.配置Git倉庫

我習慣把網站目錄放在/home/wwwroot下,因此先建立文件夾:

1
2
mkdir -p /home/wwwroot/hexo.git #Git倉庫,不存儲網站文件
mkdir /home/wwwroot/hexo #實際存儲網站文件目錄

執行:apt-get install git #Debian系系統,其他發行版參考自己的包管理器,安裝Git。執行如下命令,初始化空的Git倉庫:git init --bare /home/wwwroot/hexo.git。然后進入該倉庫,配置post-receivehooks。

鉤子(hooks)是一些在”$GIT-DIR/hooks”目錄的腳本, 在被特定的事件(certain points)觸發后被調用 。當”git init”命令被調用后, 一些非常有用的示例鉤子文件(hooks)被拷到新倉庫的hooks目錄中; 但是在默認情況下這些鉤子(hooks)是不生效的 。

把這些子文件(hooks)的”.sample”文件名后綴去掉就可以使它們生效了。需要關注的是post-receive的鉤子,當push操作完成之后這個鉤子就會被調用:cd /home/wwwroot/hexo.git/hooks。建立post-receive文件,輸入:

1
2
#!/bin/sh
git --work-tree=/home/wwwroot/hexo --git-dir=/home/wwwroot/hexo.git checkout -f

賦予可執行權限:chmod +x post-receive,上述所有命令記得替換成你自己的文件路徑。之后來配置登陸Git需要的用戶。執行:adduser git。要求填寫密碼和一系列信息。完成后自動建立/home/git主目錄以及git用戶組。

先確認一下你的S&S%H服務端配置,因為hexo的Git部署不支持使用密碼登陸,我們需要生成一對密鑰:vim /etc/s*sh/s*shd_config #Debian系系統可用,其他系統參考自己的路徑

檢查這三行是否被注釋以及值是否正確。

1
2
3
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.s*sh/authorized_keys

如果不正確進行修改,重啟s¥s%h:service s*sh restart #服務名不同發行版不同,這是Debian系的名稱。然后生成一對s¥s¥h認證密鑰:(注意把下方的*去掉)

1
2
3
4
5
su git
cd /home/git
mkdir .s*s*h
cd .s*s*h
s*sh-keygen -t rsa

在生成密鑰時,會要求你輸入一個加密密碼,可以不填寫,實現無密碼登陸。生成完成后,.s*s*h目錄下有id_rsa和id_rsa.pub兩個文件,其中.pub文件是公鑰文件,存放于服務器,另一個是私鑰文件,存放于客戶端。兩者都是文本文件,可以直接用cat命令讀取。將id_rsa下載回本地保存好。

之后配置需要用到。將公鑰id_rsa.pub重命名并授予正確的權限:

1
2
3
4
5
cd /home/git/.s*s*h
mv id_rsa.pub authorized_keys
chmod 0600 authorized_keys
chmod 0700 .
rm id_rsa

3.nginx web server配置

首先建立虛擬主機配置文件夾:mkdir /usr/local/nginx/conf/vhost。修改主配置文件:vim /usr/local/nginx/conf/nginx.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
user www;
...
event{
...
use epoll;
}
http{
...
sendfile on;
tcp_nopush on;
tcp_nodelay on;
...
include vhost/*.conf;
...
server{
...
}
...
}
...

修改后文件內容如上,…代表省略內容。然后建立虛擬主機配置文件:

1
2
cd /usr/local/nginx/conf/vhost
touch hexo.conf

一個最基本的Hexo配置如下:

1
2
3
4
5
6
server{
    listen 80;
    server_name domain.com; #與你在_config.yml中的配置相同(不需要帶上協議)
    root /home/wwwroot/hexo; #Hexo文件存儲路徑,非Git倉庫
    index index.html;
}

加入緩存配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server{
    listen 80;
    server_name domain.com; #與你在_config.yml中的配置相同(不需要帶上協議)
    root /home/wwwroot/hexo; #Hexo文件存儲路徑,非Git倉庫
    index index.html;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
}

本站是全站HTTPS,使用Let’s encrypt證書,對HTTPS有大量配置,下面是本站的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
server{
    server_name hexo.n4l.pw;
    listen 80;
    location ^~ /.well-known/acme-challenge/ {
        alias /home/wwwroot/challenges/;
        try_files $uri =404;
    }
    location / {
        rewrite ^/(.*)$ https://hexo.n4l.pw/$1 permanent;
    }
}
server {
    server_name hexo.n4l.pw;
    listen               443 ssl http2 reuseport fastopen=3;
    root /home/wwwroot/staticblog;
    server_tokens        off;
    ssl_certificate      /root/ssl/n4l.pw.chained.pem;
    ssl_certificate_key  /root/ssl/private-ecc.key;
    ssl_certificate      /root/ssl/rsas/n4l.pw.rsa.chained.pem;
    ssl_certificate_key  /root/ssl/rsas/n4l.pw.rsa.key;
    ssl_dhparam          /root/ssl/dhparams.pem;
    ssl_ciphers                EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA
 
+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers  on;
    ssl_ecdh_curve secp384r1;
    ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
    ssl_ct               on;
    ssl_ct_static_scts   /root/ssl/scts;
    ssl_session_cache          shared:SSL:50m;
    ssl_session_timeout        1d;
    ssl_session_tickets        on;
    ssl_stapling               on;
    ssl_stapling_verify        on;
    resolver                   8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout           10s;
    add_header    Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
    add_header    Public-Key-Pins 'pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=";pin-sha256="Fbs+o+IxVNTHBpjNQYfX/TBnxPC+OWLYxQLEtqkrAfM=";max-age=2592000; includeSubDomains';
    index index.html;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
}

保存你的配置文件,執行以下命令建立nginx服務并設置開機啟動:

1
2
3
wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
chmod +x /etc/init.d/nginx
update-rc.d nginx start 20 2 3 4 5

完成之后,執行:service nginx start,即可啟動nginx。

本地配置

1.本地S*S*H配置。本地s*sh命令也依靠一個配置文件。用戶定義配置文件的路徑是~/.s*sh/config(PS:這一路徑對Windows是可用的,如果你使用Git Bash,這就是為什么我強烈推薦Git Bash的原因)。建立文件夾:  

1
2
mkdir ~/.s*sh
touch ~/.s*sh/config

編輯config文件,寫入如下配置:   

1
2
3
4
5
Host hexo #S*S*H主機配置的識別名,配置好后直接"s*s*h 識別名"即可快速連接
HostName xxx #S*S*H主機的地址
Port 22 #S*S*H主機端口
User git #用戶,本例是Git
IdentityFile ~/.s*sh/testkey #私鑰文件的存放地址,建議復制到~/.S*S*H下統一管理

然后執行:  

1
2
chmod 0600 ~/.s*s*h/testkey #換成你自己的私鑰路徑
s*s*h hexo

PS:如果可以正常連接,說明我們的Git服務端已經配置成功。為了安全考慮,git用戶禁止登陸shell,以root用戶登陸服務器,編輯/etc/passwd文件,找到git:x:1002:1002:,,,:/home/git:內容,修改為git:x:1002:1002:,,,:/home/git:/usr/bin/git-shell。git-shell一旦登陸就會自動退出,但又能正常使用Git版本控制功能。(PS:中間的兩個數字是UserID和GroupID,可能有所不同,沒有影響,不要隨意修改)

2.配置部署選項。PS:此節中home代指Hexo站點目錄。執行以下命令安裝hexo git部署模塊:

1
2
cd home
npm install hexo-deployer-git --save

編輯home/_config.yml文件,找到deploy項目,修改如下:

1
2
3
4
deploy:
  type: git #用戶名
  repo: git@hexo:/home/wwwroot/hexo.git #Git倉庫地址,:符號后為Git倉庫服務器路徑
  branch: master #分支,由于我們只用Git進行發布,master即可。

保存,進入home目錄,執行以下命令即可將靜態文件發布到服務端了:

1
2
hexo clean
hexo deploy -g

至此,一切(woc終于結束了)搭建步驟完成,快訪問你的域名看看效果吧~(解析請自行完成)

rsync遠程同步工具

服務端配置

1.安裝rsync服務端。

執行以下命令安裝rsync :

1
2
3
apt-get install rsync #Ubuntu安裝
yum install rsync  #centos安裝
pacman -S rsync  #archlinux安裝

建立服務端的網站文件夾:mkdir -p /home/wwwroot/hexo #我習慣將網站文件存儲在/home/wwwroot下,你可以更改成你自己的喜好

2.配置rsync用戶。執行:adduser hexo,要求填寫密碼和一系列信息。完成后自動建立/home/hexo主目錄以及hexo用戶組。先確認一下你的S*S*H服務端配置,因為hexo的rsync部署也需要連接s*s*h,不支持使用密碼登陸。

我們需要生成一對密鑰:  vim /etc/s*sh/s*shd_config#Debian系系統可用,其他系統參考自己的路徑。檢查這三行是否被注釋以及值是否正確:

1
2
3
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.s*sh/authorized_keys

如果不正確進行修改,重啟s*s*h:service s*sh restart#服務名不同發行版不同,這是Debian系的名稱。然后生成一對s*s*h認證密鑰:   

1
2
3
4
5
su hexo
cd /home/hexo
mkdir .s*s*h
cd .s*s*h
s*sh-keygen -t rsa

在生成密鑰時,會要求你輸入一個加密密碼,可以不填寫,實現無密碼登陸。生成完成后,.s*s*h目錄下有id_rsa和id_rsa.pub兩個文件,其中.pub文件是公鑰文件,存放于服務器,另一個是私鑰文件,存放于客戶端。兩者都是文本文件,可以直接用cat命令讀取。將id_rsa下載回本地保存好。之后配置需要用到。

將公鑰id_rsa.pub重命名并授予正確的權限:

1
2
3
4
5
cd /home/hexo/.s*s*h
mv id_rsa.pub authorized_keys
chmod 0600 authorized_keys
chmod 0700 .
rm id_rsa

3.nginx。執行以下命令下載nginx源碼:

1
2
3
cd /usr/local/src
wget http://nginx.org/download/nginx-1.11.3.tar.gz
tar xzf nginx-1.11.3.tar.gz

編譯cloudflare patch過的openssl(如果你不使用HTTPS可以跳過本步驟) 

1
2
3
4
5
6
cd /usr/local/src
wget https://www.openssl.org/source/openssl-1.0.2g.tar.gz
tar xzf openssl-1.0.2g.tar.gz
git clone https://github.com/cloudflare/sslconfig
cd openssl-1.0.2g
patch -p1 < ../sslconfig/patches/openssl__chacha20_poly1305_cf.patch

編譯安裝nginx:

1
2
3
4
5
6
7
8
9
apt-get install libpcre3 libpcre3-dev zlib1g zlib1g-dev #非Debian/Ubuntu系統請參考自己的包管理器
groupadd www
useradd www -g www -s /sbin/nologin
cd /usr/local/src/nginx-1.11.3
./configure --user=www --group=www --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-http_v2_module --with-openssl=../openssl-1.0.2g
make -j`$(nproc)`
make install
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx
#如果你不需要SSL,請在configure時去掉--with-http_ssl_module與--with-http_v2_module,鑒于ipv6并不普及,我也沒有使用ipv6

執行nginx -V測試是否安裝成功,之后進行nginx配置。首先建立虛擬主機配置文件夾:mkdir /usr/local/nginx/conf/vhost。修改主配置文件:vim /usr/local/nginx/conf/nginx.conf:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
user www;
...
event{
...
use epoll;
}
http{
...
sendfile on;
tcp_nopush on;
tcp_nodelay on;
...
include vhost/*.conf;
...
server{
...
}
...
}
...

修改后文件內容如上,…代表省略內容。然后建立虛擬主機配置文件:

1
2
cd /usr/local/nginx/conf/vhost
touch hexo.conf

一個最基本的Hexo配置如下:

1
2
3
4
5
6
server{
    listen 80;
    server_name domain.com; #與你在_config.yml中的配置相同(不需要帶上協議)
    root /home/wwwroot/hexo; #Hexo文件存儲路徑,非Git倉庫
    index index.html;
}

加入緩存配置:  

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server{
    listen 80;
    server_name domain.com; #與你在_config.yml中的配置相同(不需要帶上協議)
    root /home/wwwroot/hexo; #Hexo文件存儲路徑,非Git倉庫
    index index.html;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
}

本站是全站HTTPS,使用Let’s encrypt證書,對HTTPS有大量配置,下面是本站的配置文件: 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
server{
    server_name hexo.n4l.pw;
    listen 80;
    location ^~ /.well-known/acme-challenge/ {
        alias /home/wwwroot/challenges/;
        try_files $uri =404;
    }
    location / {
        rewrite ^/(.*)$ https://hexo.n4l.pw/$1 permanent;
    }
}
server {
    server_name hexo.n4l.pw;
    listen               443 ssl http2 reuseport fastopen=3;
    root /home/wwwroot/staticblog;
    server_tokens        off;
    ssl_certificate      /root/ssl/n4l.pw.chained.pem;
    ssl_certificate_key  /root/ssl/private-ecc.key;
    ssl_certificate      /root/ssl/rsas/n4l.pw.rsa.chained.pem;
    ssl_certificate_key  /root/ssl/rsas/n4l.pw.rsa.key;
    ssl_dhparam          /root/ssl/dhparams.pem;
    ssl_ciphers                EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers  on;
    ssl_ecdh_curve secp384r1;
    ssl_protocols              TLSv1 TLSv1.1 TLSv1.2;
    ssl_ct               on;
    ssl_ct_static_scts   /root/ssl/scts;
    ssl_session_cache          shared:SSL:50m;
    ssl_session_timeout        1d;
    ssl_session_tickets        on;
    ssl_stapling               on;
    ssl_stapling_verify        on;
    resolver                   8.8.8.8 8.8.4.4 valid=300s;
    resolver_timeout           10s;
    add_header    Strict-Transport-Security 'max-age=31536000; includeSubDomains; preload';
    add_header    Public-Key-Pins 'pin-sha256="YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihg=";pin-sha256="Fbs+o+IxVNTHBpjNQYfX/TBnxPC+OWLYxQLEtqkrAfM=";max-age=2592000; includeSubDomains';
    index index.html;
    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
    expires 30d;
    access_log off;
    }
location ~ .*\.(js|css)?$ {
    expires 7d;
    access_log off;
    }
}

保存你的配置文件,執行以下命令建立nginx服務并設置開機啟動:

1
2
3
wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
chmod +x /etc/init.d/nginx
update-rc.d nginx start 20 2 3 4 5

完成之后,執行:service nginx start,即可啟動nginx。

本地配置

1.本地S*S*H配置。

本地s*s*h命令也依靠一個配置文件。用戶定義配置文件的路徑是~/.s*sh/config(PS:這一路徑對Windows是可用的,如果你使用Git Bash,這就是為什么我強烈推薦Git Bash的原因)。建立文件夾:

1
2
mkdir ~/.s*sh
touch ~/.s*sh/config

編輯config文件,寫入如下配置:

1
2
3
4
5
Host hexo #S*S*H主機配置的識別名,配置好后直接"S*S*H 識別名"即可快速連接
HostName xxx #S*S*H主機的地址
Port 22 #S*S*H主機端口
User hexo #用戶,本例是hexo
IdentityFile ~/.s*s*h/testkey #私鑰文件的存放地址,建議復制到~/.s*s*h下統一管理

然后執行以下命令,如果連接成功就說明用戶配置成功了。注意,這種方式需要用戶具有訪問bash的權限,因此請注意自己服務器的權限控制:

1
2
chmod 0600 ~/.s*sh/testkey #換成你自己的私鑰路徑
s*sh hexo

2.配置部署選項。

執行以下命令安裝hexo rsync部署模塊 :

1
2
3
cd home
npm install hexo-deployer-rsync --save #OS X和Linux用戶執行
npm install hexojs/hexo-deployer-rsync --save #Windows用戶執行,npm上的該模塊在windows下有bug

PS:此節中home代指Hexo站點目錄。編輯home/_config.yml文件,找到deploy項目,修改如下:

1
2
3
4
5
6
7
8
9
deploy:
  type: rsync 
  host: hexo #在~/.s*sh/config中配置的host名稱
  user: hexo #登陸用戶名
  root: /home/wwwroot/hexo #網站文件夾
  port: 873 #登陸后在服務器上開啟rsync的端口,如果你的VPS有防火墻,需要開放該端口
  delete: true #是否刪除舊文件,可選true或false
  verbose: false #是否輸出調試信息,如果不能部署成功可以開啟看原因
  ignore_errors: true #是否忽略錯誤,可選true或false

以root登陸VPS,執行以下命令來開放_config.yml中配置的rsync端口,如果沒有iptables可以跳過這一步:

1
iptables -I INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT #記得換成你自己的端口

保存,進入home目錄,執行以下命令即可將靜態文件發布到服務端了。

1
2
hexo clean
hexo deploy -g

至此,一切(woc終于結束了)搭建步驟完成,快訪問你的域名看看效果吧~(解析請自行完成)

五、TroubleShooting

如果各位在閱讀本文過程中有任何不理解的問題,或者任何步驟出錯,解決方法如下:

  • 1、再仔細看一遍本文,是否有遺漏步驟。
  • 2、由于系統環境不同,你的系統可能與我有很大差別,請Googto搜索你的錯誤信息。
  • 3、若上述方法無果,或你發現本文有任何錯誤,歡迎在評論區留言指出,對于有意義的問題,我會摘錄在這一節中。
  • 4、如果您發現本文引用或涉及了您的有關文章,請在下方留言,我會盡快加入參考中。

由@咖啡費德克士 提出的問題:我的博客中既有http又有https,然后瀏覽器就給攔截了部分js,有什么解決方法嗎?

出于安全策略,瀏覽器默認不會加載HTTPS網頁中的HTTP腳本文件。如果網站有HTTP和HTTPS版本,建議先對自己網站的訪客做一個統計,看一下他們的軟件版本。如果兼容性不是太大的問題,建議切換到全站HTTPS,禁用HTTP。

如果是引用了一些公共庫,比如jQuery之類,建議直接谷歌搜索:公共庫名+HTTPS+CDN,即可找到對應公共庫支持HTTPS的CDN。PS:目前主流瀏覽器支持自適應協議棧,即寫鏈接時省略協議棧,寫成//domian.com,瀏覽器會根據當前頁面的協議自動選擇HTTP/HTTPS

另外,也可以使用一些簡單粗暴的辦法。比如直接將HTTP資源下載到本地,然后引用本地的鏈接。如果是多說評論頭像之類,可以嘗試反¥代評論頭像。

文章出自:N4l.pw   由部落編輯整理,版權歸原作者所有。本站文章除注明出處外,皆為作者原創文章,可自由引用,但請注明來源。

您或許對下面這些文章有興趣:                    本月吐槽辛苦排行榜

在這個部落村莊里,已經有89 位神馬家族成員冒出泡來在農場開始干活了
  • 伊犁的秋天 3

    哈哈,沙發~

    SaFly 回復:

    @伊犁的秋天, 占位留名

    這是農場的第 1 塊農田,部落批準 [伊犁的秋天] 在[2016-8-14 18:00]開墾完成.
  • SaFly 7

    支持

    這是農場的第 2 塊農田,部落批準 [SaFly] 在[2016-8-14 18:24]開墾完成.
  • ehy

    文章好長呀。

    這是農場的第 3 塊農田,部落批準 [ehy] 在[2016-8-14 19:02]開墾完成.
  • 小毛 2

    這么長。估計搞到最后。都忘了自己最初的目的只是為了搞個博客了吧。。。

    四弦 回復:

    @小毛, 作為本文的作者,我覺得我要說明一下。
    請問層主覺得本文有任何與博客無關的地方?在文章中我也說得非常明白,Hexo是我見過的最難搭建的博客系統。但是搭建難度和搭建的目的是無關的。本文從本地安裝到服務端配置應有盡有,包含大量我安裝過程中的經驗,我之所以將它們全部覆蓋的原因就是盡可能的減小Hexo上手的難度,聚焦Hexo本身作為博客程序的目的。

    小毛 回復:

    @四弦, 原來你是作者啊。我還以為是博主的的。(開頭沒仔細看,不好意思)。文章寫的很詳細也很好,并無惡意,對于想裝HEXO的網友,你這篇文章無疑是最好的。我本來想調侃博主的,把你炸了出來。

    qi 回復:

    @小毛, 轉載n4l.pw博主的,我編輯文章都發了兩個晚上,博主寫這個文章花了一天,實在是敬佩,這樣的專注精神現在很少有博主這樣了。技術類的教程正好可以分享給更多人使用。

    qi 回復:

    @四弦, 博主,我編輯文章有沒有錯誤?我的文章目錄沒有你的豐富,感覺讀起來會吃力一些。

    AirScript 回復:

    @四弦, 感覺在 mac 上結合 git 還是挺好搭建的~

    四弦 回復:

    @AirScript, 其實最好搭建的是rsync

    這是農場的第 4 塊農田,部落批準 [小毛] 在[2016-8-14 21:13]開墾完成.
  • YYBlog 7

    高端,不會玩

    這是農場的第 5 塊農田,部落批準 [YYBlog] 在[2016-8-14 21:16]開墾完成.
  • 和ghost比呢

    qi 回復:

    @吳尼瑪, 本質上有區別,Hexo可以說已經脫離了Web服務器運行了,只是生成的靜態Html放在服務器上。Ghost是另一個動態博客程序。

    這是農場的第 6 塊農田,部落批準 [吳尼瑪] 在[2016-8-14 23:24]開墾完成.
  • 薦洋機部落 2

    所有的建站我是不推薦用windows操作系統的,windows不穩定、不安全等詬病太多了,還是建議linux系列。薦洋機部落https://vps1.vip/發布

    四弦 回復:

    @薦洋機部落, 呵呵。Linux系列真的沒有你口中windows“不安全”的特點?建站使用Linux是因為Linux和windows的定位根本不同,linux從一開始定位就是web端多用戶,因此Linux下使用多種有關軟件更為方便。但是Linux真的安全嗎?如果不是對Linux有深入了解,小白使用root操作Linux的風險何止是windows的數倍。再次強調,我所主張的不是建站不應該使用linux,而是反對層主一味認為windows不安全不穩定的說法。

    qi 回復:

    @四弦, Windows不安全的流行說法,應該是Windows的用戶多的原因造成的。就和Wordpress一樣,用戶多,漏洞發現也不少,引起的影響也大。但是那些用戶少的,反而關注少了,所以有了漏洞也不一定被廣泛提起。

    這是農場的第 7 塊農田,部落批準 [薦洋機部落] 在[2016-8-15 00:26]開墾完成.
  • Kung 23

    從精通導入門。。。

    qi 回復:

    @Kung, 博主可以玩一玩,Heroku都被你玩得這么熟了。

    這是農場的第 8 塊農田,部落批準 [Kung] 在[2016-8-15 09:07]開墾完成.
  • BanYuner 4

    太復雜 我完全無力堅持

    qi 回復:

    @BanYuner, 可以試試,Hexo很不錯的。

    這是農場的第 9 塊農田,部落批準 [BanYuner] 在[2016-8-15 10:10]開墾完成.
  • 這篇文章挺詳細的。

    這是農場的第 10 塊農田,部落批準 [胖哥] 在[2016-8-15 10:51]開墾完成.
  • 額,,,還是用wp等程序建博客吧!

    qi 回復:

    @黃良缽博客, WordPress適合大多數人和大部分建站需要。

    這是農場的第 11 塊農田,部落批準 [黃良缽博客] 在[2016-8-15 14:23]開墾完成.
  • 每次回復都顯示please enter a valid email address !但就是可以回復成功,也可以接受回復郵件 :mrgreen:

    qi 回復:

    @黃良缽博客, 奇怪,一直是這樣嗎?清除了瀏覽器緩存了沒?

    黃良缽博客 回復:

    @qi, 應該是我的郵箱地址讓你的程序識別不了,但可以正常使用。

    qi 回復:

    @黃良缽博客, 看到你使用的中文郵箱,WP應該不認了。

    黃良缽博客 回復:

    @qi, 但可以正常使用就可以了,這郵箱地址能防采集工具的識別嗎?好像也沒收到什么垃圾郵件

    qi 回復:

    @黃良缽博客, 應該可以,現在的采集郵箱工具都是針對字母和數字的,加上中文的用的人少,所以收到的垃圾郵件就更少了。

    這是農場的第 12 塊農田,部落批準 [黃良缽博客] 在[2016-8-15 14:25]開墾完成.
  • 很詳細了~~再加上dropbox+vps全自動推送就更好了

    qi 回復:

    @可可豆, 后續會補上。

    可可豆 回復:

    @qi, 配上c9.io這類在線IDE,nodejs之流直接就陪好了

    qi 回復:

    @可可豆, 確實,整合后就更方便了。

    這是農場的第 13 塊農田,部落批準 [可可豆] 在[2016-8-15 17:05]開墾完成.
  • RR233CY 18

    這種寫博客的方式,讓人蛋疼

    qi 回復:

    @RR233CY, 玩熟的話,其實優勢非常大,最大的方便就是你不需要配置Web環境了,只要一個靜態空間就可以了,搬家等都是非常方便了,甚至還可以存放在七牛等CDN服務器上。

    煙花易冷 回復:

    @qi, 這樣的寫作方式有點麻煩。

    這是農場的第 14 塊農田,部落批準 [RR233CY] 在[2016-8-15 17:30]開墾完成.
  • 亡月帝 7

    再寫這么好的文章見一次頂一次…… :smile:

    四弦 回復:

    @亡月帝, 謝謝~

    這是農場的第 15 塊農田,部落批準 [亡月帝] 在[2016-8-16 07:45]開墾完成.
  • 在配置文件里直接把ct配置寫上恐有誤導嫌疑,不是每個人都會配上nginx-ct模塊。
    寫鏈接時省略協議棧,寫成//domian.com這種,不只是主流瀏覽器,古老到連ie6都支持……
    最后,此類博客配置繁雜,還不如直接用更加方便的成熟cms

    四弦 回復:

    @王琪亮, 因為如果把nginx配置文件的語法內容也講一下就太麻煩了。我放我的配置文件只是一個參考而已,我去補上一個僅供參考吧。另外省略協議棧我一直以為是現代瀏覽器的做法- –

    qi 回復:

    @王琪亮, 配置的話確實有些麻煩,但是一次配置好以后換空間就方便了。

    這是農場的第 16 塊農田,部落批準 [王琪亮] 在[2016-8-16 10:52]開墾完成.
  • ITYOY 1

    昨天驚奇的發現 ,qi姐居然搞上了手機版主題~~~~~

    qi 回復:

    @ITYOY, 哈哈,好早以前就有了,我寫了一篇分享WP手機主題的文章:http://www.abzo.tw/wordpress-wptouch/

    這是農場的第 17 塊農田,部落批準 [ITYOY] 在[2016-8-16 15:14]開墾完成.
  • Hexo從入門到放棄。

    煙花易冷 回復:

    @初行博客, 可以可以,這我很贊同

    這是農場的第 18 塊農田,部落批準 [初行博客] 在[2016-8-16 17:14]開墾完成.
  • 淡忘 2

    原作者這貨難道就是起哈群里的四弦?

    四弦 回復:

    @淡忘, 是的

    淡忘 回復:

    @四弦, 果然是你,又換域名。、

    四弦 回復:

    @淡忘, 之前手賤在iisp注冊的域名,坑死

    這是農場的第 19 塊農田,部落批準 [淡忘] 在[2016-8-17 07:35]開墾完成.
  • 寫了這么多年博客了,看了那么多年部落,部落現在都是以技術文為主了,Hexo確實不錯,原本打算幫他做個好看的主題,不過后來半路出家轉向國內的xiuno了

    qi 回復:

    @煙花易冷, DZ感覺已經不受歡迎了,xiuno這類的BBS貌似是現在一種趨勢了。

    這是農場的第 20 塊農田,部落批準 [煙花易冷] 在[2016-8-17 12:28]開墾完成.
  • MG 7

    玩過這個,就是個靜態頁面生成器,換臺電腦就不能寫東西了。
    我還不會GIT的使用,用著感覺不爽

    qi 回復:

    @MG, 嗯,換了電腦就不行了,但是現在網上也有一些在線的靜態博客寫作平臺,支持hexo。

    這是農場的第 21 塊農田,部落批準 [MG] 在[2016-8-17 17:29]開墾完成.
  • zzw 2

    部落你好,我追了你網站差不多5年了,也算是老粉絲了吧…以前一直用免費空間,現在終于有資本了就注冊了一間公司,和幾個同學,開始創業做科技的生意,主要是物聯網和智能化方面。我也同時做了一個IDC網站,也同時提供免費空間服務,不過這個當然是質量高的啦,由于加入了微軟的合作伙伴,所以服務器用的都是Windows Azure國際版的,當然可靠咯,希望部落能夠幫我推廣一下,如果你覺得我的網站和服務有什么問題和不足的話,衷心希望你能夠提出喔!謝謝啦 :smile:

    四弦 回復:

    @zzw, https://www.ssllabs.com/ssltest/analyze.html?d=www.lomme.cn&s=122.228.95.180
    HTTPS配置簡直可啪

    zzw 回復:

    @四弦, …有什么建議嗎

    四弦 回復:

    @zzw, 首先證書鏈不完整。雖然alphassl的不支持OCSP Stapling,但是也必須要有完整的證書鏈。“完整的證書鏈”定義為:“包括站點和所有中間證書,但不包括根證書”的證書鏈。不完整的證書鏈,Firefox會直接封殺,提示用戶不安全并且禁止用戶打開。
    其次是移除RC4 cipher suites的支持,這種算法早已不再安全。cipher suites沒配置好,導致你的前向安全性(forward security)也不完美。
    然后是DH Key不要用默認的,要自己用openssl命令生成一個自己的DH Key。
    再有一個是ECDHE的cipher suites使用的橢圓曲線建議是secp384r1不是secp256r1。
    最后是要開啟HSTS和HPKP,如果有時間的話最好啟用certificate transparency策略。

    我看你用的是tengine,可以參考一下Mozilla的這個ssl配置生成器:https://mozilla.github.io/server-side-tls/ssl-config-generator/

    zzw 回復:

    @四弦, 好的謝謝,我去學習學習

    zzw 回復:

    @四弦, 我知道了…我用的是阿里云的CDN,這些都是他們的服務器上面的…我改不了。。(就說你為什么會說我用的是Tengine…)

    可可豆 回復:

    @zzw, 證書鏈還沒修嗎。。買了之后,手機想看下ip都看不了!!

    zzw 回復:

    @可可豆, 我現在不用ssl了,阿里云cdn服務器的配置不是我說了算的….

    qi 回復:

    @zzw, 用了SSL就不要用CDN了,否則會出很多問題。

    qi 回復:

    @zzw, 好的,非常感謝,希望你可以堅持下去。價格方面,挺有吸引力的,虛擬主機賣得挺便宜的,VPS沒有香港機房嗎?有機會我會向我的朋友推薦的。

    zzw 回復:

    @qi, 香港機房目前我沒找到合適的母雞…帶寬都好小,成本較高,以后再看看吧

    可可豆 回復:

    @zzw, 比Budgetvm價格便宜而且還是Xen,帶寬足的話入一個不錯

    可可豆 回復:

    @可可豆, 好多鏈接有問題啊,直接調到https,應該是提供的證書沒提交對。我用的好難受。。。

    這是農場的第 22 塊農田,部落批準 [zzw] 在[2016-8-17 20:59]開墾完成.
  • 兩年前玩過,演示站還活在github上。這個比較適合碼農玩。

    qi 回復:

    @北門放羊, 博主搬家到阿里云了?

    北門放羊 回復:

    @qi, 是啊,國外的線路時不時會抽風,容易被干擾。換過好多個服務器了,傷透了,還是放國內踏實。

    這是農場的第 23 塊農田,部落批準 [北門放羊] 在[2016-8-18 01:00]開墾完成.
  • zkwolf 2

    我也想把網站再換成hexo了。。。自己懶得一點一點慢慢改網站了,感覺hexo寫文章還算蠻方便的

    qi 回復:

    @zkwolf, 是的,現在Hexo的主題也很豐富,評論等都是沒有問題的,專心寫博客的朋友可以試試。

    這是農場的第 24 塊農田,部落批準 [zkwolf] 在[2016-8-18 01:58]開墾完成.
  • 淡忘 2

    果斷 的注冊了個hexo前綴的米,有空去折騰玩玩

    qi 回復:

    @淡忘, 可以玩一玩。

    這是農場的第 25 塊農田,部落批準 [淡忘] 在[2016-8-20 10:00]開墾完成.
  • Pakist

    描述一個(算問題?亦或是我沒仔細讀?)從hexo的官方文檔來看,裝好hexo后(從release of hexo3開始)還要運行npm install hexo-server –save來安裝server,然后才可以hexo server

    這是農場的第 26 塊農田,部落批準 [Pakist] 在[2016-8-23 17:09]開墾完成.
  • 飛龍在地

    @qi, 請教heroku建的博客每隔段時間停機怎么辦? 是用監控寶嗎?還是用別的免費服務?可以麻煩給個服務的地址么?不勝感謝

    qi 回復:

    @飛龍在地, 使用網站監控服務的Ping,這樣造成空間一般不斷有用戶訪問,避免heroku出現間隔停機。

    這是農場的第 27 塊農田,部落批準 [飛龍在地] 在[2016-8-28 23:48]開墾完成.
  • 創月 4

    搞了四年,最后發現要性能好,又要網頁功能強,還是要自己開發,php還是不行啊,其實我建議真正有愛好搞網絡的,應該去學一門相關語言,自己寫一個博客,自己開發定制功能,無論是seo還是用戶體驗,網站性能,都會有很大提升,會搭建一個博客,會使用各種開源php程序,終究太淺了

    qi 回復:

    @創月, 自己開發的話還是有一定的門檻,對于一些只能專心寫博客的人來說可能不行,再加上好多人不是計算機專業出身,可能更多的人還是會喜歡像安裝軟件一樣選擇一些開源的PHP。

    這是農場的第 28 塊農田,部落批準 [創月] 在[2016-8-30 11:52]開墾完成.
  • Aoyu 1

    還是覺得hexo的官方文檔看起來更舒服一些,這篇文章根本讀不下去,受不了。

    qi 回復:

    @Aoyu, 有一定基礎能力的話,可以直接參考中文Hexo官方文檔 。

    這是農場的第 29 塊農田,部落批準 [Aoyu] 在[2016-8-31 20:02]開墾完成.
  • 可以試試在低配VPS上,配合btsync推送博客。我的博客就是通過btsync發布的,在本地用編輯器寫好,保存,30秒刷新下,就看到更新了。只是我經常換終端,甚至偶爾手機發表博客,所以不適用靜態博客。很多人有低配VPS,可以順便部署個博客

    qi 回復:

    謝謝,我下次試試看。

    這是農場的第 30 塊農田,部落批準 [Unee Wang] 在[2016-9-11 12:11]開墾完成.
  • Jack

    好麻煩啊,每寫一個文字還需要去終端敲一行代碼,就沒個簡單點的方法么

    這是農場的第 31 塊農田,部落批準 [Jack] 在[2016-9-26 11:38]開墾完成.
  • Jimmy 1

    在window2007的虛擬主機上怎么部署吖?

    這是農場的第 32 塊農田,部落批準 [Jimmy] 在[2016-9-26 17:10]開墾完成.
  • BabyBichu 1

    如果你有*過的域名 可以首選靜態博客 然后放七牛或又拍上 如果ssl建議直接又拍 價格不貴 免費自定義ssl給自己域名 功能更豐富

    qi 回復:

    @BabyBichu, 哦,有空我去用用又拍。

    這是農場的第 33 塊農田,部落批準 [BabyBichu] 在[2016-11-4 13:40]開墾完成.
  • nono

    樓主知道怎么將hexo部署到騰訊云windows server主機上嗎?

    qi 回復:

    @nono, 想在騰訊云windows server安裝Hexo,還是將Hexo博客放在騰訊云上?

    這是農場的第 34 塊農田,部落批準 [nono] 在[2017-4-16 22:03]開墾完成.
看貼要回貼有N種理由!看帖不回貼的后果你懂得的!


評論內容 (*必填):
(Ctrl + Enter提交)   

部落快速搜索欄

各類專題梳理

網站導航欄

X
?
返回頂部
<var id="xpn71"></var>
<ins id="xpn71"></ins>
<cite id="xpn71"><noframes id="xpn71">
<ins id="xpn71"></ins>
<cite id="xpn71"></cite><del id="xpn71"></del> <var id="xpn71"><dl id="xpn71"></dl></var>
<ins id="xpn71"><span id="xpn71"><listing id="xpn71"></listing></span></ins>
<cite id="xpn71"><dl id="xpn71"></dl></cite><ins id="xpn71"></ins>
<thead id="xpn71"><dl id="xpn71"><progress id="xpn71"></progress></dl></thead>
<var id="xpn71"><dl id="xpn71"><listing id="xpn71"></listing></dl></var>
<listing id="xpn71"></listing>
<var id="xpn71"></var><cite id="xpn71"><dl id="xpn71"></dl></cite> <cite id="xpn71"><dl id="xpn71"></dl></cite><menuitem id="xpn71"><dl id="xpn71"><listing id="xpn71"></listing></dl></menuitem>
<progress id="xpn71"><ruby id="xpn71"><span id="xpn71"></span></ruby></progress>
<ins id="xpn71"></ins>
<cite id="xpn71"></cite>
<thead id="xpn71"></thead>
<cite id="xpn71"><video id="xpn71"><thead id="xpn71"></thead></video></cite>
<cite id="xpn71"></cite>
<ins id="xpn71"><dl id="xpn71"></dl></ins>
<thead id="xpn71"><dl id="xpn71"><address id="xpn71"></address></dl></thead>
<thead id="xpn71"></thead><cite id="xpn71"></cite>
<thead id="xpn71"></thead>
<cite id="xpn71"><dl id="xpn71"></dl></cite>
<ins id="xpn71"></ins><address id="xpn71"><i id="xpn71"><th id="xpn71"></th></i></address>
青海快三昨天
<var id="xpn71"></var>
<ins id="xpn71"></ins>
<cite id="xpn71"><noframes id="xpn71">
<ins id="xpn71"></ins>
<cite id="xpn71"></cite><del id="xpn71"></del> <var id="xpn71"><dl id="xpn71"></dl></var>
<ins id="xpn71"><span id="xpn71"><listing id="xpn71"></listing></span></ins>
<cite id="xpn71"><dl id="xpn71"></dl></cite><ins id="xpn71"></ins>
<thead id="xpn71"><dl id="xpn71"><progress id="xpn71"></progress></dl></thead>
<var id="xpn71"><dl id="xpn71"><listing id="xpn71"></listing></dl></var>
<listing id="xpn71"></listing>
<var id="xpn71"></var><cite id="xpn71"><dl id="xpn71"></dl></cite> <cite id="xpn71"><dl id="xpn71"></dl></cite><menuitem id="xpn71"><dl id="xpn71"><listing id="xpn71"></listing></dl></menuitem>
<progress id="xpn71"><ruby id="xpn71"><span id="xpn71"></span></ruby></progress>
<ins id="xpn71"></ins>
<cite id="xpn71"></cite>
<thead id="xpn71"></thead>
<cite id="xpn71"><video id="xpn71"><thead id="xpn71"></thead></video></cite>
<cite id="xpn71"></cite>
<ins id="xpn71"><dl id="xpn71"></dl></ins>
<thead id="xpn71"><dl id="xpn71"><address id="xpn71"></address></dl></thead>
<thead id="xpn71"></thead><cite id="xpn71"></cite>
<thead id="xpn71"></thead>
<cite id="xpn71"><dl id="xpn71"></dl></cite>
<ins id="xpn71"></ins><address id="xpn71"><i id="xpn71"><th id="xpn71"></th></i></address>
<var id="xpn71"></var>
<ins id="xpn71"></ins>
<cite id="xpn71"><noframes id="xpn71">
<ins id="xpn71"></ins>
<cite id="xpn71"></cite><del id="xpn71"></del> <var id="xpn71"><dl id="xpn71"></dl></var>
<ins id="xpn71"><span id="xpn71"><listing id="xpn71"></listing></span></ins>
<cite id="xpn71"><dl id="xpn71"></dl></cite><ins id="xpn71"></ins>
<thead id="xpn71"><dl id="xpn71"><progress id="xpn71"></progress></dl></thead>
<var id="xpn71"><dl id="xpn71"><listing id="xpn71"></listing></dl></var>
<listing id="xpn71"></listing>
<var id="xpn71"></var><cite id="xpn71"><dl id="xpn71"></dl></cite> <cite id="xpn71"><dl id="xpn71"></dl></cite><menuitem id="xpn71"><dl id="xpn71"><listing id="xpn71"></listing></dl></menuitem>
<progress id="xpn71"><ruby id="xpn71"><span id="xpn71"></span></ruby></progress>
<ins id="xpn71"></ins>
<cite id="xpn71"></cite>
<thead id="xpn71"></thead>
<cite id="xpn71"><video id="xpn71"><thead id="xpn71"></thead></video></cite>
<cite id="xpn71"></cite>
<ins id="xpn71"><dl id="xpn71"></dl></ins>
<thead id="xpn71"><dl id="xpn71"><address id="xpn71"></address></dl></thead>
<thead id="xpn71"></thead><cite id="xpn71"></cite>
<thead id="xpn71"></thead>
<cite id="xpn71"><dl id="xpn71"></dl></cite>
<ins id="xpn71"></ins><address id="xpn71"><i id="xpn71"><th id="xpn71"></th></i></address>