用Hexo搭建一个GitHub个人Blog

不知道有没有人像我一样,想要建立个人主页,可是对JaveScript和PHP都不了解。不过现在好了,基于开源的Hexo,只需1小时,即可在GitHub搭建一个简单又美观的个人主页,并在上面发表你的第一篇文章。Here we go.

目录

准备

选装

配置Git

首先在GitHub上注册免费账号。接着在账户界面选择+ New repository,在Repository Name中填入用户名.github.io,选择Public,点击Create Respository创建一个目录。这个目录就是你的网站的存储空间。

创建站点的存储空间

接下来打开Git Bash,在Git Bash中输入

1
cd ~/. ssh

以检查本机的ssh密钥。如果提示:’No such file or directory 说明你是第一次使用Git。

生成新的SSH Key:

1
2
3
ssh-keygen -t rsa -C "邮件地址@youremail.com"	
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/your_user_directory/.ssh/id_rsa):<此处直接回车>

这里邮箱地址要填入注册邮箱地址。

然后设置密码:

1
2
Enter passphrase (empty for no passphrase):<输入加密串>
Enter same passphrase again:<再次输入加密串>

在回车中会提示你输入一个密码,这个密码会在你提交项目时使用,如果为空的话提交项目时则不用输入。这个设置是防止别人往你的项目里提交内容。注意:输入密码的时候没有*字样的,你直接输入就可以了。

最后看到这样的界面,就成功设置SSH Key了:

配置成功

在本机设置SSH Key后,需要添加SSH Key到GitHub上,为之后的从本地向GitHub上提交网站做准备。

  1. 用文本编辑器打开C:\Users\用户名.ssh\id_rsa.pub,里面是刚才生成的密钥。
  2. 登录GitHub,在右上角的头像选择Settings -> SSH Key -> New SSH Key,然后将文件中的内容拷贝至Key中即可。Title为这个SSH Key的名称,可以自定。

SSH Keys

测试设置结果:

1
$ ssh -T git@github.com

如果得到如下反馈:

1
2
3
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?

此时输入yes即可。然后会看到:

1
Hi thesharing! You've successfully authenticated, but GitHub does not provide shell access.

说明SSH Key已经设置成功,这台设备的Git Bash已经可以访问你的GitHub了。

接下来需要设置登录信息:

1
2
$ git config --global user.name "你的用户名"
$ git config --global user.email "你的注册邮箱"

到这一步,Git Bash就配置完毕了。

安装Hexo

Hexo 是一个快速、简洁且高效的博客框架。在安装完以上的软件以后,在命令提示行中使用npm命令即可完成安装。

1
npm install -g hexo-cli

可能会有网络错误,可以重新执行命令安装。

接下来执行

1
npm install

以安装所需的依赖包。

部署Hexo

指定一个文件夹作为你的博客存放的文件夹,然后从此文件夹打开命令行,开始部署:

1
hexo init

等待一段时间,Hexo会在这个文件夹下建立工作目录。现在本地博客已经建立完毕,执行以下命令:

1
2
hexo generate
hexo server

然后在浏览器中访问localhost:4000即可看到初始化的博客内容。

下载主题

在Hexo的官方网站Themes|Hexo 上有一些主题可供使用,在Hexo的GitHub主页Themes - hexojs/hexo上提供了更多的主题链接可供下载。你可以选择用Git将主题Clone到本地,以获得主题的实时更新,也可以通过Download Zip将主题下载到本地的hexo文件夹/theme/使用。针对不同主题会有不同的设置项,一般主题的GitHub主页会提供Wiki来帮助设置主页。本次以PPOffice开发的Icarus为例进行主题方面的设置。

个性化你的博客

首先要配置你的站点信息,用Visual Studio Code等文本编辑器(不推荐使用记事本,存在一些格式上的问题)打开hexo/_config.yml开始配置。

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
# Site 站点信息设置
title: Zhilong's Blog # 站点标题
subtitle: Have a try # 副标题
description: Zhilong's personal blog on github # 给搜索引擎看的,对站点的描述,可以自定义
author: Thesharing # 网站作者:在站点下方可以看到
language: zh-CN # 语言:简体中文

# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: http://thesharing.github.io/ #站点地址
root: / #站点的根目录
permalink: :year/:month/:day/:title/ #文章默认存放位置的格式,这里表示目录结构为:year/month/day/title.md
# Directory
source_dir: source
public_dir: public
tag_dir: tags
archive_dir: archives
category_dir: categories
code_dir: downloads/code
i18n_dir: :lang
skip_render: [readme.md, "*.html", "*.htm"]


# Writing 文章布局、写作格式的定义
new_post_name: :title.md # 新文章的文章名,这里是用文章标题作为文件名
default_layout: post # 默认的布局,详情查看https://hexo.io/zh-cn/docs/writing.html以获得更多信息
auto_spacing: true # 是否在中文字符和英文字符之间自动添加空格
titlecase: false # 是否将标题大写
external_link: true # Open external links in new tab
filename_case: 0
render_drafts: false
post_asset_folder: false
relative_link: false
future: true
highlight: #语法高亮
enable: true
backtick_code_block: true
line_number: true
tab_replace:

# 目录和标签
default_category: uncategorized # 默认目录
category_map:
tag_map:
sitemap:
path: sitemap.xml
baidusitemap:
path: baidusitemap.xml

# Archives 默认值为2,这里都修改为1,相应页面就只会列出标题,而非全文
## 2: Enable pagination
## 1: Disable pagination
## 0: Fully Disable
archive: 1
category: 1
tag: 1

# Server 本地服务器信息
## Hexo uses Connect as a server
## You can customize the logger format as defined in
## http://www.senchalabs.org/connect/logger.html
port: 4000
logger: false
logger_format:

# Date / Time format 日期、时间格式
## Hexo uses Moment.js to parse and display date
## You can customize the date format as defined in
## http://momentjs.com/docs/#/displaying/format/
date_format: YYYY-MM-DD
time_format: HH:mm:ss

# Pagination 每页显示文章数,可以自定义
## Set per_page to 0 to disable pagination
per_page: 10
pagination_dir: page

# Extensions 配置站点所用主题和插件
## Plugins: https://github.com/tommy351/hexo/wiki/Plugins
## Themes: https://github.com/tommy351/hexo/wiki/Themes
theme: icarus # 主题

# Deployment 站点部署到github的设置
## 官方文档:https://hexo.io/zh-cn/docs/deployment.html
deploy:
type: git
repository: https://github.com/thesharing/thesharing.github.io.git # Repository地址
branch: master

可以将其直接复制入你的_config.yml文件中使用。下面解释各项如何修改。

Site

按照说明修改即可。

URL

将url改为你的博客首地址,可以到GoDaddy上购买域名进行绑定,那么这里就应该改成你的域名而非GitHub.io地址。

Writing - Pagination

均不必修改,如自定义请参考官方Doc进行修改。

Theme

将Theme修改为你下载的主题的主题名,要注意,theme文件夹下的主题文件夹也要对应名称。

Deploy

repository改为https://github.com/你的用户名/你的用户名.github.io.gitbranch不变。

此时第一个配置文件设置结束,我们打开主题的配置文件来配置主题样式。这里以icarus为例,打开hexo/themes/icarus/_config.yml:

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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
# Version of the Icarus theme that is currently used
version: 2.3.0
# Path or URL to the website's icon
favicon: /images/favicon.png
# Path or URL to RSS atom.xml
rss: rss.xml
# Path or URL to the website's logo to be shown on the left of the navigation bar or footer
logo: /images/logo.png
# Open Graph metadata
# https://hexo.io/docs/helpers.html#open-graph
open_graph:
# Facebook App ID
fb_app_id:
# Facebook Admin ID
fb_admins:
# Twitter ID
twitter_id:
# Twitter site
twitter_site:
# Google+ profile link
google_plus:
# Navigation bar link settings
navbar:
# Navigation bar menu links
menu:
首页: /
归档: /archives
关于: /about
# Navigation bar links to be shown on the right
links:
GitHub:
icon: fab fa-github
url: 'http://github.com/thesharing/'
# Footer section link settings
footer:
# Links to be shown on the right of the footer section
links:
Creative Commons:
icon: fab fa-creative-commons
url: 'https://creativecommons.org/'
Attribution 4.0 International:
icon: fab fa-creative-commons-by
url: 'https://creativecommons.org/licenses/by/4.0/'
# Article display settings
article:
# Code highlight theme
# https://github.com/highlightjs/highlight.js/tree/master/src/styles
highlight: pojoaque
# Whether to show article thumbnail images
thumbnail: false
# Whether to show estimate article reading time
readtime: true
# Search plugin settings
# http://ppoffice.github.io/hexo-theme-icarus/categories/Configuration/Search-Plugins
search:
# Name of the search plugin
type: insight
# Comment plugin settings
# http://ppoffice.github.io/hexo-theme-icarus/categories/Configuration/Comment-Plugins
comment:
# Name of the comment plugin
type: disqus
shortname: thesharing
# Donation entries
# http://ppoffice.github.io/hexo-theme-icarus/categories/Donation/
donate:
-
# Donation entry name
type: alipay
# Qrcode image URL
qrcode: '/images/alipay.jpg'
-
# Donation entry name
type: wechat
# Qrcode image URL
qrcode: '/images/wechat.jpg'
# -
# # Donation entry name
# type: paypal
# # Paypal business ID or email address
# business: ''
# # Currency code
# currency_code: USD
# -
# # Donation entry name
# type: patreon
# # URL to the Patreon page
# url: ''
# Share plugin settings
# http://ppoffice.github.io/hexo-theme-icarus/categories/Configuration/Share-Plugins
share:
# Share plugin name
type: sharejs
# Sidebar settings.
# Please be noted that a sidebar is only visible when it has at least one widget
sidebar:
# left sidebar settings
left:
# Whether the left sidebar is sticky when page scrolls
# http://ppoffice.github.io/hexo-theme-icarus/Configuration/Theme/make-a-sidebar-sticky-when-page-scrolls/
sticky: false
# right sidebar settings
right:
# Whether the right sidebar is sticky when page scrolls
# http://ppoffice.github.io/hexo-theme-icarus/Configuration/Theme/make-a-sidebar-sticky-when-page-scrolls/
sticky: false
# Sidebar widget settings
# http://ppoffice.github.io/hexo-theme-icarus/categories/Widgets/
widgets:
-
# Widget name
type: profile
# Where should the widget be placed, left or right
position: left
# Author name to be shown in the profile widget
author: Your Name
# Title of the author to be shown in the profile widget
author_title: Your Title
# Author's current location to be shown in the profile widget
location: Your Location
# Path or URL to the avatar to be shown in the profile widget
avatar: /images/avatar.png
# Email address for the Gravatar to be shown in the profile widget
gravatar:
# Whether to show avatar image rounded or square
avatar_rounded: true
# Path or URL for the follow button
follow_link: 'http://github.com/thesharing/'
# Links to be shown on the bottom of the profile widget
social_links:
Github:
icon: fab fa-github
url: ''
StackOverflow:
icon: fab fa-stack-overflow
url: ''
Steam:
icon: fab fa-steam
url: ''
Instagram:
icon: fab fa-instagram
url: ''
Weibo:
icon: fab fa-weibo
url: ''
Facebook:
icon: fab fa-facebook
url: ''
Twitter:
icon: fab fa-twitter
url: ''
-
# Widget name
type: toc
# Where should the widget be placed, left or right
position: right
-
# Widget name
type: links
# Where should the widget be placed, left or right
position: left
# Links to be shown in the links widget
links:
GitHub - Thesharing: http://github.com/thesharing/
-
# Widget name
type: recent_posts
# Where should the widget be placed, left or right
position: right
-
# Widget name
type: archive
# Where should the widget be placed, left or right
position: right
-
# Widget name
type: category
# Where should the widget be placed, left or right
position: right
-
# Widget name
type: tag
# Where should the widget be placed, left or right
position: right
-
# Widget name
type: tagcloud
# Where should the widget be placed, left or right
position: left
# Other plugin settings
plugins:
# Enable page animations
animejs: true
# Enable the lightGallery and Justified Gallery plugins
# http://ppoffice.github.io/hexo-theme-icarus/Plugins/General/gallery-plugin/
gallery: true
# Enable the Outdated Browser plugin
# http://outdatedbrowser.com/
outdated-browser: true
# Enable the MathJax plugin
# http://ppoffice.github.io/hexo-theme-icarus/Plugins/General/mathjax-plugin/
mathjax: true
# Show the back to top button on mobile devices
back-to-top: true
# Google Analytics plugin settings
# http://ppoffice.github.io/hexo-theme-icarus/Plugins/General/site-analytics-plugin/#Google-Analytics
google-analytics:
# Google Analytics tracking id
tracking_id:
# Baidu Analytics plugin settings
# http://ppoffice.github.io/hexo-theme-icarus/Plugins/General/site-analytics-plugin/#Baidu-Analytics
baidu-analytics:
# Baidu Analytics tracking id
tracking_id:
# Hotjar user feedback plugin
# http://ppoffice.github.io/hexo-theme-icarus/Plugins/General/site-analytics-plugin/#Hotjar
# hotjar:
# # Hotjar site id
# site_id:
# Show a loading progress bar at top of the page
progressbar: true
# Show the copy button in the highlighted code area
clipboard: true
# BuSuanZi site/page view counter
# https://busuanzi.ibruce.info
busuanzi: false
# CDN provider settings
# http://ppoffice.github.io/hexo-theme-icarus/Configuration/Theme/speed-up-your-site-with-custom-cdn/
providers:
# Name or URL of the JavaScript and/or stylesheet CDN provider
cdn: unpkg
# Name or URL of the webfont CDN provider
fontcdn: google
# Name or URL of the webfont Icon CDN provider
iconcdn: fontawesome

