Hexo+Github+Butterfly搭建博客

一、前言

​ 使用github pages服务搭建博客的好处有:

  • 全是静态文件,访问速度快;
  • 免费方便,不用花一分钱就可以搭建一个自由的个人博客,不需要服务器不需要后台;
  • 可以随意绑定自己的域名,不仔细看的话根本看不出你的网站是基于github的;
  • 数据绝对安全,基于github的版本管理,想恢复到哪个历史版本都行;
  • 博客内容可以轻松打包、转移、发布到其他平台;

二、前期准备

​ 在开始一切之前,你必须已经:

  • 有一个github账号
  • 安装了node.js、npm,并了解相关基础知识
  • 安装了git for windows

​ 本文所使用的环境:

三、Github创建仓库并配置SSH Key

1.创建仓库

​ 新建一个名为 “用户名.github.io”的仓库,比如你的github用户名为test,那么创建一个名为“test.github.io”的仓库,将来访问的地址就是http://test.github.io了。

​ 由此可见每一个github账户最多只能创建一个这样可以直接使用域名访问的仓库。而使用Github创建个人博客的本质其实就是将html、CSS、JS文件托管在github上,然后使用hexo管理并访问该仓库。

2.绑定域名

​ 当然也可以不绑定域名,就使用默认的xxx.github.io来访问,如果需要创建自己的域名,需要去购买注册。推荐godaddy或者国内的阿里云。

​ 绑定域名分两种,带www和不带www的,域名配置最常见有2种方式,CNAME和A记录,CNAME填写域名,A记录填写IP,由于不带www方式只能采用A记录,所以必须先ping一下“xxx.github.io”的IP,然后到你的域名DNS设置页,将A记录指向你ping出来的IP,将CNAME指向“xxx.github.io”,这样可以保证无论是否添加www都可以访问。另外说一句,在你绑定了新域名之后,原来的“xxx.github.io”并没有失效,而是会自动跳转到你的新域名。

3.配置SSH Key

​ 为什么要配置这个呢?因为你提交代码肯定要拥有你的github权限才可以,但是直接使用用户名和密码太不安全了,所以我们使用ssh key来解决本地和服务器的连接问题。这里就牵扯到公钥和私钥的问题,想了解的朋友可以去查询相关资料。

cd ~/.ssh 1 # 检查本机已存在的ssh密钥

​ 如果提示:No such file or directory 说明你是第一次使用git。

ssh -keygen -t rsa -C "邮件地址"

​ 然后连续3次回车,最终会生成一个文件在用户目录下,打开用户目录,找到.ssh\id_rsa.pub文件,记事本打开并复制里面的内容,打开你的github主页,进入个人设置 -> SSH and GPG keys -> New SSH key: 将刚复制的内容粘贴到key那里,title随便填,保存。

4.测试是否成功

ssh -T git@github.com # 注意邮箱地址不用改

​ 如果提示Are you sure you want to continue connecting (yes/no)? ,输入yes,然后会看到:

Hi "github用户名"! You've successfully authenticated, but GitHub does not provide shell access.

​ 看到这个信息说明SSH已配置成功!此时你还需要配置:

git config --global user.name "Laterfate" # github的用户名
git config --global user.email "xxx@xx.com" # github的注册邮箱

四、使用HEXO写博客

1.Hexo简介

​ Hexo是一个简单、快速、强大的基于 Github Pages 的博客发布工具,支持Markdown格式,有众多优秀插件和主题。

​ 官网:http://hexo.io

​ github:https://github.com/hexojs/hexo

2.原理

​ 由于github pages存放的都是静态文件,博客存放的不只是文章内容,还有文章列表、分类、标签、翻页等动态内容,假如每次写完一篇文章都要手动更新博文目录和相关链接信息,相信谁都会疯掉,所以hexo所做的就是将这些md文件都放在本地,每次写完文章后调用写好的命令来批量完成相关页面的生成,然后再将有改动的页面提交到github。

注意事项:

  • 很多命令既可以用Windows的cmd来完成,也可以使用git bash来完成,但是部分命令会有一些问题,为避免不必要的问题,建议全部使用git bash来执行;
  • hexo不同版本差别比较大,网上很多文章的配置信息都是基于2.x的,所以注意不要被误导;
  • hexo有2种_config.yml 文件,一个是根目录下的全局的_config.yml ,一个是各个theme 下的;

3.安装并初始化

npm install 1 -g hexo # -g表示全局安装

