hexo搭建部落格以及域名解析分析

nephen發表於2018-11-23

部落格使用靜態網站生成技術生成,靜態網站生成是指靜態生成網站的過程,即生成HTML檔案,例如,在本地計算機中,然後將網站檔案上載到伺服器,該伺服器在被請求時向使用者提供服務。相比動態網站,有以下優點:

  • 內容儲存為平面檔案,因此不需要資料庫
  • 靜態網站不需要動態伺服器端處理
  • 靜態網站比動態網站超快,因為它們不需要伺服器端處理或資料庫訪問
  • 靜態網站比任何動態網站都更安全,因為可以利用的安全漏洞更少
  • 快取靜態檔案比快取動態頁面更有效

目前網上主流的靜態站點生成器有三個,分別為Jekyll、Hugo、Hexo。

其中Jekyll由Github用Ruby語言構建,您可以免費使用Github Pages來託管您的靜態網站,並使用CNAME檔案輕鬆將其與您的自定義頂級域名連結。 它的主要弱點為隨著網站內容的增長,構建過程變得非常慢。

另外,Hugo是一個用Go構建的靜態站點生成器。它被宣傳為“世界上最快的網站構建框架”。它最近與Jekyll相比,但在人氣方面迅速增長。 它的主要缺點為可擴充套件性差和外掛少。

而Hexo是基於Node的開源靜態生成器,可在MIT許可下使用。藉助Node.js平臺,Hexo允許您在幾秒鐘內生成數百個靜態檔案。 主要有以下優點:

  • 快速而令人難以置信的速度
  • 使用一個部署命令部署到Github頁面或任何其他主機
  • 強大的Markdown支援
  • 高度可擴充套件
  • 可用的免費和開源主題
  • 可用的免費外掛

而且它的缺點是:Hexo有一個相對較大的社群,但大多數是非英語人士(來自中國),這個缺點從我們的角度來看就是優點啊。

根據以上分析,我採用的總體方案為:採用Hexo進行部落格建立,其中使用Next主題進行配置,將生成的部落格靜態網站部署在自己搭建的vps伺服器上,最後採用dnspot對域名進行解析。具體細節見下文。

Hexo環境搭建

  1. 安裝 參照https://hexo.io/zh-cn/docs/ 網站,主要包括Node.js、Hexo和Git安裝,Node.js、Git可以直接下載安裝包安裝,Hexo可以在Git Bash命令列裡面安裝:

    $ npm install -g hexo-cli
    複製程式碼
  2. 建站 環境搭建好後就可以開始建站了,同樣在Git Bash裡面輸入命令列進行:

    $ hexo init <folder>
    $ cd <folder>
    $ npm install hexo --save
    複製程式碼

    其中folder為你要建立的部落格的資料夾。

  3. 相關命令 站點建立好後,就可以開始寫文章了,可以使用sublime編輯軟體開啟剛剛建好的folder部落格資料夾,找到source/_posts目錄即為要寫的文章地址。 涉及到的一些命令如下:

    #新建文章
    $ hexo new [layout] <title>
    #生成靜態檔案
    $ hexo generate
    #啟動伺服器
    $ hexo server
    #部署網站
    $ hexo deploy
    #生成完成後部署
    hexo g -d
    #清除快取檔案 (db.json) 和已生成的靜態檔案 (public)
    $ hexo clean
    複製程式碼

Next主題

  1. 下載使用 進入之前建好的部落格資料夾根目錄,開啟Git Bash,使用git命令進行Next原始碼下載:

    $ git clone https://github.com/iissnan/hexo-theme-next themes/next
    複製程式碼

    Git怎麼使用子模組? 通過在 git submodule add 命令後面加上想要跟蹤的專案 URL 來新增新的子模組:

    git submodule add https://github.com/iissnan/hexo-theme-next themes/next
    #檢視
    cat .gitmodules
    #保持更新
    git submodule update --init --recursive
    複製程式碼
  2. 配置使用 關於Next主題的配置使用,直接看官網就好。

