前言

官方文档:Hexo

参考教程:

本地博客搭建

流程概括:安装Git、安装Node.js、安装Hexo并部署本地仓库。

安装Git工具

Git 可以将本地代码推送到远程仓库,可以在开发中管理和追踪代码版本,方便团队协作和代码的备份。

打开 Git - Downloading Package (git-scm.com),选择 64-bit Git for Windows Setup下载安装包。

安装时无脑下一步就行。在 Choosing the default editor used by Git 这一步选择 Use Visual Studio Code as Git’s default editor

安装完可以在cmd中输入git –version指令检查是否安装成功。

安装Node.js

Node.js 是 Hexo 的运行环境,安装 Node.js 后可以在你的计算机上运行 Hexo。

打开 Node.js (nodejs.org),下载左边的LTS版本。无脑安装即可。

cmd中输入以下指令检查是否安装成功,返回版本信息。

1
2
node -v
npm -v

安装Hexo并部署本地仓库

Hexo 是一个静态网站生成器,在使用 Markdown 编写博客内容后,可以用指令生成对应的静态网页。

配置 npm(Node 包管理器)的镜像源为淘宝 NPM 镜像以提升国内下载速度,有魔法可忽略。

1
npm config set registry "https://registry.npm.taobao.org"  

安装hexo命令行工具(-g 表示全局安装,整个计算机都可用,可以在cmd中直接调用相关命令。)

1
npm install hexo-cli -g

进入自定义文件路径,初始化hexo。两种写法二选一即可。

1
2
hexo init blog && cd blog
mkdir blog && cd blog && hexo init

安装项目所需的依赖 > npm 会读取项目中的 package.json 文件,并安装该项目所依赖的所有包。

1
npm install

配置 Git 全局用户信息 > 当提交代码时,Git会以此用户为代码提交的作者名称,此邮箱用于关联提交记录。

1
2
git config --global user.name "GitHub用户名"
git config --global user.email "GitHub注册邮箱"

这样就创建好了一个本地的博客,用的是Hexo的默认主题,后面再来安装好看的主题。

执行以下指令就可以在本地看见自己的博客了

1
2
hexo g    // 生成静态页面
hexo s // 启动本地服务器 http://localhost:4000/,点击链接可查看博客,ctrl+c关闭服务器

本地博客部署到Github

创建Github Pages远程仓库

注册 Github 账号并登录,进入个人Github主页。

点击上方右侧**+**号->New Repository,新建一个仓库名和自己 Github 账号 ID 相同的仓库并创建。

例:若Github账号为lumegnde123,则新建仓库名为lumengde123.github.io

生成SSH密钥

使用 SSH 协议与 GitHub 进行通信,更加安全地来验证你的身份,还免输入密码。

cmd中输入以下指令,多个回车直到出现代码表情。

1
ssh-keygen -t rsa -C "你的GitHub注册邮箱"

该指令用 RSA 加密算法生成了SSH密钥,并将你的 GitHub 注册邮箱作为注释添加到生成的密钥中。

打开C:\Users\Administrator.ssh,系统在这里生成了一对 SSH 密钥:本机私人密钥 id_rsa 和公共密钥 id_rsa.pub

公钥 可添加到 GitHub 或其他 Git 托管服务账户上,以便能使用 SSH 协议与服务器进行安全的通信和操作。

私钥 则留存在自己的计算机上,用于与公钥配对进行身份验证。

打开公钥 id_rsa.pub ,复制里面所有内容。

在Github中,点击头像->Settings->SSH and GPG keys->New SSH key,title随意填,下面粘贴ssh公钥并保存。

此时就配置好了本地计算机和Github的SSH连接。

当后面使用 hexo d 部署博客时,将会用SSH 协议与 GitHub 进行通信,GitHub 将会根据你计算机提交的私钥与你账户中存储的公钥进行匹配。只有在密钥匹配成功的情况下,才能够顺利地进行诸如推送代码、拉取仓库等 Git 操作。

检验本地 SSH 配置是否正确及能够成功连接到 GitHub 的 Git 服务器

1
ssh -T -v git@github.com

如果报错…没事,这是网络问题,下面的步骤会解决。

1
ssh: connect to host github.com port 22: Connection timed out

博客部署到Github上

打开博客根目录的_config.yml文件,分别修改url和deploy的内容

