从零搭建 Hexo + Github 博客

VenusM1nT

2019-01-23 09:33:01

Personal

# 前言 之前有一篇用 $\text{Wordpress}$ 搭建博客的文章,这里给出一种更为方便的搭建方法,只要用 $\text{Github}$。 笔者是在 $\text{Windows}$ 的环境下搭建的,其他系统可能不适用。 本文同步发表于笔者的博客:[从零搭建 Hexo + Github 博客](https://venusnero.github.io/2019/01/23/build_hexo_github_blog/) ------ 感谢 @Happynewyear 的帮忙捉虫,以及 @Sinner 提供的部分程序地址。 ------ # 优缺点分析 ## 优点 安装简单方便,不需要自己找域名、设置 $\text{DNS}$,自带 $\text{Markdown}$,在简单的设置之后即可支持 $\LaTeX$。同时官网有诸多主题可供挑选。 ## 缺点 搭建在 $\text{Github}$ 的服务器上,访问速度较慢,无法自定义域名,想要对博客进行自定义更改需要使用 $\text{JavaScript}$,博客上传比较麻烦。 # 前置条件 ## 程序 在开始之前,推荐大家提前下载一下之后要用到的程序,如下: - [$\text{Node.js}$](https://nodejs.org/en/) - [$\text{Git}$](https://git-scm.com/) - [$\text{Sublime}$](http://www.sublimetext.com/) ## 账号 我们只需要一个 [$\text{Github}$](http://github.com) 的账号即可。 ------ # 开始搭建 ## 1. 配置 $\text{Github}$ 的 $\text{SHH}$ 首先进入 $\text{Git}$ **程序**的源文件夹,打开 `git-bash.exe`。 ![](https://z4a.net/images/2019/01/23/TIM20190122221915.png) 输入这样一行命令: ``` ssh-keygen -t rsa -C "Github 注册的邮箱地址" ``` 按下回车,按四次,直到出现一个奇怪的图时,则完成。图可能会不同,属于正常现象。 ![](https://z4a.net/images/2019/01/23/TIM20190122222235.png) 此时就不用管了,我们进入 $\text{Github}$ ,登录自己的账号,点击右上角头像 $\rightarrow$ $\text{Settings}$, ![](https://z4a.net/images/2019/01/23/TIM20190122222416.png) 然后点击左侧的 $\text{SSH and GPG keys}$ ![](https://z4a.net/images/2019/01/23/TIM20190122222534.png) 点击右上方的 $\text{New SSH key}$ ![](https://z4a.net/images/2019/01/23/TIM20190122222642.png) 此时会让你填两个东西,一个是 $\text{Title}$,一个是 $\text{Key}$,前者我们随便填一个,后者的话,我们进入 `C:\Users\你的用户名\.ssh`,用记事本打开一个叫做 `id_rsa.pub` 的文件,把里面的东西复制到 $\text{Key}$ 里面去即可。 ![](https://z4a.net/images/2019/01/23/TIM20190122222913.png) ## 2. 本地运行 $\text{Hexo}$ 首先进入 $\text{Hexo}$ 的[官网](http://hexo.io),此时我们会在正中间看见一行代码,这个就是 $\text{Hexo}$ 的安装代码了。 在安装之前,我们要准备一个东西:存储本地博客的文件夹,这个大家按自己的习惯和情况创建一个文件夹就行,比如我创建的文件夹是 `E:/blog`,这个 `blog` 文件夹就是存储所有博客要用的文件夹了。 为避免出现不必要的 $\text{Bug}$,推荐使用英文的文件夹名字。 在安装时,各位应该按照自己的路径来设置,千万不要完全照搬这里给出的做法。 我们打开 `cmd`(`win+R` 键打开运行,输入 `cmd`),先输入盘,比如我这里是 `E:`,然后输入 `cd blog`,然后打入给出的那行命令:`npm install hexo-cli -g`,等到进度条满,你能够再次输入命令时就完成了。 ![](https://z4a.net/images/2019/01/23/TIM20190123073219.png) 先别急着关 `cmd`,之后我们还会用到。 此时我们就要开始创建本地博客了。在 $\text{Hexo}$ 官网首页的下方,有一行代码,`hexo init blog`,这行代码就是我们创建博客的关键了。此时,如果你没有关掉 `cmd`,那么它应该是保持着 `cd` 到你创建的文件夹的状态,如果关掉的话,要重新 `E:` `cd blog` 一下。输入官网上的这行代码:`hexo init 你的博客名`,这个博客名随便起,因为它不会影响你网站上的任何因素,只是会影响之后创建的文件夹的名字。 输入代码,开始创建博客,又需要一些时间。当然,有一些写着 `WARN` 的指令行出现,也不用紧张,是正常现象。 ![](https://z4a.net/images/2019/01/23/TIM20190123074106.png) 等待安装完成,需要一些时间。 安装好之后,我们就可以看见之前的 `blog` 文件夹中,出现了一个名字为你刚刚输入的名字文件夹。 ![](https://z4a.net/images/2019/01/23/TIM20190123074240.png) 我们 `cd` 到这个文件夹下,对我来说就是 `cd vocaloid`,然后就可以安装依赖了,输入 `npm install`,开始安装。 这个很快就可以完成。 ![](https://z4a.net/images/2019/01/23/TIM20190123074443.png) 接着我们就可以本地运行了,我们接着在 `cmd` 中输入 `hexo s -p 端口`,这个端口不知道有什么限制,推荐输入 `5555` 或者 `4000`,很快就可以完成。 ![](https://z4a.net/images/2019/01/23/TIM20190123074634.png) 此时我们就可以进入 `localhost:端口`,就可以看到你的 $\text{Hexo}$ 博客啦。 ![](https://z4a.net/images/2019/01/23/TIM20190123074743.png) 此时如果你在 `cmd` 中按下 `Ctrl+C`,再确认终止批处理操作,就可以停止使用这个端口了。 ## 3. 发布至 $\text{Github}$ 在上传之前,我们需要做一些配置。首先用 $\text{Sublime}$ 打开文件夹: ![](https://z4a.net/images/2019/01/23/TIM20190123075503.png) 打开 `_config.yml`,准备修改。 进入 $\text{Github}$,先新建一个项目,点击右上角的 $+$ 号,选择 `New repository`,描述自己填,**名字使用 `你的 Github 用户名.github.io`**。 (因为我这里是一个号重复建,所以我就不用我的用户名演示了。) (一定要用 `你的 Github 用户名.github.io` 作为项目名字,二次强调) **为了防止接下来的教程出现一些问题,各位最好把“是否有 README” 这一个选项选上,不然就会和我这里给出的情况不同。** ![](https://z4a.net/images/2019/01/23/TIM20190123075856.png) ![](https://z4a.net/images/2019/01/23/TIM20190123080036.png) 此时就进入了项目的页面,我们点击右侧绿色的 `Clone or download` 按钮,将它给出的链接复制下来。 ![](https://z4a.net/images/2019/01/23/TIM20190123081119.png) 回到 $\text{Sublime}$,拉到最下面,在 `type` 后面输入 ` git`(**所有冒号后面都有空格,不能不加**,切记)。 在 `type` 这一行下面,加入 `repo:` ,然后后面填上刚刚复制的地址,往上拉,找到 `url:`,在 `url:` 后面输入:`http://你的 Github 用户名.github.io` ![](https://z4a.net/images/2019/01/23/TIM20190123081136.png) 上方有一个 `author`,这个可以改一下,改成你自己即可。 此时基础配置就差不多完成了,我们回到 `cmd`,先退出刚才的本地端口,然后安装一个 $\text{Git}$ 插件。 输入 `npm install hexo-deployer-git --save` ,即可等待其安装了。 ![](https://z4a.net/images/2019/01/23/TIM20190123081617.png) 此时回到 $\text{Sublime}$,在刚刚的 `repo` 下面再加一行:`branch: master`,保存。 完成后,我们就可以尝试运行这个博客了。我们在 `cmd` 中分别输入两行代码,一行是 `hexo g`,代表本地文件生成,另一行是 `hexo d`,代表上传。 等待一些时间,即可完成。 ![](https://z4a.net/images/2019/01/23/TIM20190123081851.png) ![](https://z4a.net/images/2019/01/23/TIM20190123081934.png) 此时会让你配置你的 $\text{Github}$ 账号,需要分别输入两行代码(因为我之前配置过了,所以不用再次配置),如下(这两行代码在 `cmd` 中都有给出): `git config --global user.email "你的邮箱"` `git config --global user.name "你的用户名"` 引号不要省略掉。配置好后,再次输入 `hexo d`,此时会弹出一个窗口,让你登录你的 $\text{Github}$,大概长这样: ![](https://z4a.net/images/2019/01/23/TIM20190123082548.png) 登录就行了。等到上传完成,即可直接访问你的博客了,地址就是你刚才在 $\text{Sublime}$ 中,`url:` 后面的那个地址。 此时就完成了博客的搭建,但是我们的博客是不支持 $\LaTeX$ 的,所以我们还需要配置。 ## 4. $404$ 的解决方案 我们可能会遇到这样的情况: ![](https://z4a.net/images/2019/01/23/TIM20190123155325.png) 这种情况必然是非常令人恼火的,但解决方法非常简单,我们进入刚才创建的项目的页面,点击 $Settings$,往下拉,找到一个 `Custom domain`,输入我们之前在 `url: ` 后面输入的那个域名,即 `<用户名>.github.io`,然后点击 $\text{Save}$,应该就可以访问了。 ![](https://z4a.net/images/2019/01/23/TIM20190123155509.png) ![](https://z4a.net/images/2019/01/23/TIM20190123155641.png) ## 5. 主题 不同的主题可以在 $\text{Hexo}$ 的 [主题](https://hexo.io/themes/) 中安装,只需要在 `cmd` 中 `cd` 到你的博客文件夹(对我来说是 `E:\blog\vocaloid`),然后在主题的 $\text{Github}$ 中找到安装的代码,如果没有大家可以自行修改别的代码,将地址和文件夹改一下就行了。 (UPD: 改了可能不能正常使用,建议不要改) ![](https://z4a.net/images/2019/01/23/TIM20190123083633.png) ![](https://z4a.net/images/2019/01/23/TIM20190123083827.png) 之后我们可以打开 `_config.yml`,将下面的 `theme: ` 后面的名字改成安装的文件夹的名字,比如 `theme: next`。 ## 6. 博客的标题 打开 `_config.yml`,可以看到上方有一个 `title: `,把后面的修改掉就行了。 ------ # $\LaTeX$ 设置 我们此时搭建的博客只能使用 $\text{Markdown}$,同时因为一些语句的冲突无法使用 $\LaTeX$ ,所以我们需要解决这些冲突,同时安装一个能够使用及渲染 $\LaTeX$ 的语言包。 **下面的操作都默认 `cd` 到了博客文件夹。** ## 1. 修改引擎 首先我们要将原本的渲染引擎替换成能够支持 $\LaTeX$ 的渲染引擎。原版的引擎是 $\text{Marked}$,我们将它卸载 ,然后安装一个 $\text{Kramed}$ 引擎。 先 `cd` 到博客文件夹后,输入以下代码: `npm uninstall hexo-renderer-marked --save` `npm install hexo-renderer-kramed --save` ![](https://z4a.net/images/2019/01/23/TIM20190123084356.png) ## 2. 更改配置 用 $\text{Sublime}$ 打开 `/node_modules/hexo-renderer-kramed/lib/renderer.js` 。 ![](https://z4a.net/images/2019/01/23/TIM20190123084514.png) ``` 将 function formatText(text) { // Fit kramed's rule: $$ + \1 + $$ return text.replace(/`\$(.*?)\$`/g, '$$$$$1$$$$'); } 改为 function formatText(text) { return text; } ``` ![](https://z4a.net/images/2019/01/23/TIM20190123084715.png) ## 3. 修改数学包 我们要将原来的数学包修改成 $\text{Kramed}$ 适用的数学包,分别输入 `npm uninstall hexo-math --save` `npm install hexo-renderer-mathjax --save` 等待其卸载、安装即可。 ![](https://z4a.net/images/2019/01/23/TIM20190123085045.png) ## 4. 更新配置文件 打开 `/node_modules/hexo-renderer-mathjax/mathjax.html`,将最下面的代码注释掉(即在开始的 `<` 后面加上 `!-- `,然后在上面加上一行:`<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-MML-AM_CHTML"></script>` 即可。 ![](https://z4a.net/images/2019/01/23/TIM20190123085351.png) ## 5. 更改规则 为了解决冲突,我们还需要更改转义规则。首先打开 `\node_modules\kramed\lib\rules\inline.js`,将 `escape` 和 `em` 这两行注释掉,分别修改为: ``` escape: /^\\([`*\[\]()# +\-.!_>])/, em: /^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, ``` ![](https://z4a.net/images/2019/01/23/TIM20190123085601.png) 至此,我们完成了 $\LaTeX$ 的前置准备,最后只需要启用即可。 ## 6. 启用 进入进入 `博客\_config.yml`,加上一行 `mathjax: true` 即可。如果不行的话,就在每篇博客最前面的信息处加上一行 `mathjax: true` 即可。 ------ # 如何上传博客 我们进入 `博客名\source\_posts`,这里就是放博客的地方。如果要写博客,最好使用一些 $\text{Markdown}$ + $\LaTeX$ 编辑器,比如 $\text{Typora}$,在本地写好后,在放博客的地方新建一个文档,文档的名字就决定了你的标识符,也就是这个东西: ![](https://z4a.net/images/2019/01/23/TIM20190123090126.png) 文档的后缀名应该是 `.md`,我们可以创建一个 `.txt` 文件,然后改后缀就行。用 $\text{Sublime}$ 或者别的编辑器打开后,我们在最上面加上这样一段: ``` --- title: 你的文章的标题 date: 发布时间 tag: 标签 --- ``` 然后再下面直接把博客复制上去就行。 此时我们就写好了一篇博客,但是我们还需要上传,我们打开 `cmd`,`cd` 到你的博客的位置,然后分别输入三行代码: `hexo clean` `hexo g` `hexo d` 等待一段时间后再回到博客,就可以成功了。 效果见:[Here](https://venusnero.github.io/2019/01/23/solution_p3644/) ### 文章过长? 我们会发现,上传博客后往往会在首页将整篇文章的内容都显示出来,这显然是非常占用空间的,此时我们可以在博客的文档中加入一行代码:`<!--more-->`,然后重新上传,此时在这行代码后面的内容都不会显示出来了,而是改为了一个“$\text{Read More}$”按键,非常方便。 ![](https://z4a.net/images/2019/01/23/TIM20190123091628.png) ![](https://z4a.net/images/2019/01/23/TIM20190123091649.png) ![](https://z4a.net/images/2019/01/23/TIM20190123091704.png) ------ # 博客背景 进入 `\themes\landscape\source\css\images`,有一张叫做 `banner.jpg/png` 的图(不同主题的位置及名字都可能不同),我们将它替换,文件名和后缀名最好都一样,然后按照上面传博客的方法,`hexo clean`,`hexo g`,`hexo d`,等一会儿就上传完成了。 ------ 注意:基本上所有修改完成后都要打一遍 `hexo clean`,`hexo g`,`hexo d`,忘记打就会导致修改在网站上无法生效。 ------ # 小结 这里只是给出了一些最基础的内容,各位想要更深的研究可以在网上找一些教程,也可以套用现有的主题,难度应该不会很大(当然,如果涉及 $\text{JS}$ 那也不简单了【笑】)。 参考资料:[1](https://www.bilibili.com/video/av24897960/) [2](https://www.jianshu.com/p/68e6f82d88b7) [3](https://blog.csdn.net/dajian790626/article/details/78595684?locationNum=10&fps=1)