Setup hexo blog
Last Update:
Word Count:
Read Time:
Setup hexo blog
needs
git , nodejs, node, hexo, npm
前提准备:
linux下搭建hexo环境
1.node.js安装
从官网下载linux版本的node.js 或者直接采用wget方式下载
官网地址:http://nodejs.cn/download/
1 |
|
解压:
1 |
|
测试是否正确:
1 |
|
移动位置
1 |
|
设置软连接
1 |
|
设置npm加速
创建一个存放博客的文件夹,进入文件夹,右键选择 Git Bash Here,然后设置npm
的镜像源为淘宝镜像源,这样能加快下载插件速度
1 |
|
安装hexo
1 |
|
把hexo命令添加到全局,方式是采用软连接:
1 |
|
部署hexo博客环境
1 |
|
Hexo初始化后 ,有以下几个文件/文件夹。
scaffolds:
生成文章的一些模板source:
用来存放你的文章themes:
主题- .
gitignore
Git忽略文件夹 _config.yml:
博客的配置文件package.json
所需模块node_modules:
依赖包package-lock.json
记录了模块下载地址
安装依赖插件
1 |
|
测试运行
1 |
|
输入 localhost:4000/
如果是服务器,我的是阿里云服务器,需要配置安全组打开4000端口,这样就可以在本地访问
或者linux虚拟机,需要测试内外能否正常通信
输入ip:4000/ 即可访问hexo的初始页面
1 |
|
打开浏览器127.0.0.1:4000,就可以本地预览效果
hexo clean (清除缓存文件,可简写hexo cl)
hexo generate (生成网页,可简写hexo g)
hexo server (本地预览,可简写hexo s)
hexo deploy (部署到GitHub,可简写hexo d)
打开浏览器127.0.0.1:4000,就可以本地预览效果
部署到github中
需要 注意的是,仓库名有要求,要创建一个和你用户名相同的仓库,后面加github.io
,只有这样,将来要部署到GitHub page的时候,才会被识别,也就是[http://xxxx.github.io,其中xxx就是你注册gitHub的用户名。例如我的gitHub id为axh2018,那么我的仓库名必须为i0gan.github.io
配置Git账户和邮箱
在你的博客文件夹下右键Git Bash Here
1 |
|
生成ssh密钥
1 |
|
密钥上传到Github
1 |
|
登录GitHub网站点右上角Settings->SSH and GPG Keys
,新建一个key
,将上面的结果复制填进去就好了
测试是否成功
下面的指令的输出能看到你Github
账户名字就行了
1 |
|
克隆项目
1 |
|
部署到Github
,修改你博客文件夹根目录下的_config.yaml
文件的倒数第二行,repository
的地址改成你的GitHub
博客仓库地址
例如:
1 |
|
到这基本就完成了,剩下你所需要的工作就是把配置文件(根目录下的_config.yaml和主题文件夹下的_config_yaml)的相关信息改为你自己的信息即可。
上传至github中
此时,大部分工作已经做完了,接下来就是将hexo g
生成的静态页面上传到GitHub上
安装deploy-git 插件
1 |
|
修改_config.yaml文件最后几行
1 |
|
1 |
|
部署成功后可以通过 https://i0gan.github.io访问
创建文章
新建一篇文章时:
1 |
|
它其实默认使用的是post
这个布局,也就是在source
文件夹下的_post
里面。
Hexo
有三种默认布局:post
、page
和draft
,它们分别对应不同的路径,而您自定义的其他布局和post
相同,都将储存到source/_posts
文件夹。
而new这个命令其实是:
1 |
|
只不过这个layout
默认是post
如果你想另起一页,那么可以使用
1 |
|
系统会自动给你在source
文件夹下创建一个newpage
文件夹,以及newpage
文件夹中的index.md
,这样你访问的newpage
对应的链接就是http://i0gan.github.io/newpage
draft
是草稿的意思,也就是你如果想写文章,又不希望被看到,那么可以
1 |
|
这样会在source/_draft
中新建一个newdraft.md
文件,如果你的草稿文件写的过程中,想要预览一下,那么可以使用
1 |
|
在本地端口中开启服务预览。
如果你的草稿文件写完了,想要发表到post
中,
1 |
|
就会自动把newdraft.md
发送到post
中。
跟换主题
进入博客根目录下
1 |
|
此时主题文件夹下会多出一个matery主题。
然后再更改根目录下的_config.yml配置文件。找到themes:
,将他的值改为matery
。
此时你可以hexo clean && hexo g && hexo s
本地预览matery
主题的效果
关于matery
主题:
特性:
- 简单漂亮,文章内容美观易读
- Material Design 设计
- 响应式设计,博客在桌面端、平板、手机等设备上均能很好的展现
- 首页轮播文章及每天动态切换
Banner
图片 - 瀑布流式的博客文章列表(文章无特色图片时会有
24
张漂亮的图片代替) - 时间轴式的归档页
- 词云的标签页和雷达图的分类页
- 丰富的关于我页面(包括关于我、文章统计图、我的项目、我的技能、相册等)
- 可自定义的数据的友情链接页面
- 支持文章置顶和文章打赏
- 支持
MathJax
TOC
目录- 可设置复制文章内容时追加版权信息
- 可设置阅读文章时做密码验证
- Gitalk、Gitment、Valine 和 Disqus 评论模块(推荐使用
Gitalk
) - 集成了不蒜子统计、谷歌分析(
Google Analytics
)和文章字数统计等功能 - 支持在首页的音乐播放和视频播放功能
- 支持
emoji
表情,用markdown emoji
语法书写直接生成对应的能跳跃的表情。 - 支持 DaoVoice、Tidio 在线聊天功能。
Laylout
新建分类categories
categories
页是用来展示所有分类的页面,如果在你的博客 source
目录下还没有 categories/index.md
文件,那么你就需要新建一个,命令如下:
1 |
|
编辑你刚刚新建的页面文件 /source/categories/index.md
,至少需要以下内容:
1 |
|
新建标签 tags 页
tags
页是用来展示所有标签的页面,如果在你的博客 source
目录下还没有 tags/index.md
文件,那么你就需要新建一个,命令如下:
1 |
|
编辑你刚刚新建的页面文件 /source/tags/index.md
,至少需要以下内容:
1 |
|
新建about关于我页
about
页是用来展示关于我和我的博客信息的页面,如果在你的博客 source
目录下还没有 about/index.md
文件,那么你就需要新建一个,命令如下:
1 |
|
编辑你刚刚新建的页面文件 /source/about/index.md
,至少需要以下内容:
1 |
|
新建留言板contact页
contact
页是用来展示留言板信息的页面,如果在你的博客 source
目录下还没有 contact/index.md
文件,那么你就需要新建一个,命令如下:
1 |
|
编辑你刚刚新建的页面文件 /source/contact/index.md
,至少需要以下内容:
1 |
|
注:本留言板功能依赖于第三方评论系统,请激活你的评论系统才有效果。并且在主题的
_config.yml
文件中,第19
至21
行的“菜单”配置,取消关于留言板的注释即可
新建友情链接friends页
friends
页是用来展示友情连接信息的页面,如果在你的博客 source
目录下还没有 friends/index.md
文件,那么你就需要新建一个,命令如下:
1 |
|
编辑你刚刚新建的页面文件 /source/friends/index.md
,至少需要以下内容:
1 |
|
同时,在你的博客 source
目录下新建 _data
目录,在 _data
目录中新建 friends.json
文件,文件内容如下所示:
1 |
|
菜单导航配置
- 配置基本菜单导航的名称、路径url和图标icon.
菜单导航名称可以是中文也可以是英文(如:Index
或主页
) 2.图标icon 可以在[Font Awesome] 中查找
1 |
|
- 二级菜单配置方法
如果你需要二级菜单则可以在原基本菜单导航的基础上如下操作
1.在需要添加二级菜单的一级菜单下添加children
关键字(如:About
菜单下添加children
)
2.在children
下创建二级菜单的 名称name,路径url和图标icon.
3.注意每个二级菜单模块前要加 -
.
4.注意缩进格式
1 |
|
执行 hexo clean && hexo g
重新生成博客文件,然后就可以在文章中对应位置看到你用emoji
语法写的表情了
代码高亮
由于 Hexo 自带的代码高亮主题显示不好看,所以主题中使用到了 [hexo-prism-plugin]的 Hexo 插件来做代码高亮,安装命令如下:
1 |
|
然后,修改 Hexo 根目录下 _config.yml
文件中 highlight.enable
的值为 false
,并新增 prism
插件相关的配置,主要配置如下:
1 |
|
搜索
本主题中还使用到了 [hexo-generator-search] 的 Hexo 插件来做内容搜索,安装命令如下:
1 |
|
在 Hexo 根目录下的 _config.yml
文件中,新增以下的配置项:
1 |
|
中文链接转拼音
如果你的文章名称是中文的,那么 Hexo 默认生成的永久链接也会有中文,这样不利于 SEO
,且 gitment
评论对中文链接也不支持。我们可以用 [hexo-permalink-pinyin]Hexo 插件使在生成文章时生成中文拼音的永久链接。
安装命令如下:
1 |
|
在 Hexo 根目录下的 _config.yml
文件中,新增以下的配置项:
1 |
|
注:除了此插件外,[hexo-abbrlink] 插件也可以生成非中文的链接
文章字数统计插件
如果你想要在文章中显示文章字数、阅读时长信息,可以安装 [hexo-wordcount]插件
安装命令如下:
1 |
|
然后只需在本主题下的 _config.yml
文件中,将各个文章字数相关的配置激活即可:
1 |
|
添加emoji表情支持
本主题新增了对emoji
表情的支持,使用到了 [hexo-filter-github-emojis]的 Hexo 插件来支持 emoji
表情的生成,把对应的markdown emoji
语法(::
,例如::smile:
)转变成会跳跃的emoji
表情,安装命令如下:
1 |
|
在 Hexo 根目录下的 _config.yml
文件中,新增以下的配置项:
1 |
|
添加 RSS 订阅支持
本主题中还使用到了 hexo-generator-feed 的 Hexo 插件来做 RSS
,安装命令如下:
1 |
|
在 Hexo 根目录下的 _config.yml
文件中,新增以下的配置项:
1 |
|
执行 hexo clean && hexo g
重新生成博客文件,然后在 public
文件夹中即可看到 atom.xml
文件,说明你已经安装成功了
添加 DaoVoice 在线聊天功能
前往 DaoVoice 官网注册并且获取 app_id
,并将 app_id
填入主题的 _config.yml
文件中。
添加 Tidio 在线聊天功能
前往 Tidio 官网注册并且获取 Public Key
,并将 Public Key
填入主题的 _config.yml
文件中。
修改页脚
页脚信息可能需要做定制化修改,而且它不便于做成配置信息,所以可能需要你自己去再修改和加工。修改的地方在主题文件的 /layout/_partial/footer.ejs
文件中,包括站点、使用的主题、访问量等。
修改社交链接
在主题的 _config.yml
文件中,默认支持 QQ
、GitHub
和邮箱等的配置,你可以在主题文件的 /layout/_partial/social-link.ejs
文件中,新增、修改你需要的社交链接地址,增加链接可参考如下代码:
1 |
|
其中,社交图标(如:fa-github
)你可以在 Font Awesome 中搜索找到。以下是常用社交图标的标识,供你参考:
- Facebook:
fab fa-facebook
- Twitter:
fab fa-twitter
- Google-plus:
fab fa-google-plus
- Linkedin:
fab fa-linkedin
- Tumblr:
fab fa-tumblr
- Medium:
fab fa-medium
- Slack:
fab fa-slack
- Sina Weibo:
fab fa-weibo
- Wechat:
fab fa-weixin
- QQ:
fab fa-qq
- Zhihu:
fab fa-zhihu
注意: 本主题中使用的
Font Awesome
版本为5.11.0
修改打赏的二维码图片
在主题文件的 source/medias/reward
文件中,你可以替换成你的的微信和支付宝的打赏二维码图片。
文章加密
主题 config.yml
配置文件中激活 verifyPassword.enable: true
在你所需要加密的文章中的 Front-Matter
中添加 password
属性,password
的值为你的原密码经过 SHA256 加密后的值。访问文章就需要输入密码了,输入的为原密码。
配置音乐播放器
要支持音乐播放,在主题的 _config.yml
配置文件中激活music配置即可:
1 |
|
server
可选网netease
(网易云音乐),tencent
(QQ音乐),kugou
(酷狗音乐),xiami
(虾米音乐),
baidu
(百度音乐)。
type
可选song
(歌曲),playlist
(歌单),album
(专辑),search
(搜索关键字),artist
(歌手)
id
获取方法:网页打开例如网易云音乐,点击一个推荐的歌单,地址栏会有一个id
,id
即为这串数字。其中search的id为搜索的关键字
文章 Front-matter 介绍
Front-matter 选项详解
Front-matter
选项中的所有内容均为非必填的。但我仍然建议至少填写 title
和 date
的值。
配置选项 | 默认值 | 描述 |
---|---|---|
title | Markdown 的文件标题 |
文章标题,强烈建议填写此选项 |
date | 文件创建时的日期时间 | 发布时间,强烈建议填写此选项,且最好保证全局唯一 |
author | 根 _config.yml 中的 author |
文章作者 |
img | featureImages 中的某个值 |
文章特征图,推荐使用图床(腾讯云、七牛云、又拍云等)来做图片的路径.如: http://xxx.com/xxx.jpg |
top | true |
推荐文章(文章是否置顶),如果 top 值为 true ,则会作为首页推荐文章 |
cover | false |
v1.0.2 版本新增,表示该文章是否需要加入到首页轮播封面中 |
coverImg | 无 | v1.0.2 版本新增,表示该文章在首页轮播封面需要显示的图片路径,如果没有,则默认使用文章的特色图片 |
password | 无 | 文章阅读密码,如果要对文章设置阅读验证密码的话,就可以设置 password 的值,该值必须是用 SHA256 加密后的密码,防止被他人识破。前提是在主题的 config.yml 中激活了 verifyPassword 选项 |
toc | true |
是否开启 TOC,可以针对某篇文章单独关闭 TOC 的功能。前提是在主题的 config.yml 中激活了 toc 选项 |
mathjax | false |
是否开启数学公式支持 ,本文章是否开启 mathjax ,且需要在主题的 _config.yml 文件中也需要开启才行 |
summary | 无 | 文章摘要,自定义的文章摘要内容,如果这个属性有值,文章卡片摘要就显示这段文字,否则程序会自动截取文章的部分内容作为摘要 |
categories | 无 | 文章分类,本主题的分类表示宏观上大的分类,只建议一篇文章一个分类 |
tags | 无 | 文章标签,一篇文章可以多个标签 |
keywords | 文章标题 | 文章关键字,SEO 时需要 |
reprintPolicy | cc_by | 文章转载规则, 可以是 cc_by, cc_by_nd, cc_by_sa, cc_by_nc, cc_by_nc_nd, cc_by_nc_sa, cc0, noreprint 或 pay 中的一个 |
注意:
- 如果
img
属性不填写的话,文章特色图会根据文章标题的hashcode
的值取余,然后选取主题中对应的特色图片,从而达到让所有文章都的特色图各有特色。date
的值尽量保证每篇文章是唯一的,因为本主题中Gitalk
和Gitment
识别id
是通过date
的值来作为唯一标识的。- 如果要对文章设置阅读验证密码的功能,不仅要在 Front-matter 中设置采用了 SHA256 加密的 password 的值,还需要在主题的
_config.yml
中激活了配置。有些在线的 SHA256 加密的地址,可供你使用:开源中国在线工具、chahuo、站长工具。- 您可以在文章md文件的 front-matter 中指定 reprintPolicy 来给单个文章配置转载规则
以下为文章的 Front-matter
示例
最简示例
1 |
|
最全示例
1 |
|
在本主题的 _config.yml
中可以修改部分自定义信息,有以下几个部分:
- 菜单
- 我的梦想
- 首页的音乐播放器和视频播放器配置
- 是否显示推荐文章名称和按钮配置
favicon
和Logo
- 个人信息
- TOC 目录
- 文章打赏信息
- 复制文章内容时追加版权信息
- MathJax
- 文章字数统计、阅读时长
- 点击页面的’爱心’效果
- 我的项目
- 我的技能
- 我的相册
Gitalk
、Gitment
、Valine
和disqus
评论配置- 不蒜子统计和谷歌分析(
Google Analytics
) - 默认特色图的集合。当文章没有设置特色图时,本主题会根据文章标题的
hashcode
值取余,来选择展示对应的特色图
修改主题颜色
主题会有一层变换的颜色笼罩在背景图上,在主题文件的 /source/css/matery.css
文件中,搜索 .bg-color
来修改背景颜色:
1 |
|
如果不需要的话,直接将上面三个注释掉即可。
修改 banner 图和文章特色图
你可以直接在 /source/medias/banner
文件夹中更换你喜欢的 banner
图片,主题代码中是每天切换一张,只需 7
张即可。如果你会 JavaScript
代码,可以修改成你自己喜欢切换逻辑,如:随机切换等,banner
切换的代码位置在 /layout/_partial/bg-cover-content.ejs
文件的 `` 代码中:
1 |
|
如想每小时切换,将getDay()
改为getHours()
即可,但是需要增加图片的数量为24,且在_config.yml中做修改相应。
在 /source/medias/featureimages
文件夹中默认有 24 张特色图片,你可以再增加或者减少,并需要在 _config.yml
做同步修改
添加文章评论插件
主题自带gittalk
,gitment
,valine
等评论插件,只需要去相应的官网注册,然后将相应的配置填入到主题的_config.yml
中相应位置即可。
注:gitalk
评论模块对文字表格有影响,并且经常加载不出来
优化
配置CDN
cdn加速,只需要将主题文件夹下的_config.yml
最后遗一行配置即可。后面填https://cdn.jsdelivr.net/gh/
加上你的github账户名和你的博客地址,例如我的:
1 |
|
在根目录配置文件 _config.yml
末尾加入以下配置:
1 |
|
新建404页面
主题并没有404页面,所以我们来添加一个,source
目录下新建一个404.md
,内容:
1 |
|
接着在/matery/layout/新建一个404.ejs文件,内容:
1 |
|
文章生成永久链接
主题默认的文章链接配置
1 |
|
这种生成的链接地址很长,我们可以修改文章生成链接的格式。
首先再根目录下执行下面的命令:
1 |
|
在博客文件夹根目录下_config.yml
添加如下配置
1 |
|
再将站点配置文件的permalink
的值修改为:
1 |
|
生成文章的链接格式格式如下(官方样例):
1 |
|
生成完后,原md文件的Front-matter 内会增加abbrlink
字段,值为生成的ID 。这个字段确保了在我们修改了Front-matter
内的博客标题title或创建日期date字段之后而不会改变链接地址
图片懒加载
懒加载
一般是当图片滚动进可视窗口内才加载图片,可视窗口之外的图片则不加载
本主题图片进行懒加载,这样做效果就是 html
、css
、js
加载之后,图片再加载。既保证了网页的打开速度,也不会因图片的庞大体积而拖累了整个页面的加载。
先安装插件:
1 |
|
然后到博客根目录下_config.yml
中加入以下字段:
1 |
|
其中gif图的位置应该放在source/images/
下
设置文字模板
Hexo
的页面是包括一个md
文件和ejs
文件结合而成的,md
文件中的内容是页面配置,基本信息,和显示的内容。而ejs
文件就是js
逻辑代码了。
我们在scaffolds/post.md
中设置文章的默认模板,这样以后创建文章的时候,这些信息就默认添加上了,不同文章你也可以修改这些信息。上面Front-matter已经介绍过了
1 |
|
图片添加水印
为了防止别人抄袭你文章,直接用你文字的图片,可以把所有的图片都加上水印。在博客根目录下新建一个watermark.py
,代码如下:
1 |
|
字体也放根目录下,自己找字体。然后每次写完一篇文章可以运行python3 watermark.py postname
添加水印,如果第一次运行要给所有文章添加水印,可以运行python3 watermark.py all
这个代码的逻辑就是从文章目录下拿到图片,添加水印。这个前提是要文章的图片放在source/_posts/下,所以如果在文章中直接引用了其他地方的图片链接,那么这个脚本不会去给那个图片加水印了
动态标签栏
在theme/matery/layout/layout.ejs
下添加如下代码:
1 |
|
修改导航栏颜色以及透明效果
themes/matery/source/css/matery.css
文件中,有一个.bg-color
属性,修改其属性值即可,代码如下:
1 |
|
外链跳转插件
跳转外链相关插件。自动为所有html
文件中外链的a
标签生成对应的属性。 比如 设置 target='_blank'
, rel='external nofollow noopener noreferrer'
告诉搜索引擎这是外部链接,不要将该链接计入权重。 同时自动生成外链跳转页面,默认在根目录下go.html
;
安装插件:
1 |
|
配置插件:
在Hexo
根目录的_config.yml
文件中添加如下配置。
1 |
|
- enable - 是否开启
hexo_external_link
插件 - 默认 false - enable_base64_encode - 是否对跳转
url
使用base64编码
- 默认 fasle - url_param_name - url参数名,在跳转到外链传递给
html_file_name
的参数名 - 默认 ‘u’ - html_file_name - 跳转到外链的页面文件路径 - 默认 ‘go.html’
- target_blank - 是否为外链的
a
标签添加target='_blank'
- 默认 true - link_rel - 设置外链的
a
标签的rel属性 - 默认 ‘external nofollow noopener noreferrer’ - domain - 如果开启了防盗链,除了 localhost 和 domain 之外调用会跳到主页,同时也是判断链接是否为外链的依据 - 默认 window.location.host
- safety_chain - go.html 为了防止外链盗用 对域名进行的判断 - 默认 false
添加鼠标点击烟花爆炸效果
themes/matery/source/js
目录下新建fireworks.js
文件,打开将内容复制粘贴到fireworks.js
。
然后在themes/matery/layout/layout.ejs
文件内添加以下内容:
1 |
|
添加樱花飘落效果
在themes/matery/source/js
目录下新建sakura.js
文件,打开
将内容复制粘贴到sakura.js
。
然后在themes/matery/layout/layout.ejs
文件内添加以下内容:
1 |
|
添加鼠标彩虹星星掉落跟随效果
在themes/matery/source/js
目录下新建cursor.js
文件,打开
将内容复制粘贴到cursor.js
。
然后在themes/matery/layout/layout.ejs
文件内添加以下内容:
1 |
|
添加雪花飘落效果
在themes/matery/source/js
目录下新建cursor.js
文件,打开https://github.com/axh2018/script/blob/master/snow.js
将内容复制粘贴到cursor.js
。
然后在themes/matery/layout/layout.ejs
文件内添加以下内容:
1 |
|
添加鼠标点击文字特效
主题文件下的/source/js/
下新建click_show_text.js
,以下代码添到js
中:
1 |
|
增加建站时间
只需将主题的_config.yml
中的time
设置为true
即可:
1 |
|
添加博客天气插件
去中国天气网https://cj.weather.com.cn/plugin/pc可以获取一段定制的天气代码,将这段代码添加到
/themes/matery/layout/layout.ejs
即可,例如:
1 |
|
添加live2d模型
安装插件:
1 |
|
安装模型:
1 |
|
配置:
1 |
|
其中模型你可以更改,想了解更多,请移步官网https://github.com/EYHN/hexo-helper-live2d/blob/master/README.zh-CN.md
背景动态彩带
只需将matery/_config.yml
中canvas_nest
设置为true
即可:
1 |
|
背景动态线条
只需将matery/_config.yml
中ribbon_dynamic
设置为true
即可:
1 |
|
注:加载这些样式非常耗资源
添加反爬虫协议
robots是网站跟爬虫间的协议,用简单直接的txt格式文本方式告诉对应的爬虫被允许的权限,也就是说robots.txt是搜索引擎中访问网站的时候要查看的第一个文件。当一个搜索蜘蛛访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。
我们在hexo 根目录下的 public
目录下新建一个robots.txt
文件,内容如下:
1 |
|
你可自定义哪些内容可以被爬取,哪些内容不能
参考: