利用Hexo搭建个人博客,并添加多语言功能

2023年11月11日更新:由于本站全面重构迁移至Next主题,本文内容已不再适用,正式归档。

前言

几年前在本科二年级时候,笔者曾经在学校的一个计算机应用比赛中,玩过Hexo建站作为项目的前端,不过当时用的是网上搜到的大佬的一键部署脚本,对于脚本中具体做了些什么操作,本人实际并不甚了解,只记得下载了许多不明所以的文件和创建了许多不明所以的目录。近期本学渣突然想怀怀旧,且正好想折腾一个写随笔的个人博客,便重头又学习了一下,谨以此文作为这段搭建的一个记录。


Hexo 简介

这一部分与文章内容其实并无关系,因为本文核心目的是用作日志性质,然而作为文科生,还是要象征性的做一下起承转合,如果上来就直接开始Hexo部署,难免会有读者心生疑惑:Hexo是啥?因此,在文章开头,本学渣还是要做一个简介,以引入主题。

根据Hexo的官方文档的定义:

Hexo 是一个快速、简洁且高效的博客框架。Hexo 使用 Markdown(或其他渲染引擎)解析文章,在几秒内,即可利用靓丽的主题生成静态网页。

可知,本质上Hexo是一个设计用来部署博客的程序。当然,部署博客还有许多其他方式,如WordExpress,Ghost等等,而这些程序部署出来的博客可以分为动态和静态两类,基于Hexo的博客属于静态博客。

关于动态和静态,网络上讨论很多,有人认为静态好,而有人更喜欢动态。由于本学渣只是一个文科生,对于其具体的区别和技术细节并不明白,在这里就不多讨论了,总之对于我来说,Hexo属于最易于上手且维护成本最低的方案,部署下来没有遇到什么功能缺失问题,因此,我便选择了利用Hexo搭建这个博客。

了解了Hexo为何,那么我们就可以正式开始了。


前置工作

依稀记得几年前本人是用Win10系统进行的操作,然而随着这些年我的折腾技能略微见长,再加上本人并不是搞开发的,在win10主力机上装一大堆开发相关的东西会让我很不舒服(没什么具体原因,单纯的个人强迫症),因此这次我选择单独开一台Linux的虚拟机来专门用作博客机。

那么第一步便是创建一台Linux虚拟机,这部分与文章主题关系不大,略过不谈,总之便是按照本人习惯,在VMWare中准备好了一台Ubuntu的Server版本虚机。机器命名为Blog。

接下来SSH连入Blog,进行具体配置。


依赖下载

Node.js 安装

由于Hexo是基于Node.js开发,第一步便是安装Node.js。

首先添加源,在命令行中输入:

1
curl -fsSL https://deb.nodesource.com/setup_17.x | sudo -E bash - 

接下来下载并安装,在命令行中输入:

1
sudo apt-get install -y nodejs

此时Node.js搞定。

Git 安装及配置

Hexo还需要Git的存在来进行其他操作,安装很简单:

1
sudo apt-get install git-core

不过Git安装完成后并未结束,还需要进行个人信息的配置,否则之后部署Hexo时会报错

  1. 添加用户名
1
git config --global user.name "你的用户名"
  1. 添加邮箱
1
git config --global user.email "你的邮箱"

笔者测试下来,邮箱随便输即可,不需要填真实邮箱。不过为了Github页面中显示的Contributors为你本人,建议还是填绑定了Github的邮箱。

此时Git搞定。


Hexo 安装及启动

Hexo安装

安装指令依然很简单:

1
npm install -g hexo-cli

此时所有的基础安装工作结束,可以开始正式部署。

Hexo 启动

Hexo的启动命令会在当前的PWD下创建所有文件,且需要PWD为空文件夹,此时需要计划文件想放在哪里。
本人就直接在开机默认目录下创建了blog文件夹:

1
mkdir blog && cd blog

接下来:

1
hexo init

等待命令行跑完,此时敲ls指令便可看到基础文件已经生成。
万事俱备,只要敲下

1
hexo start

不出意外,即可看到

“Hexo is running at http://localhost:4000/ . Press Ctrl+C to stop.”

之后只要浏览器访问博客主机的IP加端口号:如10.10.10.1:4000,就可以看到初始的博客站点啦。


Hexo 配置及使用

初始化完成后,博客中会默认生成一篇”Helllo World”的文章,内容包括一些简单教程。

Hexo 配置

主题配置

到此,博客虽然跑了起来,但说实话,还是比较简陋的,这时候主题功能就派上了用场。

由于Hexo的社区相当活跃,因此有许多大佬写好的现成的主题可以使用,可以网上搜索并按需选取。本人选用的是"hexo-theme-matery",总体还是比较符合我的审美。

配置方法也很简单,首先

1
cd themes

在确定PWD为blog目录下的themes时,

1
git clone https://github.com/blinkfox/hexo-theme-matery.git

这样就下载完毕了。

接下来,打开blog根目录下的_config.yml文件,找到其中的theme字段,将其改为:

theme: hexo-theme-matery

然后先按Crtl + C

再命令行中输入:

1
hexo s

也就是重启博客。

此时再次访问即可看到美观的站点了。

Github远端部署配置

搭建好了博客,总是要放置在公网环境中的,否则意义就不是很大了,而Hexo本身支持许多种本地向公网部署的方案,非常方便。