可配置项

  • 在配置的navbar部分中按照页面名: 页面目录的格式可以自行添加页面。
  • logo中可以设置Logo以及Logo大小。建议直接替换而非自定目录。
  • avatar中设置资料页的头像,author为作者名,author_title为作者介绍,location为地区,follow为“关注我”指向的地址。
  • highlight为语法高亮的主题
  • sidebar为资料页的位置(左、右)
  • thumbnail设置是否显示缩略图
  • favicon设置网站图标
  • social_links设置社交图标
  • comment设置评论系统,disqus后填入论坛名即可
  • plugin中设置Google站长分析等插件信息

Disqus

进入Disqus完成注册以后,点击右上角的“设置”,选择“Add Disqus To Site”,然后按照向导进行设置即可。这里要注意,Disqus URL中填写的就是上面设置文件中要填写的论坛名。

Disqus 设置

Disqus 设置

生成并预览

设置完成后,在hexo文件夹下打开命令行输入

1
2
hexo generate
hexo server

如果运行成功,那么输入localhost:4000即可打开你的个人主页。

部署你的Blog

之前我们一直在本地运行,接下来我们要把个人主页部署到GitHub上去。在每一次对设置的修改以及写文章之后都要用hexo generate命令重新生成一次。然后右击hexo文件夹,选择Git Bash Here,打开Git Bash,在Git Bash中输入

1
$ npm install hexo-deployer-git --save

等待安装完成以后,再执行:

1
$ hexo deploy

有可能会提示输入邮箱和密码,按照之前设置的输入即可。如果失败可能是网络问题,重新尝试一下。

提示成功以后可以在你的GitHub的该Repository下看到Commit成功+1,说明服务器已经接受了你的提交,一般等待3-5分钟以后,你的Blog便会被刷新。此时用你的用户名.github.io即可访问到你的Blog,怎么样,是不是很Coooool?

写文章

那么说了这么多,个人主页已经建好,接下来就是充实内容了。内容怎么充实呢?写文章咯。

在hexo文件夹下打开命令行,输入:

1
hexo new [layout] <title>

这里[layout]是指你所用的模板名称,所有模板都在hexo\scaffolds\文件夹下存放,关于模板的更多信息,请访问官方Doc,里面有很详尽的解释。

title则是文章的标题,可以为中文。 在执行完命令后,到hexo\source\_posts\文件夹下可以找到生成的Markdown文件。用MarkdownPad 2或者Visual Studio Code打开Markdown文件即可开始书写你的文章,正如我现在所做。至于Markdown文法,又是一个大坑。

对于图片,我们需要将文章中要用到的图片上传至图床然后引用外链。图床是指存放图片的云存储空间,我个人正在使用的是七牛,可以找一个适合自己的图床一直用下去。

在写完文章以后,再次hexo generate然后部署就可以了。

Markdown教程:如何快速掌握Markdown语法?

Hexo中支持的语法高亮:highlight.js - CSS classes reference

更多配置

添加站长统计和SiteMap

