该文章仅用于记录学习以及分享自己的实践过程
前言: 想弄个博客网站,就会联想到不得有台服务器吗?不得搞数据库吗?不得注册域名吗?没事,如果都没有,那照样是能搭建一个博客的。这里就要记录如何使用GitHub来建属于自己的博客。
安装环境
Node
下载地址:nodejs.org/zh-cn/downl… 可以安装 Stable 版本。安装完毕之后,确保环境变量配置好,能正常使用 npm 命令
Hexo
Hexo是一个博客框架,Hexo 官方还提供了一个命令行工具,用于快速创建项目、页面、编译、部署 Hexo 博客,所以在这之前我们需要先安装 Hexo 的命令行工具。
安装命令npm install -g hexo-cli
安装完毕后可以输入hexo -v查看是否有版本号,确保环境变量配置好,能正常使用 hexo 命令
创建项目
- 我们使用 Hexo 的命令行创建一个项目,首先使用新建一个文件夹,改为你需要的名字(建议纯英文),打开命令行输入下面命令:
hexo init {name} //name是你的项目名
看到终端输出这样就完成了,文件夹下就会出现 Hexo 的初始化文件,包括 themes、scaffolds、source 等文件夹,这些内容暂且先不用管是做什么的,我们先知道有什么,然后一步步走下去看看都发生了什么变化
- 进入新生成的文件夹里面,然后调用 Hexo 的 generate 命令,将 Hexo 编译生成 HTML 代码,运行
hexo generate命令后,可以看到输出结果里面包含了 js、css、font 等内容,并发现他们都处在了项目根目录下的 public 文件夹下面了 - 我们利用 Hexo 提供的 server 命令把博客在本地运行起来
hexo server,运行之后命令行输出如下
INFO Start processing
INFO Hexo is running at http://localhost:4000 . Press Ctrl+C to stop.
点开本地 4000 端口上就可以查看博客站点了,如图所示:
到这里就已经把静态博客的架子已经搭建出来了
开始部署
接下来我们把这个博客架子放到GitHub Pages上面看是否能成功,成功之后我们可以再进行博客样式
- 在部署之前我们需要先知道博客的部署地址,它需要对应 GitHub 的一个项目地址,首先在 GitHub 新建一个仓库,名称为 {username}.github.io,注意这个名比较特殊,必须要是 github.io 为后缀结尾的
建成后打开项目文件根目录下的 _config.yml 文件,找到 Deployment 这个地方,把刚才新建的 Repository 的地址贴过来,然后指定分支为 master 分支,最终修改为如下内容:
# Deployment## Docs: https://hexo.io/docs/deployment.html
deploy:
type: git
repo: {git repo ssh address}
branch: master
修改完后还需要额外安装一个支持 Git 的部署插件,名字叫做 hexo-deployer-git,有了它我们才可以顺利将其部署到 GitHub 上面,安装命令npm install hexo-deployer-git --save,安装完后就可以继续我们的部署
- 部署命令还是使用我们的hexo命令输出
hexo deploy
运行到这步踩坑,没有在GitHub配置了ssh的话会让你输入,不然会一直运行失败,在GitHub配置好ssh就可以上传成功了。不会ssh配置可以点击教程 成功后可以看到GitHub上传了什么
完成上面就可以实现自己的博客了,但是还没有配置好自己喜欢的主题和标题,hexo是支持修改站名和描述等等。 修改根目录下的 _config.yml 文件,找到 Site 区域,这里面可以配置站点标题 title、副标题 subtitle 等内容、关键字 keywords 等内容,比如我的就修改为如下内容:
# Site
title: 白墙博客
subtitle: '一面白墙正在绘画'
description: '主要编程为JavaScript、TypeScript、vue3.x'
keywords: 'JavaScript,TypeScript,vue3.x,Es系列,Css系列'
author: 白墙
language: zh-CN
timezone: ''
三句命令下来,这样就完成了站点基本信息的配置,完成之后可以看到一些基本信息就修改过来了,页面效果如下:
更换主题
GitHub上有很多主题都可以拉取下拉使用更改,目前 Hexo 里面应用最多的主题基本就是 Next 主题了,它支持的插件和功能也极为丰富,配置了这个主题,我们的博客可以支持更多的扩展功能,比如阅览进度条、中英文空格排版、图片懒加载等等。 主题的 GitHub 地址是:github.com/theme-next/… master 分支 Clone 下来。 进入项目的根目录打开终端,运行下面命令
git clone https://github.com/theme-next/hexo-theme-next themes/next
github.com/theme-next/hexo-theme-next themes/next
执行完毕之后 Next 主题的源码就会出现在项目的 themes/next 文件夹下。
然后我们需要修改下博客所用的主题名称,修改项目根目录下的 _config.yml 文件,找到 theme 字段,修改为 next 即可
然后本地重新开启服务,访问刷新下页面,就可以看到 next 主题就切换成功了,预览效果如下:
主题样式
next提供很多样式,风格不变,但整个布局位置不太一样,通过修改scheme字段即可,注意是next文件下的_config.yml
刷新页面之后就会变成这种布局
头像
avatar 这个就类似站点的头像,如果设置了这个,会在站点的作者信息旁边额外显示一个头像。红色箭头指向
把需要的图片放置themes/next/source/images/avatar.png 路径,然后在_config.yml文件下更改avatar配置,url位置上更改正确的路径
还有另外两个配置,rounded是配置是否为圆形,rotated鼠标移动过去是否可旋转
RSS
RSS订阅是站点用来和其他站点之间共享内容的一种简易方式(也叫聚合内容),即Really Simple Syndication(简易信息聚合)。通常被用于新闻和其他按顺序排列的网站。
博客一般是需要 RSS 订阅的,如果要开启 RSS 订阅,这里需要安装一个插件,叫做 hexo-generator-feed,安装完成之后,站点会自动生成 RSS Feed 文件,安装命令npm install hexo-generator-feed --save,安装完成之后不需要其他的配置,以后每次编译生成站点的时候就会自动生成 RSS Feed 文件了
代码块
博客写技术文必定出现的代码块,next也可以配置修改,修改 _config.yml 文件的 codeblock 区块如下
设置完如下:
阅读进度
reading_process,阅读进度。大家可能注意到有些站点的最上侧会出现一个细细的进度条,代表页面加载进度和阅读进度,修改 _config.yml 如下:
设置完如下:
书签
bookmark,书签,可以根据阅读历史记录,在下次打开页面的时候快速帮助我们定位到上次的位置,大家可以根据喜好开启和关闭
github_banner
在一些技术博客上,大家可能注意到在页面的右上角有个 GitHub 图标,点击之后可以跳转到其源码页面,可以为 GitHub Repository 引流,permalink设为自己的GitHub链接,title是鼠标滑动过去显示的标题
评论
由于 Hexo 的博客是静态博客,而且也没有连接数据库的功能,所以它的评论功能是不能自行集成的,但可以集成第三方的服务。Next 主题里面提供了多种评论插件的集成,有 changyan | disqus | disqusjs | facebook_comments_plugin | gitalk | livere | valine | vkontakte 这些。这里使用gitalk。它是利用 GitHub 的 Issue 来当评论,样式也比较不错。 首先需要在 GitHub 上面注册一个 OAuth Application,链接为:github.com/settings/ap… Client ID、Client Secret 就可以了。
首先需要在 _config.yml 文件的 comments 区域配置使用 gitalk
# Multiple Comment System Support
comments:
# Available values: tabs | buttons
style: tabs
# Choose a comment system to be displayed by default.
# Available values: changyan | disqus | disqusjs | facebook_comments_plugin | gitalk | livere | valine | vkontakte
active: gitalk
然后找到 gitalk 配置,添加它的各项配置:
# Gitalk
# For more information: https://gitalk.github.io, https://github.com/gitalk/gitalk
gitalk:
enable: true
github_id: white-wall
repo: white-wall.github.io # Repository name to store issues
client_id: {your client id} # GitHub Application Client ID
client_secret: {your client secret} # GitHub Application Client Secret
admin_user: white-wall # GitHub repo owner and collaborators, only these guys can initialize gitHub issues
distraction_free_mode: true # Facebook-like distraction free mode
# Gitalk's display language depends on user's browser or system environment
# If you want everyone visiting your site to see a uniform language, you can set a force language value
# Available values: en | es-ES | fr | ru | zh-CN | zh-TW
language: zh-CN
添加上面配置后刷新后就会出现这样的样式
无刷新加载
可能大家听说过 Ajax,没听说过 pjax,这个技术实际上就是利用 Ajax 技术实现了局部页面刷新,既可以实现 URL 的更换,又可以做到无刷新加载。
要开启这个功能需要先将 pjax 功能开启,然后安装对应的 pjax 依赖库,首先修改 _config.yml 修改pjax: true
切换到 next 主题文件下,然后安装依赖库:
$ cd themes/next
$ git clone https://github.com/theme-next/theme-next-pjax source/lib/pjax
更多主题修改等配置可在hexo.io/docs/ 官网查看
文章
一开始生成后细心的hexo已经给出这行命令了
hexo new hello-hexo运行这行命令就会出现在 source/_posts 文件夹下,是 MarkDown 格式。
在文章开头通过如下格式添加必要信息:
---
title: 标题 # 自动创建,如 hello-worlddate:
日期 # 自动创建,如 2019-09-22 01:47:21
tags:
- 标签1
- 标签2
- 标签3
categories:
- 分类1
- 分类2
---
开头下方撰写正文,MarkDown 格式书写即可。
这样在下次编译的时候就会自动识别标题、时间、类别等等,另外还有其他的一些参数设置,可以参考文档:hexo.io/zh-cn/docs/…
标签页
跟新建文章一样,在目录下输入hexo new page tags执行这个命令之后会自动帮我们生成一个 source/tags/index.md 文件,也是MarkDown格式的。我们可以在tags文件内我们可以自行添加一个 type 字段来指定页面的类型,如图所示:
在刚刚新建的文章文件中设置,如图所示:
设置完在主题的 _config.yml 文件将这个页面的链接添加到主菜单里面,修改 menu 把tags#去掉就可以达到打开标签页的效果,然后就可以到页面查看效果
搜索页
添加搜索功能,需要先安装一个插件,叫做 hexo-generator-searchdb,命令如下:
npm install hexo-generator-searchdb --save
然后在项目的 _config.yml 里面添加搜索设置如下:
search:
path: search.xml
field: post
format: html
limit: 10000
然后在主题的 _config.yml 里面修改如下:
# Local search
# Dependencies: https://github.com/wzpan/hexo-generator-search
local_search:
enable: true
# If auto, trigger search by changing input.
# If manual, trigger search by pressing enter key or search button.
trigger: auto
# Show top n results per article, show all results by setting to -1 top_n_per_article: 5
# Unescape html strings to the readable one.
unescape: false
# Preload the search data when the page loads.
preload: false
404页面
页面都需要有个404状态页面,博客也不例外,直接在根目录 source 文件夹新建一个 404.md 文件即可,内容可以仿照如下:
---
title: 404 Not Found
date: 2021-09-20 10:41:27
---
<center>
对不起,您所访问的页面不存在或者已删除。
您可以<a href="https://blog.white-wall.cn>">点击此处</a>返回首页。
</center>
<blockquote class="blockquote-center">
whiteWall
</blockquote>
新建完也要在主题_config.yml中打开404的#
部署脚本
其实方便后面一行代码就可以直接完成博客更新来配置,在根目录下新建一个 deploy.sh 的脚本文件,内容如下:
这样我们在部署发布的时候只需要执行:
sh deploy.sh
自定义域名
GitHub还支持自定义域名的设置,在github项目 setting滑到看到page,设置完就可以看到这样提示
有一个值得注意的地方,如果配置了自定义域名,在目前的情况下,每次部署的时候这个自定义域名的设置是会被自动清除的。所以为了避免这个情况,我们需要在项目目录下面新建一个 CNAME 文件,路径为 source/CNAME,内容就是自定义域名。
比如我就在 source 目录下新建了一个 CNAME 文件,内容为
blog.white-wall.cn