前言
建網(wǎng)站本身是一個很大的工程力图,涉及前端頁面的搭建,網(wǎng)站數(shù)據(jù)的存儲掺逼,還要購置服務(wù)器資源吃媒,甚至是后期的維護(hù),過程相當(dāng)繁瑣吕喘。
不過如果僅僅是想搭建個人的網(wǎng)站赘那,寫寫博客,想要美觀氯质,又不想操心太多和寫博客無關(guān)的事情募舟。那么,Hexo + Kaze + Gitee Pages 的方式就很適合你闻察。
本文就講下如何借助這三樣免費(fèi)的技術(shù)或服務(wù)拱礁,來搭建一個可訪問的靜態(tài)博客網(wǎng)站琢锋。
Hexo 簡介
Hexo 是什么?
Hexo 是一個快速呢灶,簡單且功能強(qiáng)大的博客框架吴超。如果你用 Markdown 寫博客,Hexo 可以在幾秒內(nèi)生成帶有精美主題的靜態(tài)文件鸯乃。
Hexo 安裝
前置要求
- Node.js(版本 10.13 以上鲸阻,建議使用 12.0 以上版本)
- Git
安裝 Git
- Windows:下載并安裝 git。
- Mac:使用 Homebrew 安裝缨睡。
- Linux(Ubuntu鸟悴,Debian):
sudo apt-get install git-core
- Linux(Fedora,Red Hat奖年,CentOS):
sudo yum install git-core
安裝 Node.js
Node.js 為大多數(shù)平臺提供了 官方安裝程序遣臼。
替代安裝方法:
- Windows:使用 nvs 安裝它。
- Mac:使用 Homebrew 安裝拾并。
- Linux(基于DEB / RPM):與 NodeSource 一起安裝揍堰。
- 其他:通過相應(yīng)的軟件包管理器進(jìn)行安裝。請參閱 Node.js 提供的指南嗅义。
安裝 Hexo
用 npm 安裝 Hexo屏歹。
npm install -g hexo-cli
使用以下指令查看是否安裝成功。
hexo version
如果你想卸載 Hexo之碗,使用以下指令:
npm uninstall -g hexo-cli
運(yùn)行 hexo
安裝后蝙眶,你可以通過 hexo <command>
運(yùn)行 Hexo。比如通過 hexo help
指令來獲取使用幫助褪那。
hexo help
幫助里提到 hexo init
命令可以創(chuàng)建一個新的 Hexo 文件夾幽纷,這個文件夾其實(shí)就是利用 Hexo 生成的站點(diǎn)信息了。接下來講下怎么建站博敬。
Hexo 建站
初始化操作
使用 hexo init <folder>
指令就可以在指定文件夾下建立站點(diǎn)信息友浸,我一般用域名做名稱,如下:
hexo init java4u.cn
站點(diǎn)初始化中:
站點(diǎn)初始化完成偏窝,會生成指定的文件夾:
目錄結(jié)構(gòu)
進(jìn)入該站點(diǎn)收恢,我們看下目錄結(jié)構(gòu),如下:
這些文件有著各自的職責(zé):
- _config.landscape.yml:自定義的主題配置文件祭往,此處的 landscape 是默認(rèn)主題伦意。配置其他主題可以參考這種方式。
- _config.yml:站點(diǎn)全局的配置文件硼补。
- node_modules:node 模塊文件夾驮肉。包含可執(zhí)行文件和依賴的資源。
- package-lock.json:node_modules 文件中所有模塊的版本信息已骇,模塊來源离钝。
- package.json:Hexo 框架的基本參數(shù)信息以及它所依賴的插件票编。
- scaffolds:scaffolds 原意是腳手架,這里可以理解為模板文件夾奈辰。當(dāng)你創(chuàng)建新的文章時,Hexo 會根據(jù)該文件夾下的對應(yīng)文件進(jìn)行初始化構(gòu)建乱豆。
- source:資源文件夾奖恰。這里是你放自己資源比如博文和圖片的地方。
_posts
文件夾下的 Markdown 和 HTML 文件會被解析并放到public
文件夾下宛裕。其他文件或文件夾瑟啃,如果開頭命名不是_
(下劃線),也都會被拷貝過去揩尸。 - themes:主題文件夾蛹屿。Hexo 會根據(jù)主題來生成靜態(tài)頁面。
基于這樣的結(jié)構(gòu)岩榆,Hexo 就具備了生成靜態(tài)網(wǎng)站的能力错负。
本地啟動
我們先本地啟動,看下實(shí)際效果勇边。輸入以下命令:
hexo server
Hexo 會啟動服務(wù)犹撒,將默認(rèn)生成的網(wǎng)站運(yùn)行在本機(jī)的 4000 端口上,可以直接訪問 http://localhost:4000
就能看到網(wǎng)站首頁粒褒,它基于默認(rèn)主題生成识颊,同時有一篇默認(rèn)文章。
這個頁面只是官方提供的一個樣例奕坟,看到它就意味著你本地環(huán)境跑通了祥款。我們可以通過修改配置的方式,對頁面相關(guān)元素做調(diào)整月杉。
核心配置
以下是我們需要了解或者修改的配置信息刃跛。
package.json
這個文件列出了 Hexo 的基本參數(shù)信息以及它所依賴的插件】廖可以看到奠伪,EJS,Stylus 和 Markdown 渲染器都是默認(rèn)安裝的首懈。
{
"name": "hexo-site",
"version": "0.0.0",
"private": true,
"scripts": {
"build": "hexo generate",
"clean": "hexo clean",
"deploy": "hexo deploy",
"server": "hexo server"
},
"hexo": {
"version": ""
},
"dependencies": {
"hexo": "^5.0.0",
"hexo-generator-archive": "^1.0.0",
"hexo-generator-category": "^1.0.0",
"hexo-generator-index": "^2.0.0",
"hexo-generator-tag": "^1.0.0",
"hexo-renderer-ejs": "^1.0.0",
"hexo-renderer-marked": "^3.0.0",
"hexo-renderer-stylus": "^2.0.0",
"hexo-server": "^2.0.0",
"hexo-theme-landscape": "^0.0.3"
}
}
如果后邊要切換主題绊率,記得把最后一個默認(rèn)的主題依賴刪除掉。
_config.yml
可設(shè)置網(wǎng)站究履、網(wǎng)址滤否、目錄、文章最仑、分類&標(biāo)簽藐俺、日期/時間格式炊甲、分頁和擴(kuò)展等信息。
網(wǎng)站
參數(shù) | 描述 |
---|---|
title |
網(wǎng)站標(biāo)題 |
subtitle |
網(wǎng)站副標(biāo)題 |
description |
網(wǎng)站描述欲芹,用于 SEO |
keywords |
網(wǎng)站的關(guān)鍵詞卿啡,支持多個關(guān)鍵詞。 |
author |
文章作者菱父。 |
language |
網(wǎng)站使用的語言颈娜。對于簡體中文用戶來說,使用不同的主題可能需要設(shè)置成不同的值浙宜,請參考你的主題的文檔自行設(shè)置官辽,常見的有 zh-Hans 和 zh-CN 。 |
timezone |
網(wǎng)站時區(qū)粟瞬。Hexo 默認(rèn)使用您電腦的時區(qū)同仆。請參考 時區(qū)列表 進(jìn)行設(shè)置,如 America/New_York , Japan , 和 UTC 裙品。一般的俗批,對于中國大陸地區(qū)可以使用 Asia/Shanghai 。 |
URL
參數(shù) | 描述 | 默認(rèn)值 |
---|---|---|
url |
網(wǎng)址, must starts with http:// or https://
|
http://example.com |
root |
網(wǎng)站根目錄市怎,如果放子目錄扶镀,設(shè)置 /blog/
|
/ |
permalink |
文章的 永久鏈接 格式 | :year/:month/:day/:title/ |
permalink_defaults |
永久鏈接中各部分的默認(rèn)值 | |
pretty_urls |
改寫 permalink 的值來美化 URL |
|
pretty_urls.trailing_index |
是否在永久鏈接中保留尾部的 index.html ,設(shè)置為 false 時去除 |
true |
pretty_urls.trailing_html |
是否在永久鏈接中保留尾部的 .html , 設(shè)置為 false 時去除 (對尾部的 index.html 無效) |
true |
目錄
參數(shù) | 描述 | 默認(rèn)值 |
---|---|---|
source_dir |
資源文件夾焰轻,這個文件夾用來存放內(nèi)容臭觉。 | source |
public_dir |
公共文件夾,這個文件夾用于存放生成的站點(diǎn)文件辱志。 | public |
tag_dir |
標(biāo)簽文件夾 | tags |
archive_dir |
歸檔文件夾 | archives |
category_dir |
分類文件夾 | categories |
code_dir |
Include code 文件夾蝠筑,source_dir 下的子目錄 |
downloads/code |
i18n_dir |
國際化(i18n)文件夾 | :lang |
skip_render |
跳過指定文件的渲染。匹配到的文件將會被不做改動地復(fù)制到 public 目錄中揩懒。 |
文章
參數(shù) | 描述 | 默認(rèn)值 |
---|---|---|
new_post_name |
新文章的文件名稱 | :title.md |
default_layout |
預(yù)設(shè)布局 | post |
auto_spacing |
在中文和英文之間加入空格 | false |
titlecase |
把標(biāo)題轉(zhuǎn)換為 title case | false |
external_link |
在新標(biāo)簽中打開鏈接 | true |
external_link.enable |
在新標(biāo)簽中打開鏈接 | true |
external_link.field |
對整個網(wǎng)站(site )生效或僅對文章(post )生效 |
site |
external_link.exclude |
需要排除的域名什乙。主域名和子域名如 www 需分別配置 |
[] |
filename_case |
把文件名稱轉(zhuǎn)換為 (1) 小寫或 (2) 大寫 | 0 |
render_drafts |
顯示草稿 | false |
post_asset_folder |
啟動 Asset 文件夾 | false |
relative_link |
把鏈接改為與根目錄的相對地址,建議使用絕對地址已球。 | false |
future |
顯示未來的文章 | true |
highlight |
代碼塊的設(shè)置, see Highlight.js section for usage guide | |
prismjs |
代碼塊的設(shè)置, see PrismJS section for usage guide |
分類 & 標(biāo)簽
參數(shù) | 描述 | 默認(rèn)值 |
---|---|---|
default_category |
默認(rèn)分類 | uncategorized |
category_map |
分類別名 | |
tag_map |
標(biāo)簽別名 |
日期/時間格式
Hexo 使用 Moment.js 來解析和顯示時間臣镣。
參數(shù) | 描述 | 默認(rèn)值 |
---|---|---|
date_format |
日期格式 | YYYY-MM-DD |
time_format |
時間格式 | HH:mm:ss |
updated_option |
當(dāng) Front Matter 中沒有指定 updated 時 updated 的取值,支持 mtime(文件最后修改時間)智亮,date(使用 date 的值)忆某,empty(不指定) |
mtime |
分頁
參數(shù) | 描述 | 默認(rèn)值 |
---|---|---|
per_page |
每頁顯示的文章量 (0 = 關(guān)閉分頁功能) | 10 |
pagination_dir |
分頁目錄 | page |
擴(kuò)展
【主題】
參數(shù) | 描述 | 默認(rèn)值 |
---|---|---|
theme |
當(dāng)前主題名稱。值為false 時禁用主題 |
landscape |
theme_config |
主題的配置文件阔蛉。在這里放置的配置會覆蓋主題目錄下的 _config.yml 中的配置 |
無初始配置 |
deploy |
部署部分的設(shè)置 | |
meta_generator |
Meta generator 標(biāo)簽弃舒。 值為 false 時 Hexo 不會在頭部插入該標(biāo)簽 |
true |
【部署】
配置如下:
deploy:
type: git
repo: <repository url> #https://bitbucket.org/JohnSmith/johnsmith.bitbucket.io
branch: [branch]
message: [message]
參數(shù) | 描述 | 默認(rèn) |
---|---|---|
repo |
庫(Repository)地址 | |
branch |
分支名稱 |
gh-pages (GitHub) coding-pages (Coding.net) master (others) |
message |
自定義提交信息 |
Site updated: {{ now('YYYY-MM-DD HH:mm:ss') }} ) |
token |
Optional token value to authenticate with the repo. Prefix with $ to read token from environment variable |
常用指令
創(chuàng)建文章
使用以下指令:
hexo new "test"
或者簡寫:
hexo n "test"
運(yùn)行服務(wù)器
輸入以下命令以啟動服務(wù)器,您的網(wǎng)站會在 http://localhost:4000
下啟動。在服務(wù)器啟動期間聋呢,Hexo 會監(jiān)視文件變動并自動更新苗踪,您無須重啟服務(wù)器。
hexo server
或者簡寫:
hexo s
生成靜態(tài)文件
hexo generate
或者簡寫
hexo g
監(jiān)視文件變動立即重新生成削锰。該操作會阻塞命令通铲。
hexo g --watch
生成完畢后自動部署網(wǎng)站。
hexo generate --deploy
部署
Hexo 提供了快速方便的一鍵部署功能器贩,讓你只需一條命令就能將網(wǎng)站部署到服務(wù)器上颅夺。
hexo deploy
或者簡寫為:
hexo d
Hexo 主題
為什么選擇 Kaze
Hexo 默認(rèn)主題為 landscape,但我覺得不夠美觀磨澡,這里推薦 kaze ,它有以下特性:
響應(yīng)式設(shè)計碗啄,適配桌面端质和、平板稳摄、手機(jī)等各種設(shè)備
-
前端性能優(yōu)化,加載快速饲宿,眨眼之間即可加載完成
- 圖片懶加載厦酬,應(yīng)用懶加載技術(shù)加快頁面的生成速度
- 資源壓縮,提升本地資源請求速度
- 精簡設(shè)計瘫想,不包含 Jquery 等額外庫
支持側(cè)邊欄小組件仗阅,例如最近文章,作者卡片
暗黑模式国夜,享受黑夜的魅力
代碼高亮减噪,支持 prismjs
公式渲染,支持 katex 和 mathjax
評論系統(tǒng)车吹,集成 valine筹裕、gitalk 和 livere
訪問量統(tǒng)計和谷歌分析支持
安裝 Kaze
在 your site/themes
下輸入
cd themes
git clone https://github.com/theme-kaze/hexo-theme-Kaze.git
安裝成功后,會生出目錄:hexo-theme-Kaze窄驹。
修改站點(diǎn)配置文件 _config.yml
下的主題值為:hexo-theme-Kaze朝卒。
用 hexo server
啟動 Hexo 服務(wù)看下效果。
會看到已經(jīng)生成了默認(rèn)的主題乐埠,只是很多東西都沒有抗斤,需要改造一下。
主題配置
可在該主題目錄下的 _config.yml 文件里配置丈咐。
主題顏色
在 color 中進(jìn)行配置瑞眼,以下是默認(rèn)值。
color:
text-color: "#3c4858"
text-strong-color: "#2f3d4e"
text-light-color: "#909faf"
divider-color: "#e6e8ee"
title-color: "#475b6d"
link-color: "#3273dc"
link-hover-color: "#6596e5"
info-text-color: "#909faf"
widget-background-color: "#fff"
body-background-color: "#f2f5f8"
border-color: "#e1e4e9"
pre-color: "#2d2d2d"
code-color: "#50687c"
code-background-color: "#e9eaf0"
字號與字體
在 font 中進(jìn)行配置棵逊,以下是默認(rèn)值负拟。
font:
font-size: 16px # global font-size
font-family: '-apple-system,BlinkMacSystemFont,"Segoe UI","Helvetica Neue","PingFang SC","Microsoft YaHei",sans-serif' # global font-family
站點(diǎn)訪問量統(tǒng)計
訪問量統(tǒng)計目前僅支持不蒜子,默認(rèn)關(guān)閉歹河,可統(tǒng)計站點(diǎn)總訪問量和總訪客數(shù)掩浙。
footer:
#------------------------
# pv / uv statistics config
#------------------------
statistics:
enable: false
type: busuanzi # now version only supports busuanzi
pv:
enable: true
style: 本站總訪問量{}次 # the style will be shown as $1{pv}$2
uv:
enable: true
style: 本站總訪客數(shù){}次 # the style will be shown as $1{uv}$2
數(shù)據(jù)分析
analytics:
enable: false
type: google # google
google:
id:
enable
開啟分析支持(默認(rèn)關(guān)閉)
type` 目前僅支持 `google
google.id
有關(guān)谷歌分析的具體使用說明和 id
使用可以參考谷歌文檔
首頁
文章頭圖
在文章 Front-matter
中 banner_img
可以設(shè)置首頁頭圖
小組件
widgets:
showWidgetsMobiles: "none"
showWidgetsMobiles
: 在窄屏幕上是否顯示小組件花吟,none
關(guān)閉(默認(rèn)),flex
開啟
關(guān)于
關(guān)于頁面需要自行創(chuàng)建厨姚,在站點(diǎn) source
中新建 about
文件夾并在文件夾內(nèi)創(chuàng)建 index.md
衅澈,該文件至少需要包含
# at ${yoursite}/about/index.md
---
title: 關(guān)于
layout: about
---
社交鏈接
在 about 下的 social_links
中進(jìn)行配置,主題圖標(biāo)依賴于 iconfont谬墙,內(nèi)置了一部分社交圖標(biāo)今布,你可以自定義其他icon文件或者解決方案來添加自定義圖標(biāo)。
about:
description: description
social_links:
- { icon: icon-github, link: https://xxx}
# - { icon: icon, link: your link }
友鏈
友鏈格式按如下填寫即可生成友鏈頁面
links:
example-name-1:
url: https://example.com
avatar: https://example.com/avatar.jpg
example-name-2:
url: https://example.com
avatar: https://example.com/avatar.jpg
文章頁
搜索功能
search:
enable: true
path: search.json
field: posts
searchContent: true
-
enable
開啟搜索功能(默認(rèn)開啟) -
path
文件名稱(暫無用處) -
field
需要搜索的范圍拭抬,支持 posts | pages | all -
searchContent
搜索文件是否包含正文內(nèi)容(不建議開啟部默,包含所有文章內(nèi)容這樣會使得搜索文件異常巨大)替代方案是搜索分類標(biāo)簽或使用algolia等第三方搜索服務(wù)(Todo)
目錄
主題目錄通過Hexo原生函數(shù)生成,具體可參見 文檔
toc:
showListNumber: false
maxDepth: 6
minDepth: 1
showListNumber
是否生成編號
maxDepth
TOC最大深度
minDepth
TOC最小深度
代碼高亮
參見代碼 高亮文檔
數(shù)學(xué)公式
主題支持 mathjax
和 katex
兩種渲染引擎造虎,具體參見 相關(guān)文檔
copyright
copyright:
enable: true
writer: # if writer is empty we will use config.author as writer
declare: 本博客所有文章除特別聲明外傅蹂,均采用<a target="_blank" rel="noopener" >CC BY-NC-SA 4.0 協(xié)議</a>。轉(zhuǎn)載請注明出處算凿!
style: warning
enable
開起版權(quán)說明(默認(rèn)開啟)
writer` 作者id份蝴,如果不填則會使用主題配置`author`或站點(diǎn)配置`author
declare
版權(quán)聲明具體內(nèi)容,支持 html 語句
style
聲明內(nèi)容樣式氓轰,與 note 樣式相同
版權(quán)內(nèi)容有三部分:作者婚夫、文章鏈接、版權(quán)聲明
作者使用 writer 參數(shù)署鸡,文章鏈接基于站點(diǎn)配置文件中url
參數(shù)生成案糙,版權(quán)聲明使用 declare 參數(shù)
Front-matter
banner_img
設(shè)置文章與首頁頭圖
banner_img_set
在圖片加載時預(yù)先加載的圖片,可以設(shè)置為 loading 圖或縮略圖等
excerpt
為文章設(shè)置在首頁顯示的簡介靴庆,還可以通過 `` 來控制顯示
評論
支持 valine
时捌,gitalk
和 livere
具體設(shè)置可參考主題配置文檔說明和相關(guān)評論插件文檔
字?jǐn)?shù)統(tǒng)計
主題集成 hexo-wordcount 插件,在主題配置文件中設(shè)置
wordcount:
enable: true
開啟(默認(rèn)開啟)
圖片畫廊
圖片畫廊功能基于 fslightbox撒穷,在主題配置文件中設(shè)置
fslightbox:
enable: true
開啟(默認(rèn)開啟)
標(biāo)簽插件
主題集成了一些標(biāo)簽方便書寫
note
在 markdown
文件中如下書寫即可
{% note style %}
...markdown content
{% endnote %}
有五種樣式可以選擇匣椰,primary
,success
端礼,info
禽笑,warning
,danger
備案信息
您可以在主題配置文件內(nèi)增加您的備案信息蛤奥。
footer:
#------------------------
# 備案配置
# 請將公安備案的縮略圖置于 ${yoursite}/img/beian.png
RecordInfo: "" # '某ICP備xxx號'
govRecordInfo: "" # '某公網(wǎng)安備xxx號'
govRecordUrl: "" # 公網(wǎng)安備案信息地址
#------------------------
站點(diǎn)托管
為什么選擇 Gitee Pages
GitHub 和 Gitee 都提供免費(fèi)的靜態(tài)網(wǎng)頁托管服務(wù)佳镜。我們可以使用 GitHub Pages 或 Gitee Pages 托管博客、項目官網(wǎng)等靜態(tài)網(wǎng)頁凡桥,這樣就省去了購買服務(wù)器的錢蟀伸,也不需要耗費(fèi)太多精力維護(hù)。
GitHub Pages 使用很廣泛,我之前也用過啊掏,不過訪問不夠穩(wěn)定蠢络,會影響頁面加載速度。Gitee 是國內(nèi)版的 GitHub迟蜜,訪問速度優(yōu)秀刹孔,并且國內(nèi)發(fā)展勢頭不錯,因此我選取 Gitee Pages 來托管我的網(wǎng)站娜睛。
建立倉庫
申請一個 Gitee 賬號髓霞,創(chuàng)建一個新的倉庫,倉庫名盡量和賬號名一致畦戒,這樣可以避免一些因為路徑引發(fā)的問題方库。
然后在倉庫首頁服務(wù)一欄開啟 Gitee Pages 服務(wù)。
開啟后障斋,你就擁有了專屬的二級域名網(wǎng)址纵潦。
注意:倉庫內(nèi)容有變化,需要手動觸發(fā)更新配喳,頁面才能真正生效酪穿。
連接倉庫
- 安裝 hexo-deployer-git凳干。
npm install hexo-deployer-git --save
- 修改配置晴裹。
deploy:
type: git
repo: git@gitee.com:java4u/java4u.git
注意上面的 repo 地址并不是倉庫的地址,而是你下載/克隆項目時彈出的那個地址救赐,type 如果是 git 就選擇 SSH涧团。
- 生成/添加 SSH 公鑰
Gitee 、GitHub 提供了基于 SSH 協(xié)議的 Git 服務(wù)经磅,在使用 SSH 協(xié)議訪問倉庫倉庫之前泌绣,需要先配置好賬戶/倉庫的 SSH 公鑰。
先看下自己有沒有配置過用戶名和郵箱:
git config --global user.name
git config --global user.email
如果沒有就做下配置:
# 設(shè)置郵箱
git config --global user.email *********@qq.com
# 設(shè)置用戶名
git config --global user.name '****'
然后本地生成 SSH 公鑰预厌,郵箱為剛配置好的賬戶:
ssh-keygen -t rsa -C yong__1994@163.com
生成后可查看 SSH 公鑰:
cat ~/.ssh/id_rsa.pub
復(fù)制公鑰去 Gitee 粘貼阿迈,添加。
測試是否連接成功:
ssh -T git@gitee.com
上傳倉庫
執(zhí)行部署命令轧叽,即可將本地資源上傳遠(yuǎn)程倉庫苗沧。
hexo d
手動更新
遠(yuǎn)程倉庫雖然可以看到提交記錄,但靜態(tài)網(wǎng)站不會感知到實(shí)時變更炭晒,需要去 Gitee Pages 服務(wù)頁面做下更新待逞。
稍等片刻,訪問 https://java4u.gitee.io/ 即可看到 Hexo 結(jié)合 kaze 主題搭建的靜態(tài)網(wǎng)站网严。