1
2
3
4
5
6
url: https://你的github账号.github.io
.......
deploy:
type: git
repo: git@github.com:你的github帐号名/你的github帐号名.github.io.git
branch: main

branch默认是master改为main,现在github新建的仓库默认分支都是main了。修改后Hexo推送时会将生成的网站静态文件推送到Github仓库的main主分支。

安装 hexo-deploy-git 插件,就可以使用Hexo的推送命令

1
npm install hexo-deployer-git --save

执行hexo三连指令来推送博客静态文件

1
2
3
hexo clean		//清空上次推送时生成的文件,每次推送前删一下。
hexo g // 生成静态页面(hexo generate)
hexo d // 部署到Github(hexo deploy)

当执行hexo deploy时,Hexo 会将/public目录中的文件推送至配置文件_config.yml中指定的远端仓库和分支中,并且完全覆盖该分支下的已有内容。

第一次hexo d会问个问题,必须填yes,然后按回车等一会。

当出现INFO Deploy done: git提示时,代表推送成功。

这样本地Hexo博客就同步到Github上了。可以在浏览器搜索 你的github昵称.github.io 来访问你的博客网站。(国内访问Github比较慢,要多等它加载一会)

如果在hexo d之后等了很久不成功,报错 Error: Spawn failed,请往下看。

推送时报错问题及解决方法

报错代码为:

