使用 Hexo + GitHub 搭建博客

这篇文章是从我的个人博客站点中搬过来的,后面不打算继续维护站点了,所以将之前的文章搬过来。 原文写于2017年3月12号。


很久以来,都想搭建属于自己的一个博客。折腾了几天,对比了 Jekyll 和 Hexo ,由于自己稍微有那么一点 Node.js 的基础,而对于 Ruby 比较陌生,于是就选择了 Hexo + GitHub 来搭建自己的博客小站。

Hexo简介

Hexo 是一个快速、简洁且高效的博客框架,支持Markdown书写文章。

前提环境

  • 安装 Node.js
    Hexo 是基于 Node.js 的,所以需要先安装 Node.js。
    到Node.js官网下载相应平台的最新版本,一路Next安装即可。我安装的Node.js版本是: v6.9.1 。
  • 安装git
    Windows平台下推荐安装最新版的Git for Windows,同样也是一路Next安装。我安装的Git for Windows 版本是: 2.12.0.windows.1 。
  • 申请GitHub账户
    托管自己的博客站点,并作为站点服务器。
    到GitHub官网申请就行
  • 配置ssh
    可以使用https来链接GitHub,但每次都要输入用户名和密码,且安全性较差。推荐使用ssh方式来与GitHub链接。具体的配置可以参考我的另一篇博客。

开启Hexo之旅

注意: 涉及到Hexo的命令最好在Git Bash中操作,否则可能无法正确使用Hexo。

安装Hexo

前提环境配置好后,就可以安装 Hexo 了。

$ npm install -g hexo-cli

或者

$ npm install -g hexo

输入 hexo 若出现 Usage: hexo <command> 表示已经安装成功。

建立自己的博客站点

博客站点对应一个文件夹,也就是你的站点根目录。

$ cd <你的站点根目录>      #最好是一个空的文件夹,这样有助于你查看和分析一个Hexo站点的目录结构
$ hexo init         #此句必须在Git Bash中输入,否则没有效果,仍然会跳转到Git Bash下,需再次cd到<你的站点根目录>来执行 `hexo init`

看到 INFO start blogging with Hexo! ,则表明已经在你的本地新建了一个博客站点。

顺便提一下,此时可以执行 hexo --version 可以查看 Hexo 版本。我的 Hexo 的版本是:3.2.2 。

站点目录中几个重要的文件和文件夹:

  • _config.yml: 网站的 配置 信息,您可以在此配置大部分的参数。
  • scaffolds: 模版文件夹.当你新建文章时,Hexo 会根据你指定的模板来建立文章。新建文章时,若不指定模板,则使用 post.md 模板来新建文章。你可以打开具体的模板文件,根据自己的需要进行修改。
  • source:站点的资源文件夹。其中 _posts 文件夹存放的时你的所有博客,你也可以在 source 文件夹下增加站点需要用到的其他资源,如图片文件夹或者其他 html 文件.
  • themes:主题文件夹。默认已经下载了 landscape 主题,并配置为当前使用的主题。

本地浏览

现在你可以在本地启动站点进行浏览了。

$ hexo server       #也可以简写为 `hexo s`,并且可以加上参数 `--debug`,这样在调试状态下启动站点,你可以看到启动站点所处理的文件以及后台处理请求的详细信息

看到 INFO Start processing ,表明已经成功启动站点。接下来,我们按照提示,打开浏览器,在浏览器地址栏中输入 http://localhost:4000,你将会看到属于自己的博客小站了,看着熟悉的 Hello World,是不是很激动啊。不过,此时的兴奋还有点早,因为现在的博客只有你自己看得到,还无法在互联网上浏览,也就是说你想要让广大博友看到你的博客,你还需要将你的站点部署到网络服务器中。最简便的方法还是将其托管到GitHub。

注意: hexo server 是会监视文件的变化的,也就是你的博客内容更改后,只需要在浏览器页面中刷新即可看到最新的内容。 带参数 -s 则不会监视文件的变化,一般用于生成环境。本篇博客默认这一步是以 hexo server 来启动站点的。若你发现浏览器页面刷新后看到的结果不是期望中的,则可尝试重启站点。

部署到GitHub

在你的GitHub中新建一个Repository,注意名称为 <你的GitHub用户名>.github.io (当然,也可以为其他名称,只不过这样的话,GitHub将会将改Repository当作普通的仓库来处理,需要你新建一个名为 gh-pages的Branch, 或者在Repository的 Settings 中将 GitHub Pages 下面的 Source 设置为 master branch; 同样后面的 _config.yml 的配置也需要更改)

回到本地配置你的站点根目录下的 _config.yml 文件。

配置 deploy 项为:

deploy:
    type: git
    repository: git@github.com:<你的GitHub用户名>/<你的GitHub用户名>.github.io.git
    branch: master

注意,如果你没有配置ssh连接GitHub的话,repository 配置为https方式。

配置好后,还需要安装 hexo-deployer-git 包。

$ npm install hexo-deployer-git --save

之后即可执行以下命令,将站点部署到GitHub:

$ hexo deploy       #也可以简写为 `hexo d`