​ 在电脑的某个地方新建一个名为hexo的文件夹(名字可以随便取),比如我的是F:\BLOG\Hexo ,由于这个文件夹将来就作为你存放代码的地方,所以最好不要随便放。

cd /F/BLOG/Hexo/
hexo init

​ hexo会自动下载一些文件到这个目录,包括node_modules。

hexo g # 生成本地文件
hexo s # 启动服务,可以直接在4000端口监测

​ 执行以上命令之后,hexo就会在public文件夹生成相关html文件,这些文件将来都是要提交到github去的。

​ hexo s 是开启本地预览服务,打开浏览器访问 http://localhost:4000 即可看到内容,很多人会碰到浏览器一直在转圈但是就是加载不出来的问题,一般情况下是因为端口占用的缘故,因为4000这个端口太常见了,解决端口冲突问题请参考这篇文章:http://blog.liuxianan.com/windows-port-bind.html

​ 第一次初始化的时候hexo已经帮我们写了一篇名为 Hello World 的文章,默认的主题比较丑。

4.修改主题

​ 既然默认主题很丑,那我们别的不做,首先来替换一个好看点的主题。这是官方主题链接:https://hexo.io/themes/。

​ 下载主题方式(以butterfly为例):

cd /F/BLOG/Hexo
git clone https://github.com/jerryc127/hexo-theme-butterfly.git themes/butterfly

​ 下载后主题都在themes文件夹内。修改_config.yml 中的theme: landscape 改为theme: butterfly ,然后重新执行hexo g 来重新生成。

​ 如果出现一些莫名其妙的问题,可以先执行hexo clean 来清理一下public的内容,然后再来重新生成和发布。

5.上传到Github

​ 如果你一切都配置好了,发布上传很容易,一句hexo d 就搞定,当然关键还是你要把所有东西配置好。首先,ssh key肯定要配置好。其次,配置_config.yml 中有关deploy的部分:

deploy:
type: git
repository: git@github.com:Laterfate/Laterfate.github.io.git
branch: master

​ 此时直接执行hexo d 的话一般会报如下错误:

Deployer not found: github 或者 Deployer 1 not found: git

​ 原因是还需要安装一个插件:

npm install hexo-deployer-git --save

​ 部署这个命令一定要用git bash,否则会提示Permission denied (publickey).

​ 打开你的git bash,输入hexo d 就会将本次有改动的代码全部提交,没有改动的不会。

6.常用Hexo命令

hexo new "postName" #新建文章
hexo new page "pageName" #新建页面
hexo generate #生成静态页面至public目录
hexo server #开启预览访问端口(默认端口4000,'ctrl + c'关闭server)
hexo deploy #部署到GitHub
hexo help # 查看帮助
hexo version #查看Hexo的版本

​ 上述命令一般可缩写成:

hexo n == hexo new
hexo g == hexo generate
hexo s == hexo server
hexo d == hexo deploy

​ 本地写完博客,一般上传流程是:

hexo g # 生成刚写完的博客的相关文件
hexo d # 上传文件到github
hexo s # 一般上传不是立刻完成,需要一段时间,但是可以开启预览访问端口直接看到结果

8.Hexo文件夹解析

|— .deploy_git

|— .github

|— .node_modules

|— public

|— scaffolds

​ |— draft.md

​ |— page.md

​ |— post.md

|— source

​ |— _posts

​ |— _data

​ |— categories

​ |— etc. pages

|— themes

​ |— butterfly

​ |— source

​ |— _config.yml

|— .gitignore

|— _config.landscape.yml

|— _config.yml

|— db.json

|— package.json

|— package-lock.json

.deploy_git:.deploy_git:将public文件夹的内容提交到Github后生成,内容与public文件夹基本一致, 本人还没试过。关系大致是:source -> public -> .deploy_git 执行hexo generate,根据source,更新 public。执行hexo deploy,根据public,更新 .deploy_git。了解了这三个文件夹的关系,也就了解为什么自定义域名需要添加的 CNAME 文件要在 public 文件夹下创建了。

.node_modules:存储Hexo需要的其他node.js模块,以后安装的hexo相关模块也放在这里。框架的基本参数信息和它所依赖的插件,在 npm 安装时使用 –save 保存进去

public:public文件夹是hexo g 编译生成静态文件后自动生成的。将source文件夹里的Markdown文档,转换成index.html。再结合主题进行渲染成我们最终看到的博客。hexo clean会清除 db.json 和 public 文件夹下的所有文件。