1
2
3
4
5
6
7
8
9
10
ssh: connect to host github.com port 22: Connection timed out
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
FATAL Something's wrong.Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html
Error: Spawn failed
at ChildProcess.<anonymous>(D:\Coding\blog lnode_modules\hexo-deployer-git\node_modules\hexo-util\liblspawn.js:51:
at ChildProcess.emit (node : events:514:28)
at cp.emit (D:\Coding\blog \node_modules\cross-spawn\liblenoent.js: 34:29)at ChildProcess._handle.onexit (node:internal/child_process:294:12)

如果推送时一直卡着,然后报这个错,原因是连接不到Github,连接超时。

解决方法:

参考链接 > 关于本地git通过ssh链接github时 time out问题的解决方法

打开生成ras密钥的文件路径即C:\Users\Administrator\.ssh文件夹,在这里新建config文件。

打开config,填入以下内容:

1
2
3
4
Host github.com 
HostName ssh.github.com User git
Port 443 PreferredAuthentications publickey
IdentityFile C:/Users/Administrator/.ssh/id_rsa # 对应好你的路径

这样配置的目的是当我们访问github.com的时候,能自动转换成ssh.github.com,后者才是我们要启动的。

然后再来测试一下:

1
2
D:\Coding\blog>ssh -T git@github.com 
Hi lumengde123! You've successfully authenticated, but GitHub does not provide shell access.

出现这个提示说明消息响应正常:成功通过SSH进行了身份验证,但GitHub不提供直接的shell访问。

此时再执行Hexo三连,就可以顺利推送了。

备用方法:修改hosts通过http来push。参考 GitHub push失败-Failed to connect to github.com port 443: Timed out

使用自己的域名

xxx.github.io这个域名不太好看。所以我们可以将其绑定到我们自己买的域名上。

想要输入自己的域名自动跳转到博客首页,可以先去阿里云购买域名,实名认证,然后将该域名和博客项目进行绑定。

  • 百度打开阿里云首页,搜索框搜索域名注册,购买自己喜欢的域名,然后实名认证
  • 回到阿里云首页,打开头像左侧的控制台页面,在搜索框搜索域名,进入域名控制台
  • 在域名列表->解析 里面可以为域名添加解析记录

以下内容参考自 为 Github Pages 绑定域名 - cometeme的个人博客

修改 DNS 解析的数据

打开cmd,输入指令查看自己的博客网址对应的DNS的IPV4地址

1
nslookup -query=A xxxxxx.github.io

添加域名解析记录

CNAME www 默认 xxx.github.io
A @ 默认 IPV4地址

这里可以把四个IPV4地址都添加进去,即四个A记录。

为 Github Page 设置 CNAME

1
2
3
打开Github进入该项目的仓库,点击 Settings->Pages ->Custom domain,输入域名并保存。注意要带上www前缀。
此时Github会自动为该项目创建CNAME文件。然后刷新该网页,勾选上Enforce HTTPS。
等待约10分钟DNS的缓存刷新后,输入xxx.github.io就会跳转到你的域名,并且是https协议。

这个方案有问题,由于本地的博客没有CNAME,如果本地博客hexo d推送后,会覆盖项目仓库,即会删除CNAME。

所以还需要同时在本地的 /source 文件夹里也创建个CNAME并填入www前缀域名。

Hexo基本操作

本地编写博客文章,查看文件结构需要下载文本编辑器进行辅助,例如:VSCode、Sublime Text 3、Typora

以下内容参考自:写作 | Hexo 官方文档

创建新文章/页面/草稿

Hexo 有三种默认布局:postpagedraft;分别为文章、页面、草稿;分别保存在source/_postssourcesource/_drafts文件夹中。

文章的布局(layout),默认为 post,可以通过修改 _config.yml 中的 default_layout 参数来指定默认布局。

如果你不希望一篇文章(post/page)使用主题处理,请在它的 front-matter 中设置 layout: false

基本语句结构

1
hexo new [layout] <title>

创建新文章

1
2
hexo new 笔记01
hexo new post 笔记01

创建新页面

1
hexo new page 页面01

创建新草稿

1
hexo new draft 草稿01		// 会将草稿保存在`source/_drafts`

草稿默认不会显示在页面中,您可在执行时加上 --draft 参数,或是在 _config.yml 中把 render_drafts 参数设为 true 来预览草稿。

发布草稿 > publish的前提是该草稿存在,发布成为post

1
2
3
4
hexo publish 草稿01	
hexo publish post 草稿01 // 会将草稿存入`source/_posts`,变成正式的文章

hexo publish <layout> <title> // 可以发布为指定布局的文章

文章降为草稿

1
2
3
---
published: false
---

Front-matter 文章/页面 配置

详细内容:Front-matter | Hexo

Front-matter 是md文件最上方以 --- 分隔的区域,使用变量来修改文章或页面配置,例如:

1
2
3
4
5
6
7
8
9
---
title: Butterfly美化(基础篇)
date: 2024-01-06 10:29:28
swiper_index: 2 #置顶轮播图顺序,非负整数,数字越大越靠前
description: 对butterfly进行基础的美化,提升使用体验 # 该文章在轮播图中的文章描述
tags:
- Hexo
- butterfly
---

Page Front-matter

作用于页面的 Front-matter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
---
title:
date:
updated:
type:
comments:
description:
keywords:
top_img:
mathjax:
katex:
aside:
aplayer:
highlight_shrink:
random:
---

参数详解

写法 解释
title 【必需】页面标题
date 【必需】页面创建日期
type 【必需】标签、分类和友情链接三个页面需要配置
updated 【可选】页面更新日期
description 【可选】页面描述
keywords 【可选】页面关键字
comments 【可选】显示页面评论模块 (默认 true)
top_img 【可选】页面顶部图片
mathjax 【可选】显示mathjax (当设置mathjax的per_page: false时,才需要配置,默认 false)
katex 【可选】显示katex (当设置katex的per_page: false时,才需要配置,默认 false)
aside 【可选】显示侧边栏 (默认 true)
aplayer 【可选】在需要的页面加载aplayer的js和css,请参考文章下面的音乐 配置
highlight_shrink 【可选】配置代码框是否展开 (true/false) (默认为设置中highlight_shrink的配置)
random 【可选】配置友情链接是否随机排序(默认为 false)

Post Front-matter

作用于文章的 Front-matter

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
---
title:
date:
updated:
tags:
categories:
keywords:
description:
top_img:
comments:
cover:
toc:
toc_number:
toc_style_simple:
copyright:
copyright_author:
copyright_author_href:
copyright_url:
copyright_info:
mathjax:
katex:
aplayer:
highlight_shrink:
aside:
abcjs:
---

参数详解

写法 解释
title 【必需】文章标题
date 【必需】文章创建日期
updated 【可选】文章更新日期
tags 【可选】文章标签
categories 【可选】文章分类
keywords 【可选】文章关键字
description 【可选】文章描述
top_img 【可选】文章顶部图片
cover 【可选】文章缩略图 (如果没有设置top_img,文章页顶部将显示缩略图,可设为false/图片地址/留空)
comments 【可选】显示文章评论模块 (默认 true)
toc 【可选】显示文章TOC (默认为设置中toc的enable配置)
toc_number 【可选】显示toc_number (默认为设置中toc的number配置)
toc_style_simple 【可选】显示 toc 简洁模式
copyright 【可选】显示文章版权模块 (默认为设置中post_copyright的enable配置)
copyright_author 【可选】文章版权模块的文章作者
copyright_author_href 【可选】文章版权模块的文章作者链接
copyright_url 【可选】文章版权模块的文章连结链接
copyright_info 【可选】文章版权模块的版权声明文字
mathjax 【可选】显示mathjax (当设置mathjax的per_page: false时,才需要配置,默认 false)
katex 【可选】显示katex (当设置katex的per_page: false时,才需要配置,默认 false)
aplayer 【可选】在需要的页面加载aplayer的js和css,请参考文章下面的音乐 配置
highlight_shrink 【可选】配置代码框是否展开 (true/false) (默认为设置中highlight_shrink的配置)
aside 【可选】显示侧边栏 (默认 true)
abcjs 【可选】加载 abcjs (当设置 abcjs 的 per_page: false 时,才需要配置,默认 false)

Hexo Markdown 语法:Hexo Markdown 简明语法手册

创建标签页和分类页

只有文章支持分类标签,可以在 Front-matter 中设置。

1
2
3
4
5
categories:
- Diary
tags:
- PS3
- Games

标签页

cmd进入你的 Hexo 博客的根目录,输入以下指令为标签创建页面

1
hexo new page tags

然后找到 source/tags/index.md 这个文件,为其添加参数typeorderbyorder

1
2
3
4
5
6
7
---
title: 标签
date: 2024-01-06 19:29:51
type: "tags"
orderby: random
order: 1
---
参数 解释
type 【必须】页面类型,必须为 tags
orderby 【可选】排序方式:random/name/length
order 【可选】排序次序:1, asc升序;-1, desc降序

分类页

cmd进入你的 Hexo 博客的根目录,输入以下指令为标签创建页面

1
hexo new page categories

然后找到 source/categories/index.md 这个文件,为其添加参数type: "categories"

1
2
3
4
5
---
title: 分类
date: 2024-01-08 21:20:45
type: "categories"
---

Hexo插件大全

Hexo-Plugins

anzhiyu 主题安装

butterfly主题需要自己魔改美化,太费时间了,更适合自定义魔改玩家。

anzhiyu主题是基于butterfly进行美化魔改的,一切都配置好了,更推荐。

并且,anzhiyu主题的官方文档写的非常详细,可以根据需要自定义博客网站内容。

主题效果:安知鱼 - 生活明朗 万物可爱 (anheyu.com)

安装教程:安知鱼主题 | 官方文档

缺点:文件多,加载比较慢,要10秒左右。

butterfly 主题安装

butterfly界面比较原始,但是可以根据个人爱好自定义魔改。

cmd进入博客项目根目录,下载主题。

1
git clone -b master https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly

安装pug 和 stylus 渲染器。 Pug(以前的Jade)用于简化HTML模板的编写,而Stylus则用于更简洁、更灵活地书写CSS样式。

1
npm install hexo-renderer-pug hexo-renderer-stylus --save

修改项目根目录下的_config.yml文件(称为站点配置文件),开启主题。

1
2
3
4
# Extensions
## Plugins: https://hexo.io/plugins/
## Themes: https://hexo.io/themes/
theme: butterfly

为了减少升级主题带来的不便,可以复制一份themes/butterfly/config.yml的内容到根目录的_config.landscape.yml里,并重命名为 _config.butterfly.yml

Hexo会自动合并主题中的config.yml_config.butterfly.yml ,如果存在同名配置,会优先使用config.butterfly.yml的配置。

所以像和博客网址相关联的固定资料可以设置在_config.yml中,比如博客的标题、作者信息和邮箱等等资料;而和主题样式相关的配置放在 _config.butterfly.yml中,方便以后更换主题。

美化教程系列:Butterfly 安装文档(二) 主题页面

nexT 主题安装

nexT是Hexo中Star最多的主题,整体风格比较简洁,没有那么多花里胡哨的插件和功能。

cd进入你的博客根目录,执行以下指令安装next主题:

1
git clone https://github.com/theme-next/hexo-theme-next themes/next

打开_congif.yml,将theme改为next,同样把next主题配置文件提出来。 然后Hexo三连可以看到博客主题更换为了next,但是需要稍微美化一下。自行百度。

注意:buttefly的标签外挂和部分插件无法在nexT使用,并且hexo g编译无法通过,还需要改原文,所以我放弃了该主题。

maupassant主题安装

https://www.haomwei.com/technology/maupassant-hexo.html