看到提示 INFO Deploy done: git, 表明已将你的博客站点成功部署到GitHub。登录你的GitHub,进入相应的Repository,可以看到已经提交了很多的目录和文件。

是不是迫不及待了!在浏览器地址栏中输入 <你的GitHub用户名>.github.io ,正如意料中的一样,你将会看到自己的博客页面。此时的博客就是部署在互联网上的了,有网络的地方均能浏览你的文章。

站点配置

为了使博客更加个性化,你需要做一些配置。

在进行配置之前,先明确两个概念。

Hexo 通过两套配置文件来控制你的站点的样式、内容等,文件名均为 _congif.yml。其中一个位于站点根目录下,包含的是Hexo本身的配置,我们将其称为 站点配置文件;另一个位于主题目录下(<站点根目录>/themes/<主题名>/, 默认使用的主题是 landscape),用来控制与主题相关的配置,我们将其称为 主题配置文件

语言配置

你可能发现你的博客除了博文外到处都是看起来似乎很高端的英文,而你的博客主要是面对国内用户的,那么你可以设置博客所使用的语言。打开站点配置文件(路径为:<站点根目录>/_config.yml)

language: zh-CN

设置完成后,浏览器中刷新页面,查看效果。 注意看首页右边部分的 ARCHIVES 已经改为了 归档, ARTICLES RÉCENTS 已经改为了 最新文章

细心的你可能会发现,页面最顶部左边的菜单仍然还是英文。将其改为中文的方法是: 打开主题配置文件,更改以下参数的名字:

menu:
  Home: /
  Archives: /archives

更改后为:(当然,你可以改为任何你喜欢的名字)

menu:
  首页: /
  归档: /archives

你也可以增加其他的菜单,指向的地址可以是站点的某个文件或者其他任何可访问的网址。如增加一个跳转到 百度 的菜单:

menu:
    ...
    百度: http://www.baidu.com

再次刷新页面,即可看到修改后的效果。

标题、作者等配置

现在打开你的博客站点,首页你会看到一个很明显的 Hexo, 将网页拖到最下脚会看到左边有作者的名字,你可以修改站点配置文件中的以下参数:

title: <网站标题>
subtitle: <网站副标题>
description: <网站描述>
author: <你的名字>  

刷新页面,看看你的设置吧!

开始撰写你的博客

此时你的站点下就只有一篇 Hello World 的博文,你肯定希望将自己的经验、想法和心得与别人分享,那么我们开始撰写自己的博客吧。

$ hexo new "我的文章标题"