笔者选择的是部署到Github的Pages之上,主要是因为免费,且无需考虑SSL加密,证书之类的繁琐事。虽然许多意义上说,免费的解决方案总有各种不足,遇到问题时的维护时间很可能超出预期,导致很多时候免费的才是最贵的,但无论如何,笔者总是免费先爽一把再说。

要部署博客到Github上,首先你要有Github账号,此处不多赘述账号注册过程。

登录Github,在右上角的+号中,点选 New Repository,然后在Repository name中,输入你的github用户名.github.io,然后点下方的Creat repository完成创建。

接下来,点击右上角头像—SettingsDeveloper settingsPersonal access tokensGenerate new token

在权限选项中将有效期设为不过期,然后勾选Repo—最后点Generate token生成密匙

复制生成的ghp_开头的一串字符

blog下的_config.yml文件中,找到deploy字段,将其改为:

1
2
3
4
deploy:
type: git
repo: https://ghp_你的密钥@github.com/你的用户名/你的用户名.github.io.git
branch: master

保存文件,然后输入下述指令:

1
hexo deploy

不出意外,此时Github库中会出现你的博客文件,然后访问 https://你的用户名.github.io 即可进入你的博客。

Hexo 使用

总体来说,Hexo的使用相当简单,发博客主要就是下面几步轮着做:

创建文章

1
hexo new '文章标题'

撰写内容

Hexo管理的所有博客都是以MarkDown格式写作,因此,在写博客前,作者有必要了解一定的MarkDown语法。对于普通用户来说,熟练使用还是有一定门槛的。不过笔者在创作这篇文章前,几乎也是完全不会用MarkDown的,然而写了两三个小时后,大体操作就没有问题了,所以无基础的初学者也不用过于恐惧。

在这篇文章中,我就不多赘述具体的语法细节,未来可能会另开一篇文章,总结下其常见的用法(喜闻乐见的重复造轮子环节)。

启动本地服务(一般用作预览)

1
hexo s

生成文件

1
hexo g

部署到远端

1
hexo d

双语支持

最后,考虑到可能的(?)外文读者,笔者产生了添加英文站点的需求,而虽然Hexo文档中推荐了了一款国际化插件 Internationalization (i18n),但是它的功能仅限于翻译标题,没什么实质用处,在各种网上冲浪后,我找到了一些前辈的解决方案,秉承着重复造轮子的原则,我将其搬运于此。

这套解决方案的核心原理很简单:克隆建好的中文站,然后将克隆体全局修改为英文版,最后在两个站点间互相插入链接。

首先将blog文件夹中除了node_modules以外的所有文件复制到新的一个文件中(笔者使用blogen),然后将该文件移动至博客文件夹中(下文中的aa为笔者的用户名,读者按需修改)。

1
2
3
4
5
6
cd /home/aa
mkdir blogen
cp -r /home/aa/blog/* /home/aa/blogen
rm -r /home/aa/blogen/node_modules
cp -r /home/aa/blogen /home/aa/blog/
rm -rf /home/aa/blogen

接着进入blogen目录中

1
cd blogen

重新下载依赖

1
npm install

修改语言

blog下的_config.yml文件中,确保language为zh-CN

然后在blogen下的_config.yml文件中,修改language为en

修改根目录

blog下的_config.yml文件中,将root: 后改为/

然后在blogen下的_config.yml文件中,将root: 后改为/en

修改主题

"hexo-theme-matery"主题会自动对全局语言进行适配,所以只需要添加另外语言站点的索引即可

首先对于中文站,修改blog/themes/hexo-theme-matery下的_config.yml,在menu中新增一条:

1
2
English Site:
url: ‘你的url’/en

而对于英文站,修改blogen/themes/hexo-theme-matery下的_config.yml,在menu中新增一条:

1
2
中文站:
url: ‘你的url’

此时,利用下述命令重新启动博客:

1
cd /home/aa/blog && hexo clean && hexo g &&cd /home/aa/blog/blogen && hexo clean && hexo g && cd /home/aa/blog && cp -r /home/aa/blog/blogen/public/. /home/aa/blog/public/en/ && hexo s

再次进入博客便可看到右上角新增的指向另一个语言的站点图标。

这之后,只要在文档编辑器里写好相应语言的文章,便可一键部署。


Hexo升级

当我们的博客运行一段时间后,很有可能Hexo本体有了版本更新,虽然更新一般对于本人来说没有什么用,但强迫症发时,总会想要手里的东西是最新版,因此,这里也记录下框架更新的方式。

注意:这里的部分本学渣不懂具体做了什么操作,只是复刻别的地方看到的大佬的教程,不保证不会出问题,仅供参考!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
npm install -g hexo-cli
hexo version

npm install -g npm-check
npm-check

npm install -g npm-upgrade
npm-upgrade

npm update -g
npm install -g npm

hexo clean #清理hexo数据并重新生成页面并部署
hexo g -s
hexo d

到这里,Hexo的基础框架就更新完了,至于主题文件,由于修改了太多源码,实在没法更新了,最好就是删除+重新拉取主题源码,然后重新配置,太麻烦了,本人就不搞了。


参考资料

Hexo Documentation

Hexo添加多语言支持「国际化i18n」

超详细Hexo+Github博客搭建小白教程

hexo-theme-matery