引
从上篇文章到现在过去了4年,时间过得真快。
这几年一直没有写东西一方面是因为比较忙没太多的时间,一方面也是因为自己太懒了。
有时候现查现用,当时没做记录,之后就懒得再记了,毕竟把零散的记录整理成一篇可读的文章还是挺麻烦的。
现在想想确实有点儿可惜。
这段时间又接触了不少新东西,觉得还是应该把博客捡起来,把学的东西记录下来。
以后有时间的话,把之前记录的东西也整理整理陆续发出来。
既然又要开始写东西,那首先我要先折腾一下我的博客站。之前整个站点全都是通过javascript在前端动态加载生成的,
虽然方便,但是文章没办法被搜索引擎收录。要解决这个问题,那就要放弃之前使用的方案。
方案选择
方案其实一早就确定了方向。我希望能够沿用之前用markdown写文章的方式,并且尽量保留之前设计的网站样式。
不需要复杂的功能简简单单的能显示文章就好。所以我直接就锁定了那些通过markdown编写文章,最终生成静态网站的方案。
这样在博客文章这块就不需要做什么改动,只要把生成的静态网站的样式调整成和之前差不多就可以了。
早在第一次建站的时候,当时就有Jekyll方案可以选择,只不过当初对web这块相关的技术还都不太了解,所以选择了javascript方案方便自己学习。
现在这些对我来说已经不是问题了,这种生成静态页面的方案正适合我。
这么多年过去了,重新在网上找了一下目前主流的静态博客框架,除了Jekyll之外又出现不少新的框架,其中Hexo比较令我满意。
Jekyll的强大与完善自不必说,毕竟持续更新维护了这么多年,用户也很多,但是Hexo有两点直接让我选择了它。
首先他是基于Nodejs实现的,比起Ruby来说我对Nodejs更熟悉一些。再有就是Hexo的模板做的我比较喜欢,其中有一个模板刚好符合我的需求。
这样我需要做的调整就少了很多。
安装
Hexo官网有很详细的中文文档。按照文档步骤一步步来就可以。
安装nodejs
我当前使用的系统的CentOS 7.8 x64,因为之前安装别的东西,已经有了nodejs,所以这步就省了,
安装步骤无非就是先添加源,然后再通过yum进行安装1
2curl --silent --location https://rpm.nodesource.com/setup_7.x | bash -
yum install -y nodejs值得一提的是在之前解决其他问题的时候发现了一个能方便切换nodejs版本的东西,一个专门用来管理nodejs版本的n模块。
安装方式很简单直接用npm安装1
npm install -g n
使用这个模块切换nodejs版本就很方便,比如像切换到8.0版本只需要输入
1
n 8.0
就可以方便的切换完成。
npm升级的方法也很简单,直接用自己升级自己…
1
npm install npm -g
就完了… 真是方便…
安装hexo
一句话搞定
1
npm install -g hexo-cli
接下来就可以创建一个测试站点了
建站
通过hexo执行初始化命令
1 | hexo init <folder> |
然后耐心等待npm自动下载依赖库就好,创建完成后站点路径下的主要目录结构是这样的:
1 | . |
- _config.yml: 站点配置文件
- package.json: nodejs项目的配置文件,主要描述了项目的依赖库和一些由npm调用的命令
- node_modules:执行npm install后下载的依赖库
- scaffolds:生成文章用的模板,在用命令创建新的文章的时候,会从这个目录下寻找对应的模板创建文件。
- source: 存放文章的地方,放在其中的markdown文件会被生成静态页面,其中_posts用来存放博客文章,_drafts用来存放草稿,这里还可以创建其他的目录,用来生成不同的页面。
- themes: 存放主题的地方,Hexo可以下载各种主题放在这里,然后通过配置文件方便的切换。
Hexo常用命令:
1 | #初始化站点 |
创建出来的md文件,在文件最上方会有以---分割的区域,这个区域叫做Front-matter,用于指定文章的信息。
1 |
|
常用的属性有:
- title:文章标题
- date:建立日期
- comments 是否开启评论
- tags 标签
- categories 分类
这种把信息直接写在文章头部的方式,比我之前单独写json文件方便了许多。
下面就该去调整站点样式了
下载和更换模板
之前在选方案的时候就确定了网站模板那就是Next, 它的版式和风格都很合适,而且功能也很完善。
安装主题的方法很简单,只需要将主题文件拷贝至站点目录的 themes 目录下, 然后修改下配置文件即可。
1 | cd <folder> |
然后修改站点配置文件_config.yml
1 | #启用NexT主题 |
NexT模板配置
NexT模板是一个功能强大而且完善的模板,它有很多可以配置的东西,一套模板中存在三种主题可以切换,
通过修改配置文件做很多定制,本身有完整的多语言支持,同时支持继承第三方服务。而且官网有详细的中文文档,
对各个功能都有详细的说明,只要按照文档一步步的进行配置就可以了。
下面说一些NexT比较有特色的东西
主题Scheme
Scheme是NexT提供的一种特性,通过切换Scheme,可以得到不同的外观,目前NexT包含三种Scheme
- Muse: 默认Scheme
- Mist: Muse的紧凑版本
- Pisces: 双栏Sheme
切换Scheme只需要修改主题配置文件中scheme配置即可
1
2
3#scheme: Muse
scheme: Mist
#scheme: Pisces依次尝试后发现Mist主题和我之前的版式最接近,所以我选择了Mist外观。
导航菜单
导航菜单需要通过主题配置文件进行设置。在配置文件中可以定义这些导航菜单的名称和链接、显示文本和对应的图标。
通过menu字段设置菜单项的链接地址
主题配置文件中已经列出了默认的菜单项,默认只有home和archives是打开的。1
2
3
4
5
6
7menu:
home: /
archives: /archives
#about: /about
#categories: /categories
tags: /tags
#commonweal: /404.html其他的菜单项除了需要这里打开,还需要手动创建页面才能够正常显示。
1
2
3
4
5
6
7
8#创建关于页面
hexo new page about
#创建标签页面
hexo new page tags
#创建分类页面
hexo new page categories执行之后在source路径下就会创建出对应的目录,并会在其中创建index.md文件。
1
2
3
4
5
6
7
8
9
10source
├── about
| └── index.md
├── tags
| └── index.md
├── categories
| └── index.md
├── _posts
| └── ...
└── _draftsabout页面只要正常的书写内容就可以了,需要注意的是tags和categories页面,
在Front-matter区域需要添加type字段1
2
3
4
5
6
7
8
9
10
11
12
13
14#source/categories/index.md
---
title: 分类
date: 2021-08-18 10:50:47
type: "categories"
#source/tags/index.md
title: 标签
date: 2021-08-18 10:49:50
type: "tags"
comments: false这两个文件只要定义好Front-matter就可以了,不需要写文章内容,生成后NexT会自动在页面内显示对应的内容。
侧栏
NexT有一个很好的侧栏,可以通过按钮展开和收起,在非文章页面显示头像,昵称和三个快捷导航可以跳到archives、categories和tags页面。
在文章页面时会显示文章目录,这个功能我很喜欢。
在站点配置文件中,可以配置侧栏的位置是在左边还是右边,以及侧栏显示的时机。通过设置可以做到在显示文章页面时主动展开侧栏,其他页面时收起侧栏。
文章迁移
由于我的文章之前就是用markdown书写的,所以迁移起来很方便,只需要把文章放到source/_posts下并且在文章最上方补上Front-matter的内容就可以了。
关于页面直接将文章内容复制到source/about/index.md中即可正常显示。
到这步,我的站点迁移从功能上已经完成了,接下来就是对界面布局和配色做一些修改,让它看起来和我之前的样式接近。
模板文件修改
NexT的模板目录结构还是很清晰的,需要关注的主要是两个路径
- layout:存放的是各种用swig模板编写的html片段,对于swig我不怎么了解,但是模板语言基本上都是这个样子,看懂逻辑做简单的修改不是什么问题。
- source/css:存放模板css样式
需要注意的是由于NexT模板是有多个Scheme的,所以在修改的时候要找到对应Scheme的文件,NexT的路径结构组织的很好,不同Scheme的文件会放在Schemes\主题名字路径下。
找到对应的文件然后修改就好了。
列一下我做的修改:
- 页面宽度调成了和老站点一致
- header调整了高度,做成了更窄的条,调整了条标题和菜单的位置和尺寸,由于侧栏有标签页和分类页的入口,所以顶栏菜单我只保留了归档和关于,简简单单。
- footer调整了一下copyright和备案号的显示样式,调整了一下power by的显示顺序,之前power by显示在copyright下面,上面宽下面窄看起来怪怪的…
- 主页显示文章增加了边框样式,看起来和老站点一样,这样每篇文章的区分就明显了很多,但是文章页没有加边框样式,新的文章页没有边框看起来更宽了一些。
- 调整了文章标题的显示样式,沿用了老站点的红色标题,在标题和文章meta区域之间增加了分割线。
- 文章meta区域原本没有标签显示,表现原本是显示在文章页最底部的,我将标签显示移到了meta区域。
经过一番修改,新站点看起来已经和老站点比较像了,而且还有了新的侧栏,页面还有了动画,比以前更高大上了。
部署
Hexo有很方便的一键部署功能,只要做好相关的配置则可以自动生成静态站点并将public目录中的文件推送到_config.yml中指定的远端仓库中,并且完全覆盖该分支下的已有内容。
操作步骤很简单
安装hexo-deployer-git
1
npm install hexo-deployer-git --save
修改
_config.yml站点配置文件1
2
3
4
5deploy:
type: git
repo: <repository url> #https://bitbucket.org/JohnSmith/johnsmith.bitbucket.io
branch: [branch]
message: [message]
配置完成后执行hexo clean && hexo deploy即可完成部署。
如果使用的是GitHub那执行完deploy就可以了,但是由于我是自建服务器,所以还需要一些额外的手动步骤。
给发布文件建立一个git仓库,配置hexo deploy将部署文件推送到该仓库中。
在远程Server端clone发布文件仓库。
给他们都配置好ssh密钥,用于免密码登录。
编写一个脚本来执行整个发布流程。
- 执行hexo deploy
- 文章编写也有自己独立的git仓库,提交改动
- ssh到server端执行git pull
这样我的自动发布脚本就完成了。
后记
关于首页文章添加阅读全文的功能,官方推荐的做法是直接在文章中合适的位置插入
<!--more-->标记,这种方式可以精准的控制每个文章在主页显示的长度。
虽然很想吐槽… 但不得不说这确实是一个好办法…NexT模板由于有多个主题,所以里面有一些没用的文件,有时间的话可以精简一下。
Hexo框架安装虽然一句命令就搞定了,但是在初始化站点工程的时候下载的依赖库又多又大..老站点工程连1M都没有,新工程竟然有61M… 光node_modules就占了50M,真恐怖…
就在我写这篇文章的时候,我又发现了另一个静态博客框架Hugo, 它是由Golang实现的静态网站生成器,特点是生成速度快,安装方便。不像Hexo需要先装nodejs再安装一大堆依赖库,
仅仅下载一个可执行文件就可以用了。下载下来试了一下,功能也满足需求,路径结构、实现思路也和hexo差不多,唯一遗憾的地方就是没找到合适的theme像NexT一样让我满意,
我想把NexT的样式移过去,可惜实在是没那么多时间了,而且刚折腾完Hexo也实在折腾不动了… 就先用Hexo吧,更换Hugo框架就当作未来的课题吧。记录一些参考资料
Hexo
NexT
5分钟搞定个人博客-hexo
hexo史上最全搭建教程
Hexo | 搭建自己的个人博客
Hexo | NexT打造一个炫酷博客
hexo+next教程(一)
Hugo
Jekyll
这两年经历了hexo到jekyll再到hugo,推荐hugo
个人博客建站中jekyll/hexo/Hugo各自的优势与区别