scaffolds:本意是 “脚手架” 的意思,这里引申为模板文件夹,包含pagepostdraft三种模板,分别对应 页面、要发布的文章、草稿。当你 hexo new <layout(布局)> <title>的时候,Hexo 会根据该文件夹下的对应文件进行初始化构建。

source:资源文件夹。存储直接来自用户的文件, 用来存放图片、Markdown文档(文章、草稿)、各种页面(分类、关于页面等)。

themes:主题文件夹,存储主题。每一个主题,都有一个单独的文件夹。默认主题为landscape,其它主题可以在 Github 上免费下载使用。

_config.yml文件:网站的全局配置文件,设置包括网站标题、作者和描述信息等,hexo的官方教程参照https://hexo.io/zh-cn/docs/configuration 。 在根目录和每个theme目录下都会有,这里面都是一些全局或各自主题的配置,每个参数的意思都比较简单明了,因为博主用的是butterfly,butterfly的官方教程可参考:https://butterfly.js.org/posts/dc584b87/。 需要特别注意的地方是,冒号后面必须有一个空格,否则可能会出问题。

db.json:hexo g后生成的临时文件存储在这里,public中也会有相同内容。

package.json:用来查看Hexo的版本以及相关依赖包的版本。新安装的依赖包,也会保存在node_module文件夹下。

package-lock.json:锁定安装时的包的版本号,并且需要上传到git,以保证其他人在npm install时大家的依赖能保证一致。

五、写博客

1.新建博文

​ 定位到hexo根目录,执行命令:

cd /F/BLOG/Hexo/
hexo new 'my-first-blog' # " " 内为博客标题

​ hexo会根据模板(post_formatter)scaffolds/post.md帮我们在/source/_posts下生成相关的md文件(整个博客所有的博文都在这个文件夹下),我们只需要打开这个文件可以写博客了,一般会默认生成一些内容(根据post_formatter)。post_formatter格式如下,是scafflods/post.md中固定的。我们只需要根据填入 categories,就可以实现自动分类!**注意:categories要用””,且前面空一格!这个文章分类类别随意写,但最好统一一下,博主就在source/_posts/**下建了一个可选types.txt,每次都可以参考。

---
title: postName #文章页面上的显示名称,一般是中文
date: 2013-12-02 15:30:16 #文章生成时间,一般不改,当然也可以任意修改
categories: 默认分类 #分类
tags: [tag1,tag2,tag3] #文章标签,可空,多标签请用格式,注意:后面有个空格
description: 附加一段文章摘要,字数最好在140字以内,会出现在meta的description里面
---
以下是正文

​ 那么hexo new page 'postName' 命令和hexo new 'postName' 有什么区别呢?前一个是在hexo/public/下生成postName目录,目录中还有index.html文件,但是它不会作为文章出现在博文目录。也就是说博文都在Hexo/source/下。

2.发布博文

​ 写好MD文件后,在hexo根目录下打开Git bash:

hexo g # 根据MD博文生成静态网页文件至public等中
hexo d # 上传内容至github
hexo s # 可选。开启服务,可以本地端口监听

3.如何让博文列表不显示全部内容

​ 默认情况下,生成的博文目录会显示全部的文章内容,如何设置文章摘要的长度呢?

​ 答案是在合适的位置加上 即可,例如:

# 前言
使用github pages服务搭建博客的好处有:
1. 全是静态文件,访问速度快;
2. 免费方便,不用花一分钱就可以搭建一个自由的个人博客,不需要服务器不需要后台;
3. 可以随意绑定自己的域名,不仔细看的话根本看不出来你的网站是基于github的;
<!--more-->
4. 数据绝对安全,基于github的版本管理,想恢复到哪个历史版本都行;
5. 博客内容可以轻松打包、转移、发布到其它平台;
6. 等等;

六、有用的网站

​ 参考:http://www.cnblogs.com/zhcncn/p/4097881.html

​ Hexo官网教程:https://hexo.io/zh-cn/docs/configuration.html

​ Hexo github:https://github.com/hexojs/hexo

​ butterfly github:https://github.com/jerryc127/hexo-theme-butterfly

​ butterfly官网教程:https://butterfly.js.org/posts/dc584b87/

​ 文章封面图:https://www.pexels.com/zh-cn/

​ 顶部图:https://wallroom.io/

​ 图标名:https://fontawesome.com/icons?from=io

​ 图床:https://imgse.com/