使用github和Hexo搭建个人博客
这个文件会不断更新
这两天外面下雨闲着没事准备做一个博客,看网上说要什么搞个域名、买个服务器啊、然后部署啊之类的,觉得有点麻烦,我怕这种麻烦会让我还没开始就结束了写博客之旅,所以就准备用github
来托管一下博客,这个比较方便。唯一不好的就是国内上github
不稳定,网速还慢,但是相较于在CSDN
这个(CSDN Steals Documents on Network)
上写博客对于身心健康来说是大有脾益的;相较于gitee
的代码审核,github
可以即时展示。
本文主要参考的GitHub+Hexo 搭建个人网站详细教程进行,为了简洁,关于工具的详细介绍这里不赘述,只写关键的代码部分。
注意:下面的操作均是在windows系统上进行。
介绍
有关于Hexo是什么和github这里不多说,只说说比较的关键的和写博客密切相关的东西。我个人理解的github + Hexo
的博客的流程图:
1 | 编写markdown格式的博文 |
hexo
就是一个比较方便的把你写的markdown的文章按照你指定的主题转换为html文件的工具,也就是说除了hexo你也可以用其他的工具比如Hugo,甚至是你自己手写html然后放到github都可以;github实际上就是按照特定的路径把你事先准备好的html文件给显示出来,这就是托管作用。
比如可以看hexo-theme-Claudia作者的github博客,里面就是按照日期的文件夹,下面对应的就是一个index.html
文件,当然了,还会有一些css
、js
文件。
安装npm
下载windows的node:node-v18.16.0-x64.msi,双击进行安装。
安装之后打开cmd测试一下:
1 | node -v |
在对应的文件夹右键,打开cmd(或者直接在任务栏的搜索里面搜索cmd)。如果没有,我推荐再安装一个ConEmu,然后右键会出现一个
ConEmu Here
。
安装hexo插件
1 | npm install hexo-cli -g |
如果出现下面的报错:
1
2
3 npm ERR! code CERT_HAS_EXPIRED
npm ERR! errno CERT_HAS_EXPIRED
npm ERR! request to https://registry.npm.taobao.org/hexo-asset-image failed, reason: certificate has expired运行下面的代码:
1
2
3 npm cache clean --force
npm config set strict-ssl false
npm install
安装git
进入git for windows下载git
,下载完成之后安装。完成之后在桌面右键,看是否多了两个选项:git GUI here
、git bash here
。
初始化博客
新建一个文件夹,比如D:/博客/
,(这个文件夹是需要比较稳定的,不能放在随手不注意给删除了地方比如桌面之类的)。打开cmd,然后输入:
1 | # 这里文件夹的路径你可以修改为其他位置 |
进入这个文件夹,之后输出下面的命令:
1 | # 新建一个hexo的项目(blog可以更改为你认为合适的名字) |
你会看到在cmd中出现这些文字:
1 | INFO Validating config |
打开浏览器,输入http://localhost:4000
,你可以一个Hexo的地平线的网页,表示你创建成功了。
如果出现错误:
Port 4000 has been used. Try other port instead.
表示端口已经被用了,更换端口就可以:
1 hexo s -p 4001
更改主题
默认的主题有点历史感,目前我个人喜欢Haojen/hexo-theme-Claudia - Demo
如果上面服务开启了,先ctrl + c
关闭掉,然后输入下面的命令:
1 | git clone https://github.com/Haojen/hexo-theme-Claudia.git themes/Claudia |
如果上面git clone不下来,可以直接下载hexo-theme-Claudia.zip,然后把文件夹解压放到
themes
文件夹里面,然后把文件夹名称更改为Claudia
。
然后下载这个主题的依赖:
1 | # 注意安装下面的包一定是要在blog根目录下 |
打开blog/_config.yml
文件,将下面这一行修改为:
1 | # theme: landscape |
保存,再次输入
1 | hexo clean |
继续在浏览器中输入http://localhost:4000
查看主题是否更改了。
编写文章
写的文章都是放在D:/博客/blog/source/_posts
下面,你可以看到之前我们生成的test-my-site.md
文件,这里的笔记都是使用markdown
格式编写的,如果不了解这个格式可以搜索markdown语法学习。
比如这里我想写一个新的文章,名叫使用github和Hexo搭建个人博客
。
1 | hexo new "使用github和Hexo搭建个人博客" |
然后里面写上这些内容:
1 | --- |
注意文章中
title
、date
、tags
之类的东西不要删除掉,这是用来对文章进行排序和显示博文标题的。
以后在编写文章的时候推荐使用一个markdown的编辑器,我这里用的是Typora
的历史版本(免费的那一版,我是用的0.9.92
版),然后可以在里面编写好粘贴在使用hexo new
生成的文件下面,然后修改一下title
、date
、tags
的内容。
其他调整
有一些信息是默认的,需要更改为自己的信息,下面是一些常见的需要更改的地方:
1) Hexo的配置文件
这里打开的是blog/_config.yml
文件,里面的这几项最好修改:
1 | # 你的博客的站点的名称 |
注意,yml格式的
:
后面一定要有一个空格,不然这个会识别不出来,除了中文文字和句子中的标点之外,其他所有逗号空格,都需要是在英文输入状态下输入。
上传到github
现在是在本地查看,需要将这些东西上传到github上可以让其他人能访问到。
1) github注册
如果你没有github,需要注册一个github,新建一个GitHub账号,具体怎么申请,这里不赘述,如果有你直接登录就可以。
2) 新建仓库
申请好账号和登录github之后,你需要点击右上角的+
,然后New repository
,在Repository Name
下面填上你的github名字.github.io
(必须这么写,比如我的github的名字是eternal-bug
,那么我就写上eternal-bug.github.io
),其他的不用动,只需要给Add a README.md
前面打勾。这个时候你可以打开https://eternal-bug.github.io/
就已经可以访问了(eternal-bug
更改为你的github的名字),只不过是默认页面。
3) 添加SSH关联
因为上传是需要口令的,这里需要申请一个口令:
1 | # 配置用户名 |
第一次登录时,Git会提示你输入密码,但出于保密因素,除“Enter your password: ”这行系统提示消息外,命令行不会显示任何字符,也不会在你输入或删除字符时用增减星号(井号)表示,因此输入密码时,最好放慢速度,避免因打字过快而输错。
1 | # 申请口令 |
会弹出下面的话,直接回车就好了(这是是让你上传github代码的时候输入的密码,因为这是我自己的电脑,密钥文件也是存在我这里这里,所以这个不需要设置密码):
1 | Enter file in which to save the key (/c/Users/tanglab_lzh/.ssh/id_rsa): |
完成之后,会在你的电脑的C:\Users\XXX\.ssh
下面有(XXX表示你的电脑的用户名字)
1 | id_rsa |
两个文件。打开id_rsa.pub
,然后按下ctrl+a
选中所有的文本。
再次进入到github的界面,点击个人头像
->Setting
->点击SSH and GPG keys
->点击SSH keys右侧New SSH key
,在title
里面填上你自己认识的名称,然后在key一栏中粘贴刚才从id_rsa.pub
文件中复制过来的内容。点击Add SSH key
完成口令的添加。
4) 上传
修改blog/_config.yml
中的对应内容,拉到最下面:
1 | deploy: |
回到本地,现在需要上传,进入blog
文件夹,然后输入:
1 | # 清理之前生成的静态文件 |
如果出现:
1 | The authenticity of host 'github.com (xx.xxx.xxx.xxx)' can't be established. |
输入yes
,回车,如果出现:
1 | Enter passphrase |
直接回车。
最后如果出现:
1 | INFO Deploy done: git |
表示上传成功,这个时候可以去你的github上查看。
注意
因为之前很多教程是让把
branch:
写为branch: master
的,如果你上传之后发现github的博客文件夹中的文件没有变化,这是因为现在主分支是main
,一般可以把master
合并到main
中,但是相对于来说步骤比较多,这里直接把branch: master
更改为branch: main
然后再hexo g
一次就可以了。
查看效果
打开网址https://eternal-bug.github.io
查看效果(这里你需要把eternal-bug
更改为你的github的名字)。如果显示github的404,检查一下你在New repository
生成的文件的名称是否正确。
到这里已经完成,博客可以正常运作,后续内容都是优化包括主题设置,请分别食用!
更多优化
这里我们只是测试了一下基本的功能,把最主要的步骤走了一遍,但是页面不是很好看细节不够,还有更加丰富的东西去探索。
分门别类
0) 博客项目说明
blog/public
的目录下没有一个README.md
文件,在你的github的页面,比如https://github.com/eternal-bug/eternal-bug.github.io
下面,点进去没有介绍,这个不是必要的,但是为了更加完整,可以在上面执行hexo g
把本地的文件上传的时候,放一个README.md
到blog/public
里面,当然你可以一直放在这个文件夹里面随时更改。
1) 文章标签
在写的博文多了之后,如果按照时间线或者一页一页的去找是很麻烦的,需要对文章分类,第一种可以通过打标签的方式去给博文分类。
在生成文章的时候你应该发现文章头里面有一个:
1 | title: 使用github和Hexo搭建个人博客 |
这样的东西,它是用来标记这篇文章的信息的,其中tags
就是这篇文章的标签啦,你可以自己增加一些标签:
1 | title: 使用github和Hexo搭建个人博客 |
上面是为了给文章分类,你还需要有一个标签的显示界面,使用下面的命令来生成(只需要生成一次):
1 | hexo new page "tags" |
这样就会在source
文件夹下生成./tags/index.md
文件,打开这个文件,在标题头里面写上这些内容:
1 | title: tags |
这些内容只是让hexo默认生成一些标签,你可以自己在里面写上一些内容,比如标签的介绍啊之类的。
2) 文章分类
除了标签之外,还有分类。同样的,在markdown的开头除了:
1 | title: 使用github和Hexo搭建个人博客 |
还可以添加一个分类:
1 | categories: 博客 |
上面是为了给文章分类,你还需要有一个分类的显示界面,使用下面的命令来生成(只需要生成一次):
1 | hexo new page "categories" |
这样就会在source
文件夹下生成./categories/index.md
文件,打开这个文件,在标题头里面写上这些内容:
1 | title: categories |
3) 关于页面
一个博客没有关于自己的页面你写着博客就没劲啊,在这里可以介绍一下自己。还是一样:
1 | hexo new page "about" |
编辑./source/about/index.md
文件,写你自己的介绍。
1 | ## 关于我 |
4) 404页面
如果不设置这个页面,在网页访问出错(比如原来你写了某一篇博客,但是后来更改了名称或者删除,别人保存了网址书签,再去访问)会出现的页面,如果不设置404
的页面,会简单的弹出灰扑扑的404
怼到浏览器面前。
5) 留言板
与上面新建标签一样这里新建一个留言板页面:
1 | hexo new page "contact" |
编辑source/contact/index.md
,在里面写上:
1 | title: contact |
6) 个性化页面
实际上hexo new page
就是用来新建页面的,你可以自己建议一个页面,比如叫
1 | hexo new page "mypage" |
就会生成一个source/mypage/index.md
的文件,编辑这个文件。后续可以在我的ButterFly主题的调教
的文章中看到一个导航栏设置,可以在那里设置一个导航栏,地址设置为/mypage/
就行了。
7) 草稿
如果不想让文章被发布到github上,就优先生成草稿,写好之后移动到_posts
文件夹下就可以。
1 | hexo new draft "测试草稿" |
就会在source/_drafts
下生成一个测试草稿.md
和一个测试草稿
文件夹,和之前文章一样正常编辑。
如果想要预览一下草稿,可以:
1 | hexo s --draft |
如果想要让草稿变成正文,可以使用这个命令:
1 | hexo p "测试草稿" |
实际上就是把文章从__drafts
文件夹移动到了_posts
文件夹。
8) 删除文章
直接在_posts
文件夹下把对应的markdown文件和文件夹删除就就可以了,然后再:
1 | hexo clean && hexo g && hexo d |
评论系统
为了方便我使用的基于GitHub Discussions的评论的giscus
插件,好处是自己方便,访客不是太方便,他们想要评论需要登录github,授权github作为评论账号。具体做法如下:
1. 创建github仓库
进入你自己的github界面,点击头像,选择your repositories
,点击New
新建一个仓库,名称我这里就写为giscus
,点击Create repositories
(一定不要设置为Private
)。这个时候是位于这个仓库下面,点击仓库的Setting
,找到Features
,下面有一个Discussions
栏目前面有一个小框,给小框打上勾。
2. 安装giscus应用
点击这个链接giscus github apps,点击Install
,在下面的选项中选择Only select repositories
,选择你刚才新建的那个仓库(这里我就是选的eternal-bug/giscus
)。点击Install
。
3. giscus配置
点击这个链接giscus配置,拉到仓库
这里,有一个输入框,输入框里面填上仓库的名称(这里我填写的是eternal-bug/giscus
),在页面映射部分选择Discussion 的标题包含页面的URL
,然后在Discussion 分类
的下拉框里面选择Announcements
。
4. 复制代码到github中
在启用 giscus
下面有一段代码,你复制这个代码放到你markdown文章的末尾:
1 | <script src="https://giscus.app/client.js" |
注意:不要放在代码框中。
除此之外,使用Twikoo
插件你可以将评论系统保存在腾讯云上,评论的时候游客只需要在相应的文本框中填入必要的信息即可评论,详细可以看这篇文章Hexo + Butterfly 评论功能。
搜索系统
后面在研究一下。
嵌入图片
1) 图片
在编写文章的时候,内部插入的图片的方法是可以将图片放在本地,然后在typora中编辑markdown文件写![image](/path/to/image.jpg)
等等方式,这样做本地可以显示,在hexo将博客上传到github的时候就没了,需要按照特定的方式来放图片以便hexo可以将图片上传到github,以github作为图床来得到图片的路径,下面是具体做法:
安装npm的包:
1 | npm install hexo-asset-image --save |
找到npm安装包的路径./node_modules/hexo-asset-image/index.js
,将它的内容替换为如下内容:
1 | ; |
编辑blog
文件夹下的_config.yml
文件,将第43行的:
1 | post_asset_folder: false |
替换为:
1 | post_asset_folder: true |
保存一下。
这个时候新建一个博客用来测试图片:
1 | hexo new "测试图片" |
在新建博客之后,会有一些与之前不一样的地方,除了生成一个测试图片插入.md
文件之外,还额外多了一个一摸一样名字的文件夹测试图片插入
,这里你随便找一张图片比如叫test.jpg
放到这个文件夹里面。
在对应的markdown文件中写上:
1 | ![image](test.jpg) |
然后hexo本地预览一下:
1 | hexo g |
之前你写的博客也想要添加图片?可以手工在blog/source/_posts
下建立一个和文章markdown文件相同名称的文件夹,把图片放进去,更改markdown文件,用hexo再生成一下就行了。
嵌入多媒体
emoji支持
安装一个库就可以:
1 | cd D:/博客/blog |
然后打开_config.yml
文件,在里面新增下面的配置信息:
1 | githubEmojis: |
网易云音乐
比如你想添加一个网易云音乐的播放按钮,你可以在markdown中添加这个代码:
1 | <iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 src="//music.163.com/outchain/player?type=2&id=1956202531&auto=0&height=66"></iframe> |
上面的auto
设置为0
是不自动播放,设置为1
是自动播放。
如何查找你想要的歌曲的代码呢?首先打开网易云音乐(其他的音乐我暂时还没尝试应该也可以),搜索或者查找到你想要的歌曲,这里我查找《快乐老家》,点击“生成外链播放器”,把文本框里面的
<iframe>...</iframe>
复制过来,直接粘贴到markdown相应的位置(不需要放到代码框里面)。
bilibili的视频
比如你想添加一个b站的视频的播放界面,可以在对应的视频下面比如天线宝宝央配旧版开头/压箱底自收藏,点击分享按钮
,然后选择嵌入代码
,代码会复制到你的剪贴板中:
1 | <iframe src="//player.bilibili.com/player.html?aid=938030801&bvid=BV1hT4y1Y7RF&cid=573164441&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe> |
但是这个页面的展示不是很完美,可以把上面的代码中添加一些东西:
1 | <iframe src="//player.bilibili.com/player.html?aid=938030801&bvid=BV1hT4y1Y7RF&cid=573164441&page=1&as_wide=1&high_quality=1&danmaku=0&autoplay=0" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true" width="100%" height="500" sandbox="allow-top-navigation allow-same-origin allow-forms allow-scripts"> </iframe> |
主要调整的是宽度和高度、再就是不进行自动播放。
百度地图
在百度地图里面找到你需要找的地方,点击百度给与的地点之后,点击分享
,然后把网址复制https://j.map.baidu.com/58/rnJ
下来,填到下面的src
后面:
1 | <iframe src="https://j.map.baidu.com/58/rnJ" width="100%" height="600px" frameborder="0" scrolling="No"></iframe> |
上面的width
和height
可以根据你自己的需要更改。
高级设置
你如果对于html
和css
语法比较了解的,可以自己去修改主题的内部的东西得到你自己想要的效果。
嵌入看板娘
一个可爱的纸片人跃然纸上不是很好吗!
其他主题
除了上面主题之外,你也可以去hexo主题列表 - themes看更多的主题,注意最好是选择标记有#中文
的主题,比如Next
、ButterFly
主题。但是我觉得Next
主题过于简洁,而且很容易和其他人的博客“撞衫”,色调太单调了;ButterFly
主题也还不错可以试一试。
你可以按照上面的更换主题的方式进行更换,只需要注意安装主题的依赖包,然后再对主题的配置进行细节的配置。
永久链接
最新写了几篇文章之后意识到一个很大的问题,文章的网页URL链接非常长,如果我把之前写的文章标题更改之后,其他引用这篇的文章的引用会失效,给别人分享的链接也会因此失效,搜了一下发现一个库可以解决这个问题,叫做hexo-abbrlink
,具体做法如下:
1 | # 以后安装库都进入这个文件夹 |
安装完成之后,用记事本打开这个文件夹下的_config.yml
文件,将原本的这一行注释更换为这一行:
1 | # permalink: :year/:month/:day/:title/ |
在下面额外粘贴这些内容:
1 | # abbrlink config |
保存文件。
1 | # 清理一下之前生成的文件 |
它将原本这样的链接:
1 | https://eternal-bug.github.io/2023/06/18/%E4%BD%BF%E7%94%A8github%E5%92%8CHexo%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/ |
转换为:
1 | https://eternal-bug.github.io/posts/196e9b33.html |
实际上网页后面的代码来自于markdown中,你会发现markdown文件头部多了一点东西,每一篇文章都不同:
1 | abbrlink: 196e9b33 |
注意:这样处理之后新的问题又出现了,更新之后的文章中的图片失效了,原因是hexo-abbrlink
和之前安装的hexo-asset-image
库冲突了,之前图片的路径是以文字标题作为路径索引,这里更改文章路径之后图片就找不到了。查询了一圈,最好的解决办法是,去foreveryang321/hexo-asset-image/index.js把里面的代码全部复制,替换掉node_modules/hexo-asset-image/index.js
里面的内容,然后再次hexo clean
、hexo g
就可以了。
访问统计
可以使用百度和谷歌的统计。这里使用ButterFly
主题了,默认自带了流量和访问计数统计。强烈推荐这个主题😄!
站点地图
我暂时没搞懂站点地图作用是什么,分别设置google和必应的站点地图
Google:https://search.google.com/search-console
必应:https://www.bing.com/webmasters
把自己网址填进去,让后把文件下载下来,拖到github的页面里面。
附加文档
使用Material for MkDocs 来生成有章节的技术文档,做一个链接到这里,目前正在琢磨!
下面会详细写一下ButterFly
主题的调教。
参考
搭建流程
- 超详细Hexo+Github博客搭建小白教程
- Tutorial:基于Hexo框架的GitHub个人主页搭建教程(前篇)
- Tutorial:基于Hexo框架的GitHub个人主页搭建教程(后篇)
- 使用Hexo搭建博客并部署到Github
主题
草稿
图片
永久链接
iframe
评论系统
Hexo + Butterfly 建站指南(四)Twikoo 评论系统
站点地图