执行以上命令后,会在 站点根目录/source/_post/下新建一篇以你输入的标题命名的博客,为 *.md 格式的文件。使用任意文本编辑器或者专业的 Markdown 编辑器打开该文件,之后你就可以使用 Markdown 语法书写博客了。 (如果你还不熟悉Markdown语法,建议你先花一点时间学习一下,常用的标签就几个,比较简单。Markdown入门可以看我的另一篇博客

博客撰写完成后,重启站点(hexo s),即可在首页中看到你的博客,对自己的作品满意了就可以部署(hexo d)到GitHub。这就是每一篇博客从无到有再到发布的全过程。

到此,你的博客小站基本搭建完毕了。剩下的工作就是专心撰写博客,生产高质量的文字内容。

赶快把网址广播给你的小伙伴,分享你的喜悦吧!!

要说明的几个问题

hexo deploy

执行 hexo deploy 时,包含了两个步骤,一个时在本地生成静态文件,另外一个步骤时将生成的静态文件提交到你配置的GitHub中。
查看站点根目录,可以看到多了两个文件夹:

  • public: 生成的静态文件。该文件夹已经是静态的,不依赖于 Hexo,也就是说你可以将该文件夹拷贝部署到任何服务器中。
  • .deploy_git: 为 public 文件夹的一个副本,只是该文件夹为一个连接到GitHub的Git版本库。

若你只想在本地生成静态文件,而不同步到GitHub,可以执行:

$ hexo generate   #可以简写为 hexo g

参数配置

配置配置文件中,所有的参数 : 后面均需要有一个空格,否则启动站点时将不能读取配置文件,从而无法浏览配置效果。

一定要注意参数是区分大小写的。

语言配置

语言配置中,给出的参数值 zh-CN中文简体的意思。 为什么是这个值呢?你可以打开 <你的站点根目录>/themes/landscape/languages 文件夹,可是看到有许多个 *.yml 文件,这些文件的名字就可以作为 language 参数的值 (后缀名.yml不需填写), 换句话说,你可以设置 zh-CN 外的其他值,只不过这样的话,你的博客站点使用的将是其他国家或地区的语言。

站点重启

在Git Bash 中,按下 ctrl+c 停止之前启动的站点,再次执行 hexo s 重启站点。

新建博客

可以直接在 站点根目录/source/_post 文件夹下新建 *.md 文件来新建博客,但推荐使用 hexo new [博客使用的模板] <博客的标题> 命令 来新建博客。这样做的好处是,一方面你可以使用默认或者自定义的模板,自动为新建的博客增加说明信息;另一方面是,若你开启了资源文件管理功能,新建博客后会在与 *.md 文件同级的目录下新建一个与博客标题同名的文件夹,用于存放该博客用到的资源,如图片等。

需要注意,使用 hexo new 来创建新博客时,若博客的标题中含有空格,需要使用双引号 " 将其包起来,而新建的 *.md 文件名称则将空格使用 - 进行代替,资源文件夹同样如此(若开启的话),但打开 *.md 文件,其说明参数 title 则保持原样。

博客的说明信息

刚打开你新建的博客时,你会看到如下的内容:

---
title: 我的第一篇博客
date: 2017-03-10 14:50:31
tags:
---

这写内容是根据你的模板生成的(默认的模板为 站点根目录/scaffolds/post.md),你可以根据自己的需要进行修改。

生成静态文件后,这些内容不会出现在你的博客上,但他们是你的本篇博客的元数据(如果你不知道这个词的意思,请自行百度),说明了该篇博客的基本信息。你可以为博客添加如下一些说明:

- title: [博客的标题]
- date: [创作时间]
- categories:[分类] 
- tags: [标签]

categories 和 tags 都是以Markdown列表的形式列出,二者的区别是:categories是你的博客的分类,默认给出的列表其含义从上到下范围逐渐变小,如

categories:
- 编程
- C++
- 泛型

表示的是,该篇博客属于的类别为 编程 > C++ > 泛型
而tags是你的博客的关键字,没有顺序之分。

博客的这些说明信息,虽然不会出现在你的博客内容上,但他们会出现在你的页面中,如分类和标签均会出现在页面的右边,便于你对博客进行管理。

博客中图片的引用。

若你的博文中需要用到图片,则在 站点根目录/source 下新建一个 images 文件夹,用于存放你的图片,然后在博客中通过 [图片上传失败...(image-cb9512-1527432544395)] 的方式引用图片。

当然,将图片统一放在 iamges 文件夹,可能不是最好的方法,因为你的博客增加,用到的图片会越来越多,将所有图片都放在同一个文件夹,无论是图片命名还是对图片的管理,都非常不方便。针对这个问题,Hexo为我们提供了另外一个简单可行的方法:开启资源文件管理功能。

配置站点文件,将参数 post_asset_folder 设置为 true

post_asset_folder: true

这样设置以后,每一次通过 hexo new 新建博客时都会在与 *.md 文件同级的目录下自动创建一个与博客标题同名的文件夹,用于存放该博客用到的图片等资源文件。 要注意的是博客中引用图片的时候,其相对路径直接为图片的名称即可,不需包含图片所在的文件夹名。如,通过

hexo new "firstblog"

来新建博客,则 _post 文件夹目录如下:

.
|—— firstblog
|—— firstblog.md
|.

若你想在博客中加入一个 test.jpg 的图片,则先将 test.jpg 放入 firstblog 文件夹中,然后在 firstblog.md 文件中这样引用:

[图片上传失败...(image-784769-1527432544396)]

而不是:

[图片上传失败...(image-7231bc-1527432544396)]    #这真是一个坑,不过如果你看一下Hexo生成的静态文件的目录结构,你就会明白为什么要这样引用了。

如果你足够细心,那么你可能会发现,使用这种方式引用图片,仅能在博客正文中正常显示,而在博客站点的首页中无法加载图片。我会在另一篇博客中谈这个问题。

设置文章在首页显示的长度

如果你不想在首页显示你的整篇博客,可以在你的博客文件中加入 `` 标识,该标识之前的内容将会作为文章的摘要在首页中显示,并且点击摘要下方的 Read More (你也可以在主题配置文件中将其改写为 阅读全文) 会跳转到博客全文。

碰到问题怎么办

搭建博客的过程中肯定会遇到很多问题,不要着急,去 Hexo 官网和 GitHub中 Hexo 的 Issues 看看,说不定那里就有你碰到的问题的解决方法。并且很多 Issues 中,都有一些博友安利自己的博客,你可以点进去看看,学习一下别人的经验,取长补短。

关于主题(theme)

新建的站点默认使用的主题 landscape,风格极简,你不一定喜欢。你可以到官网的主题中淘自己喜欢的主题,下载下来,放到 themes 文件夹中,并在 站点配置文件 中进行配置即可。

一种方法是:

  • 在官网的主题页面中,定位自己喜欢的主题,记住名字

  • 到 Hexo 官网的GitHub中,进入页面 /source/_data/themes.yml 点击进入, 根据主题名搜索到你需要的主题,复制其 link

  • 在 Git Bash 中:

    $ cd 站点根目录
    $ git clone <主题的link值> themes/<主题名>

更改站点配置文件:

theme: <主题名>

重启站点,即可看到新更换的主题了。

站点的进一步改进

按照本文一步一步构建的站点,还属于比较简陋的小屋,还有许多地方需要改进,或者调整配置文件。包括但不限于:

  • 页面的样式、布局
  • 网站的访问量统计
  • 文章评论
  • 站内搜索
  • 社交平台分享
  • RSS 订阅
  • 音乐播放
  • 文章打赏
  • ...

参考:
Hexo官方网站


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容