为了提升在搜索引擎中的搜索权重,可以通过添加站长统计以及提交SiteMap进一步优化SEO。

首先注册百度站长统计Google Analytics,获得追踪ID。对于百度站长统计来说,只需要在管理后台的新版统计代码获取页面复制追踪ID至icarus的baidu-analytics - tracking_id即可。对于Google Analytics来说,只需要在管理后台的媒体资源设置页面复制跟踪 ID至icarus的google-analytics - tracking_id即可。

然后需要生成SiteMap。在Hexo根目录下执行:

1
2
npm install hexo-generator-sitemap --save
npm install hexo-generator-baidu-sitemap --save

安装完成后在Hexo文件夹中的_config.yml中添加:

1
2
3
4
sitemap:
path: sitemap.xml
baidusitemap:
path: baidusitemap.xml

然后运行hexo -g即可生成sitemap.xml和baidusitemap.xml文件。

在生成了SiteMap文件后需要进行提交。

百度提交方式为:

访问链接提交|百度搜索资源平台并用百度账号登录,然后选择自动提交 - sitemap方式填入baidusitemap.xml的地址即可。

Google提交方式为:

访问Search Console,用Google账号登录,下载Google验证网页,将其放入hexo/source文件夹中,同时在Hexo的_config.yml文件中设置渲染排除项:

1
skip_render: [readme.md, "*.html", "*.htm"]

然后运行hexo generate并运行hexo deploy。接着在Search Console的抓取 - 站点地图部分指定sitemap.xml的地址即可。

可参考hexo干货系列:(六)hexo提交搜索引擎(百度+谷歌)

支持数学公式

目前主流的数学公式库为MathJax,对于icarus这样直接支持MathJax的主题,在其_config.yml文件的plugin部分设置mathjax: true即可。

对于不支持MathJax的主题来说,在Hexo根目录下运行:

1
npm install --save hexo-math

然后在Hexo的_config.yml文件中设置MathJax:

1
2
3
4
5
6
math:
engine: 'mathjax'
mathjax:
src: custom_mathjax_source
config:
# MATHJAX CONFIG

可参考hexo中插入数学公式

添加RSS订阅

首先在Hexo根目录下运行:

1
npm install --save hexo-generator-feed

然后在Hexo的_config.yml文件中添加配置:

1
2
3
4
5
6
7
feed:
type: atom
path: rss.xml
limit: 0
hub:
content: true
order_by: -date

接着在icarus的_config.yml文件中添加RSS的入口,可以在Navbar部分添加RSS链接:

1
2
3
4
5
6
7
navbar:
# Navigation bar menu links
menu:
首页: /
归档: /archives
关于: /about
RSS: /rss.xml

也可以在Social Links部分添加:

1
2
3
4
social_links:
RSS:
icon: fab fa-rss
url: '/rss.xml'

可参考为hexo博客添加RSS订阅功能

节点分流

如果你已经将你的个人主页挂靠在自己申请的域名上,那么你可以通过域名解析进行节点分流,国外用户访问GitHub,国内用户访问coding.net,从而解决GitHub在国内访问速度慢的问题。

首先在coding.net(现在又称腾讯云开发者平台)注册账号,并新建一个项目,然后在项目设置中开启Pages服务。然后在Hexo的_config.xml文件中设置deploy到多个仓库中:

1
2
3
4
5
deploy:
type: git
repository:
github: git@github.com:abc/abc.github.io.git
tencent: git@git.dev.tencent.com:abc/abc.git

接下来运行hexo d将页面分别部署到两个仓库中。访问coding.net / GitHub提供的原始网址,保证可以正常访问。

再在云服务商的域名解析页面进行设置,添加CNAME记录,境外线路指向abc.github.io,境内线路指向abc.coding.me。等待DNS刷新后就可以进行节点分流了。

推荐阅读 与 参考资料

文档 | Hexo

Hexo系列教程 - 2

如何搭建一个独立博客——简明Github Pages与Hexo教程

Hexo你的博客

Hexo的GitHub文档(英文)

Markdown 语法

问题

  1. Markdown Pad 2 无法正常预览怎么办?

    按照官网提示,安装Awesomium 1.6.6 SDK以及Microsoft’s DirectX End-User Runtimes (June 2010)以后可以解决。

# Hexo

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×