1、前言
大二的时候看见学长搭建的个人博客,感觉好高大上的样子,想着自己啥时候不再是哪个只会喊:哇、牛批、666、厉害厉害的傻逼选手,然后浪啊浪,突然有一天,CSP考试上考到了一个Markdown转HTML的大模拟题:现场狂写2小时,黑箱测试最后只得20分,从此心理对MD留下了挥之不去的阴影,然后就没有了然后,此事不来了了之。大二的时候在CSDN上写过,但是感觉CSDN的广告是越来也严重了,上面,下面,左面,右面等等四面八方全是各种广告,于是乎,时隔三年,趁着中秋没钱出去浪啊,舍友也回家了,丧尸宿舍也搭建一个简单的个人博客吧,此文简单记录一下搭建过程。
本文使用的是 Github pages + Hexo + Next 主题。
2、基础环境搭建
2.1 注册GitHub账号并创建IO仓库
GitHub作为全球最大的同性交友网站,在程序员心中的地位不亚与PornHub在宅男心中的地位,有过之而无不及啊,登录官网填写相关信息进行账号注册,然后创建一个和注册名相同的仓库(Repository),注意一定要是下图这种格式[username.github.io],因为github page每个账号只有一个。
现在,已经可以通过https://wangjibao.github.io/来访问了,后面还会在这上面做更多的设置。
2.2 安装node.js
Hexo是基于Node.js的,其实Node.js就是一个JavaScript的运行环境,用来生成我们所写的静态博客页面,去官网下载安装即可,并且会自动加入系统环境变量中。
其中的 npm(Node Package Manager) 是随 node.js 一起安装的包管理工具,能解决NodeJS代码部署上的很多问题。常用命令如下:
1 | npm install npm -g #安装新版本的npm |
2.3 安装Git并配置SSH Key
Git是一个流行的版本控制工具,使用它和GitHub进行交互。前往Git官网下载安装到本地即可。 因为你要提交代码到GitHub必须得拥有权限,但是直接使用用户名+密码不安全,所以使用 SSH Key来解决本地和服务器的连接问题。
在Git Bash中执行: cd ~/.ssh
,检查本机存在的ssh秘钥。如果提示: No such file or directory
说明你是第一次使用git。
ssh-keygen -t rsa -C "17600****26@163.com"
按照提示操作,最终会在用户目录下生成一个id_rsa.pub
文件,这就是自己的公钥。复制里面的字符串到自己的GitHub中,settings >> SSH and GPG keys >> New SSH Key
。
执行如下命令,测试是否添加成功:
`ssh -T git@github.com`
同时在git bash中进行如下配置:
1 | git config --global user.name "wangjibao" #github用户名 |
2.4 安装sublime
Sublime Text3,很方便快捷的代码编辑器,后期的很多文件修改编辑操作要借助此工具进行。官网下载安装的软件本身是付费的,但我大天朝能用付费的软件,呵,开玩笑!百度一发好多激活码直接用。
2.5 安装hexo
在某个目录下建一个文件夹,此文件夹作为hexo的工作区。在该文件夹中 Git Bash Here
,执行如下命令安装hexo:
npm install -g hexo
安装完成后,hexo -v
查看安装版本及是否安装成功。执行 hexo init
,对此工作文件夹进行初始化(特别注意,此文件夹初始必须是空的,否则会报错)。完成后,将生成如下目录结构的文件树
其中_config.yml
是全局配置文件,_posts
是放置博客文章的文件夹,具体各文件功能查看这里。此时,我们执行 hexo server
来启动Hexo服务,在浏览器中输入 http://localhost:4000
查看初始效果。
常用的 Hexo命令如下:
1 | hexo -v #查看版本信息 |
2.6 域名购买及解析
前往阿里云购买属于自己的域名,当然,不买也是可以的,直接使用 wangjibao.github.io
也能访问博客,只是为了博客更加个性化一点,遂购买一个属于自己的域名。购买完成后,前往域名解析页面设置域名解析,如下图:
其中第二行的IP地址是在cmd
命令框中通过 ping wangjibao.github.io
命令得到。同时,在github pages的设置页面,填写购买的域名。
最后,在source
文件夹中新建名为 CNAME
的文件,在文件中填入www.wangjibao.com.cn
;执行 hexo g -d
命令,此时,即可通过在浏览器中的地址栏输入 www.wangjibao.com.cn
进行博客的浏览。
2.7 本地与Github连接
之前已经配置好了SSH Key,此时只要修改一下_config.yml
文件即可轻松实现本地博文发布。修改_config.yml
如下:
其中repository
的值在下图中获得,注意,此处每个字段的冒号后面都跟有一个空格,否则会出错。
在发布博文前,执行如下命令安装必要的插件:
npm install hexo-deployer-git --save
2.8 配置NexT主题
NexT的官方说明文档,将各基础配置讲述得非常清楚,按照官方文档一步一步配置即可。包括:
安装NexT
- 下载主题
- 启用主题
- 验证主题
主题设定
- 选择Scheme(此处选用Gemini主题)
- 设置语言(zh-Hans)
- 设置菜单
- 设置侧栏
- 设置头像
- 设置作者昵称
- 设置站点描述
设置RSS(
hexo install hexo-generator-feed --save
)添加标签页面
添加分类页面
设置字体
设置代码高亮主题(
night eighties
)侧边栏社交链接
开启打赏功能
设置友情链接
腾讯公益404页面
此处官网提供的是
http
模式的404页面,在https
模式下蹦出的404页面会出现排版问题,如firefox
会报Mixed Active Content
警告,如图:两种解决方案,一种是关掉浏览器对此站点的保护功能,但却不是很实用,因为你不能要求所有人解除对你站点的保护。
第二种解决方案是,将官网提供的404页面的代码做一下修改,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8;"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<meta name="robots" content="all" />
<meta name="robots" content="index,follow"/>
</head>
<body>
<script type="text/javascript" src="//qzonestyle.gtimg.cn/qzone/hybrid/app/404/search_children.js" homePageName="返回主页" homePageUrl="https://ymwangzhuan.com">
</script>
</body>
</html>可以看到,改版后的404页面的
src
字段并没有指明使用的是http
协议还是https
协议,会自动根据你的站点做适配,问题完美解决[注意将404.html放到站点根目录的source
文件夹中]。站点建立时间
订阅微信公众号
设置背景动画
3、NexT主题个性化设计
3.1 设置网站图标 Favicon
在网上找一张32*32大小的 ico
图标,当然,不是 ico
格式也是可以的,如 png
等。将图标放到目录 \thems\next\source\imges
文件夹中,然后修改主题配置文件即可,操作如下图:
作为抓包组中的一员,搭建的博客必须上 wireshark
图标啊,皮一波~~,效果如下图:
3.2 修改文章底部 #
号标签样式
在 \themes\next\layout\_macro\post.swing
文件中搜索 rel="tag">#
,将 #
号替换成 <i class="fa fa-tag"></i>
,如下图:
3.3 文章末尾添加 本文结束
标记
添加本文结束
标记的步骤,其实也是主题编写的基本步骤,主要分3步:
添加模板文件
在目录
themes\next\layout\_macro
中新建名为passage-end-tag.swig
的文件,并添加如下代码:1
2
3
4
5
6
7<div>
{% if not is_index %}
<div style="text-align:center;color: #ccc;font-size:14px;">
-------------本文结束<i class="fa fa-paw"></i>感谢您的阅读------------
</div>
{% endif %}
</div>导入模板文件
在文件themes\next\layout\_macro\post.swig
中找到如下代码块(第332行):1
2
3{#####################}
{### END POST BODY ###}
{#####################}在此代码块的上面添加如下代码:
1
2
3
4
5<div>
{% if not is_index %}
{% include 'passage-end-tag.swig' %}
{% endif %}
</div>配置
在主题配置文件中添加
passage-end-tag
字段,并设置为true
:1
2
3# 文章末尾添加“本文结束”标记
passage_end_tag:
enabled: true
最终效果为:
3.4 添加顶部加载条
在next主题的配置文件 _config.yml
中搜索关键词 pace
,设置为 true
,还可以设置加载条的样式,修改如下图所示:
3.5 隐藏网站底部 由hexo强力驱动
方案一:在目录 themes\next\layout\_partials\
中打开 footer.swig
文件,将对应网站底部的描述部分给注释掉即可,html
的注释符 <!-- **** -->
:
方案二:在主题配置文件中,配置 powred
字段和theme
字段,将其用 #
号注释掉:
两者都能实现下图所示的效果:
3.6 博文置顶
使用 top
属性, top
值越大,排序就越靠前,如果文章不设置 top
属性,就按照博文的推送时间排序。如果使用的next主题在5.1之后,会自带此功能,修改站点配置文件中的 order_by
字段即可;如果使用的是更老的版本,修改node_modules\hexo-generator-index\lib\generator.js
中的内容即可,在var posts =
那一行的后面添加如下博文排序函数:
1 | posts.data = posts.data.sort(function(a, b) { |
这里我们使用第二种方案,每次写文章的时候,都要手动添加 top
属性,很麻烦,这里,我们可以修改 scaffolds\post.md
文件,修改后的内容如下,其实相当于创建了一个博文的初始模板。
到此,如果文章设置了 top
属性并有值得话,根据 top
值排序,没有的话,按照博文的推送时间排序。
3.7 添加分享
NexT主题支持多种方式的分享,包括 Baidu Share
、duoshuo_share
、needMoreShare2
、jiathis
等等,这里我们使用needMoreShare2
,在主题配置文件中修改对应的字段如下图所示,资深抓包民工表示对这里的很多软件好熟悉~,怕是要被打~
修改后,执行 hexo g -d
指令,效果如图:
3.8 显示当前页面的浏览进度
在主题配置文件中 ctrl+f
搜索 scrollpercent
,将 false
改为 true
。如果想把 top
按钮放在侧边栏,可以把 b2t
字段设置为true
,实现效果如图所示:
3.9 首页博文自动卷起
在首页显示一篇文章的部分内容,并提供一个链接跳转到全文页面是一个常见的需求。NexT 提供三种方式来控制文章在首页的显示方式。也就是说,在首页显示文章的摘录并显示 阅读全文 按钮,可以通过以下方法:
在文章中使用
<!-- more -->
手动进行截断,Hexo 提供的方式在文章的 front-matter中添加
description
,并提供文章摘录自动形成摘要,在主题配置文件中将
auto_excerpt
设置成true
,并自行设定自动截取长度(默认150)
这里,我们使用第一种方式,实现效果如下图:
3.10 实现鼠标点击出现桃心
将 love.js文件添加到主题目录的\source\js\src
下,找到 \themes\next\layout\_layout.swig
文件, 在文件的后面, </body>
标签之前 添加以下代码:
1 | <!-- 页面点击小红心 --> |
实现效果为每次鼠标点击页面的时候,会出现一个彩色的桃心,如下图所示:
3.11 添加站内搜索
NexT主题支持多种搜索插件,我们这里使用 hexo-generator-searchdb
插件,原理是在本地生成一个search.xml
文件,搜索的时候从这个文件中根据关键字检索出相应的链接。首先执行 npm install hexo-generatordb --save
指令进行插件的安装,之后将下面的代码复制进站点配置文件的末尾。
1 | search: |
然后将主题配置文件中的对应字段设置为 true
即可。
最终,会在网站的侧栏出现搜索
选项,搜索效果如下图所示:
3.12 生成站点地图
站点地图是一种文件,可以通过该文件列出网站上的网页,从而可以将个人网站内容的组织架构告知 baidu
、google
等搜索引擎。搜索引擎的网页爬取工具会读取此文件,以便更加高效的爬取个人网站。
1、先安装对应的插件,以下两个插件对应的是 baidu
和 google
1 | npm install hexo-generator-sitemap --save |
2、在站点配置文件中添加如下代码:
1 | # auto create sitemap |
运行指令 hexo g -d
,在public目录下会发现生成了 sitemap.xml
和 baidusitemap.xml
两个文件,这表示成功了。接下来就是如何操作让百度、谷歌收录我们的博客了。
3、站点收录,由于并没有想被搜索引擎检索的需求,私下里自己先玩一玩,所以,此项,To Do….
3.13 实现统计功能
在Hexo的根目录下执行 npm install hexo-wordcount --save
指令,进行字数统计模块的安装,然后修改主题配置文件,将对应的开关打开,即 false
改为true
。
使用 sublime
打开文件 \themes\next\layout\_macro\post.swig
,ctrl+f
搜索如下代码字段,并在后面添加字
、分钟
。
1 | <span title="{{ __('post.wordcount') }}"> |
最终的效果图,如下:
3.14 上传本地图片
在站点配置文件中将 post_asset_folder
字段设置为 true
,同时安装对应的插件 npm install hexo-asset-image --save
。以后运行hexo n "xxxx"
来生成md博文时,/source/_posts
文件夹内除了xxxx.md
文件还有一个同名的文件夹,该文件夹用于存储本地图片。在xxxx.md
中想引入图片时,先把图片复制到xxxx这个文件夹中,然后只需要在xxxx.md中按照markdown的格式引入图片:
3.15 添加近期文章模块
将下面的代码贴在 next/layout/_macro/sidebar.swig
中的 if theme.links
对应的 endif
后面,就ok了,是不是很简单。
1 | {% if theme.recent_posts %} |
为了配置方便,在主题的 _config.yml
中添加了几个变量,如下:
1 | recent_posts_title: 近期文章 |
3.16 右上角加fork me on github
点击这里或者这里挑选你喜欢的样式,修改成你的GitHub链接,复制到themes/next/layout/_layout.swig
文件中的以下位置:
1 | <div class="{{ container_class }} {% block page_class %}{% endblock %}"> |
3.17 添加 latex 数学公式支持
在 next
主题中,已经自动支持 mathjax
了,只需要在配置文件中将开关打开即可,不用像很多博客说的换markdown
渲染引擎,更改markdown
和latex
的语法冲突,安装mathjax
插件等等那么麻烦。
在主题配置文件中搜索 mathjax
,将开关设置为 true
,其中的 per_page
字段如果设置为 true
,那么只有主页和文章头部带有mathjax: true
字段的博文才会加载 mathjax
引擎。这里注意下,要更改默认的 cdn
地址,之前的地址已经停用了。
详见:https://github.com/iissnan/hexo-theme-next/pull/1712
https://github.com/iissnan/hexo-theme-next/pull/887
3.18 启用点击下载功能
在网站的source
目录下,新建download
目录,和_posts、About、tags、categories
等目录并列。
然后,将需要分享的文件或者图片统一放到该download
下。在写文章时,通过诸如[点击下载](/download/xx.exe)
这样的链接,直接写入。
效果图:
4、集成第三方服务
4.1 Valine评论系统
针对评论系统来讲的话,多说和网易云已经倒了,畅言需要备案,Disqus,Hypercomments和LiveRe等都是国外的,不仅加载速度慢还容易被墙,找来找去,决定使用valine(2017年8月诞生的一款基于LeanCloud
的极简风评论系统)。NexT
主题本身就已经集成了valine,所以设置起来也比较简单。
4.1.1 注册LeanCloud,获取appid
和appkey
在官网注册账号并创建应用
,应用选择开发版
即可,毕竟穷孩子,免费的好啊。应用名字随便起,创建完成后,在 设置 >> 应用key
中可以看到此应用的appid和appkey。
4.1.2 配置web安全域名
为了数据安全,在 设置 >> 安全中心
中设置web安全域名,如下图:
4.1.3 创建Class
对象
在 存储 >> 数据
栏中,创建两个Class
,一个名为Counter
,用于记录统计每篇博文的阅读次数;另一名为Comment
用于记录存储每篇博文的评论。注意,此处两个Class
的名字是固定的,不能更改。
可以手动修改 Counter
表中time
字段的值,也就是修改了博文的阅读次数,美滋滋~~~
4.1.4 修改主题配置文件
搜索 leancloud
字段,将 enable
字段设置为 true
,app_id
和app_key
填写之前获得的值,此时,就可以在页面中启用博文阅读次数统计功能。
搜索valine
字段,将 enable
字段设置为 true
,app_id
和app_key
填写之前获得的值,此时,就可以在页面中启用博文评论及回复功能。其中的notify
字段代表有评论时邮件提醒,verify
字段代表开启验证码,avatar
代表评论者的头像,placeholder
字段代表初始评论框中显示的文字,等等。。。
4.1.5 最终效果展示
后台数据管理:
阅读次数统计:
底部评论区:
4.1.6 邮件提醒功能配置
至此,已经能够使用评论系统了,但它虽然支持邮件提醒(基于密码重置提醒邮件),功能却很弱,无法提示到具体文章,也无法给评论者进行有效的回复通知,通常别人留完言,怎么还会再来你的博客看你是否回复了呢?所以,这里我们引用GitHub上某位大佬的配置,它满足了:
- 完善的邮件通知,自定义 SMTP 发件频率和内容不再受限
- 基于 Akismet 的垃圾评论自动标注和过滤
- 评论管理,避免直接操作数据库
- ……
邮件效果如下图所示:
管理界面如下图:
4.2 卜算子统计
在主题配置文件
中搜索 busuanzi_count
,将开关打开,并做如下图修改,即可统计站点的 UV
和PV
:
实现效果如下图:
第一行的 Site words total count
很是刺眼,改!之前的leancloud留下来的历史问题。在 \themes\next\layout\_partials\footer.swig
中第19行做如下修改:
1 | #}{{ totalcount(site, '0,0.0a') }} 字{# |
在\themes\next\language\zh-Hans.yml
文件中,修改第36行,如下:
1 | #修改前: |
5、To DO List
侧边栏添加日历
点击查看教程链接
SEO优化
CND优化
静态资源压缩(github pages提供的免费空间有限)
添加动态萌宠
先安装必要的模块
1
2npm install --save hexo-helper-live2d
npm install live2d-widget-model-hijiki #此行不同的萌宠,对应不同的模块在站点配置文件的末尾添加如下代码段:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17# live2d
live2d:
enable: true
scriptFrom: local
pluginRootPath: live2dw/
pluginJsPath: lib/
pluginModelPath: assets/
model:
use: live2d-widget-model-hijiki/
display:
position: left
width: 80
height: 300
hOffset: 20 #水平相对位移
vOffset: -200 #垂直相对位移
mobile:
show: true代码区添加
点击复制
按钮隐私博文加密访问
点击查看教程链接
设置背景及透明度
打开
\themes\next\source\css\_custom\custom.styl
文件,添加如下代码即可:1
2
3
4
5
6
7
8
9
10
11body {
background:url(https://source.unsplash.com/random/1920x1080);
background-repeat: repeat;
background-attachment:fixed;
background-position:50% 50%;
}
//改变背景色和透明度
.main-inner {
background: #fff;
opacity: 0.9;
}添加网易云音乐
在网易云音乐网页版,找到自己想要的歌曲,点击生成播放外链,生成如下所示的代码,将
iframe
模块放到主题中layout/_macro/sidebar.swig
文件的适当位置即可。1
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=298 height=52 src="//music.163.com/outchain/player?type=2&id=570240588&auto=0&height=32"></iframe>
个性化字体设置–设置代码块字体大小
NexT 从 5.0.1 版本开始提供一个 字体定制特性,编辑主题下的
source/css/_variables/custom.styl
文件,新增如下代码:1
2// 代码字体的大小
$code-font-size = 15px文章顶部添加最近更新时间
在
主题设置文件
中搜索update
,将其设置为true
即可。个性设置文章间分割线
取消博文段落自动编号
将主题配置文件中的
toc :number
字段设置为false
安装PDF插件
执行命令
npm install hexo-pdf --save
,之后编辑博客的时候即可使用 标签:引用本地的pdf文件。
。。。。。。
6、bug解决
6.1 busuanzi统计失效问题
前往 http://busuanzi.ibruce.info/ 卜算子官网,可以发现有提示说 因七牛强制过期『dn-lbstatics.qbox.me』域名,与客服沟通无果,只能更换域名到『busuanzi.ibruce.info』!
。所以接下来的bug修复工作就十分简单了。在主题文件 themes/next/layout/_third-party/analytics/busuanzi-counter.swig
文件中,将 <script>
标签中的 src
字段改为:
src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"
即可解决。