Hexo本地配置

  1. 主題配置 開啟站點配置檔案_config.yml,位於跟目錄下,可以選擇使用Next作為主題,參照官網進行配置就好。

  2. 部署配置 部署其實就是怎麼把生成的靜態網站上傳到伺服器端,把部署方式和地址說明一下,我這裡採用的是自己搭建的git伺服器,也可以是github(那就要在github上新建 blogname-github-io 倉庫)

    deploy: 
    type: git
    repo: git@你的伺服器IP:/home/git/blog.git
    branch: master
    複製程式碼

VPS搭建Hexo部落格

作為自己搭建伺服器來說,這部分是重點了。

  1. 什麼是vps? VPS(Virtual Private Server 虛擬專用伺服器)技術,將一臺伺服器分割成多個虛擬專享伺服器的優質服務。比如搬瓦工VPS是一款價效比較高的便宜VPS主機,且適合入門級網友學習Linux、建站和軟體除錯用途。搬瓦工VPS目前有洛杉磯MC、洛杉磯QN、鳳凰城、佛羅里達、荷蘭這8個資料中心,對中文速度較好的是洛杉磯和鳳凰城。

  2. 基本原理 在伺服器上搭建一個Git倉庫。在本地Hexo執行deploy後,部落格檔案會被push到這個Git倉庫,然後這個倉庫又會通過一個git-hooks的功能把檔案同步到VPS的網站根目錄,經過Nginx代理服務把網站展現給使用者。參考下圖

    image

  3. Git伺服器設定 在.git/hooks資料夾中建立一個鉤子檔案:post-receive,注意沒有字尾.sample,這樣每當git倉庫接收到內容的時候,就會自動呼叫這個鉤子,把內容同步到網站根目錄。需要修改post-receive許可權使其可執行,chown git:git -R post-update/chmod +x post-update。

    image
    debug需要注意的地方,實際問題通過git push origin master返回log檢視即可。

  4. Nginx設定 web伺服器選擇Nginx,Nginx與Apache比較,有如下優點:

    • Nginx輕量級,佔用資源少,負載均衡,高併發處理強,靜態內容處理高效。
    • Apache擁有豐富的模組元件支援,穩定性強,BUG少,動態內容處理強。

    常見命令:

    #安裝Nginx
    yum install -y nginx
    #啟動Nginx服務
    service nginx start
    #測試Nginx配置檔案
    nginx -t
    複製程式碼

    重點說一下Nginx的配置部分

    #配置之前備份一下
    cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
    #修改預設埠號
    vi /etc/nginx/conf.d/default.conf
    #修改配置檔案
    vim /etc/nginx/nginx.conf
    複製程式碼

    image

    這樣配置好後就可以通過 http://vps伺服器地址:埠號 來訪問站點了。

域名解析

最後一步,也是最難理解的一步,將伺服器地址解析到域名。首先得買一個域名,通過一些相關的設定後,以後直接通過訪問域名來訪問站點了。

  1. 概念解讀 需要了解一些常識,什麼叫DNS? DNS(域名系統)是一個龐大的伺服器網路,包含地球上最大的數字資料庫。該資料庫由多個網際網路機構維護,管理和監管,包括IANA(網際網路號碼分配機構)和ICANN(網際網路名稱與數字地址分配機構)。 DNS是網際網路的中央資料庫,如果沒有它,網際網路將不會像現在一樣存在。 它一般處理的資料包括:

    • 名字(name):指的是域名
    • 資源(resource):包括A(主機地址,一般就是主機的IP)、NS(域名伺服器記錄(Name Server),返回儲存下一級域名資訊的伺服器地址。該記錄只能設定為域名,不能設定為IP地址。)、CNAME(規範名稱記錄(Canonical Name),返回另一個域名,即當前查詢的域名是另一個域名的跳轉)、MX(郵件記錄(Mail eXchange),返回接收電子郵件的伺服器地址)、TXT(任意字串)等等。

    基本處理原理見下圖,下面會結合具體例子進行解讀:

    image

    另外處理資料裡面包含的NS指的是什麼呢?它是名稱伺服器,是安裝有DNS軟體的Web伺服器,特別是由Web主機管理的伺服器,該主機專門用於管理與所有主機提供商的帳戶關聯的域名。

  2. dnspot設定 使用dnspos進行設定,註冊賬號就可以,這就是一個dns伺服器,在國內,解析的比較快,設定如下:

    image
    由於我是用godaddy購買的域名,還要在godaddy裡面告訴它我使用了第三方的dns伺服器,不使用dodaddy自帶的了,因為自帶的伺服器在國外,解析肯定會慢些。
    image

  3. 深扒dns 可能你還是不理解什麼叫dns,它是怎麼工作的?我們使用dig工具來深入解讀一下域名nephen.cn是怎麼解析出它具體的伺服器地址的? 如果你使用的是linux系統,本身就自帶了dig命令,如果是windows系統,使用網頁版工具diggui就好了。 輸入如下:

    image
    得出輸出結果:
    image
    再一一解讀一下:

  • 計算機查詢相應IP地址的第一個位置是其本地DNS快取,該快取儲存計算機最近檢索到的資訊,如果沒有則進行DNS檢索查詢。
  • dig問8.8.8.8:根區域的名稱伺服器是什麼? 8.8.8.8回覆:名稱伺服器為a.root-servers.net... dig隨機挑選了k.root-servers.net並解析為193.0.14.129,埠號為53
  • dig問193.0.14.129:nephen.cn的地址是多少? 193.0.14.129回覆:我不知道,你可以問下cn.名稱伺服器,他們是a.dns.cn. ... f.dns.cn. dig隨機選擇了e.dns.cn,解析地址為203.119.29.1,埠號為53
  • dig問203.119.29.1:nephen.cn的地址是多少? 203.119.29.1回覆:我不知道,可以問下nephen.cn名稱伺服器,他們是f1g1ns1.dnspod.net.,f1g1ns2.dnspod.net. dig隨機選擇了f1g1ns1.dnspod.net,解析地址為58.247.212.36,埠號為53
  • dig問58.247.212.36:nephen.cn的地址是多少? 58.247.212.36回覆:23.106.149.209 如果使用的是nephen.github.io託管網頁,那這裡會回答為CNAME為nephen.github.io,重新進行遞迴查詢真正的地址
  • 遞迴伺服器8.8.8.8從權威名稱伺服器檢索dyn.com的A記錄,並將記錄儲存在其本地快取中,快取TTL時間更新一次。 如果有其他人請求nephen.cn的主機記錄,遞迴伺服器將已經有了答案,不需要再次進行查詢過程 DNS解析器在查詢DNS伺服器之前始終檢查本地快取,包括當前DNS解析器快取內容和從Hosts檔案預載入的條目 相關命令:C:> ipconfig /displaydns、C:> ipconfig /flushdns
  • 遞迴伺服器會將A記錄返回給您的計算機。您的計算機將記錄儲存在其快取中,從記錄中讀取IP地址,然後將此資訊傳遞給您的瀏覽器。

當然windows也有自帶的nslookup可以查詢,直接就能查出解析後的地址,其中208.67.222.222為手動選擇的遞迴伺服器,跟上面例子中的8.8.8.8是一個性質的。

image

還可以使用一些別的網路工具,隨便推薦幾個:

以上就是建站的整個過程,夾雜了一些對問題的思考,希望對你有所啟發,每一個技術問題背後其實有很多東西需要弄明白的,當我們搞清楚以後心裡才會覺得更加踏實,從另一個層面來講,弄清楚了底層的技術原理,對出現問題也能更加快速的定位,對出現新的技術也能觸類旁通。

  • 本文作者: nephen
  • 本文連結: nephen.cn/2018/11/23/…
  • 版權宣告: 本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 3.0 許可協議。轉載請註明出處!

相關文章