一步步教你建博客:Hexo 博客搭建与基础配置

每个技术人多少都应该写几篇博客,可以选择发布在博客平台如:CSDN、简书;也可以发布于自己搭建的博客,简单好用。

本文记录了基于 Hexo 框架 + GitHub 搭建个人博客的过程,应该是足够清晰的,你可以按照此文进行实践,也期待看到你自己的博客。

本文的实践基于 Ubuntu 18.04 和 Deepin 15.7 环境,博客地址:Mupceet

环境搭建

Hexo 的介绍及详细信息请查看官方文档,以下记录实操的具体细节。

安装 Git

$ sudo apt install git

Hexo 文档中写的 Git 的安装命令为 sudo apt-get install git-core,这是因为老一点的 Ubuntu 中有一个软件也叫 GIT(GNU Interactive Tools),所以 Git 只能叫 git-core 了,后来因为 Git 的名气实在太大,所以 GNU Interactive Tools 就改名了,git 就变成了真正的 Git。

安装完成后记得配置一下:

$ git config --global user.email "you@example.com"
$ git config --global user.name "Your Name"

安装 Node.js

选择下载最新的 10.11.0 版本(2018-10-04),得到 node-v10.11.0-linux-x64.tar.xz,解压到 /opt/(适用于共享用户)或 /usr/local/(适用于用户个人资料)。以下以 /opt/ 为例。

$ cd ~/Download
$ tar -xvf node-v10.11.0-linux-x64.tar.xz
$ sudo mv node-v10.11.0-linux-x64 /opt

/opt/node-v10.11.0-linux-x64/bin 添加到 PATH 环境变量中,这样就可以从任意终端中执行 npm 命令了。

$ sudo vim /etc/profile

打开 /etc/profile 文件,增添以下内容,注意等号前后没有空格,保存退出。

# Node.js
export NODE_HOME=/opt/node-v10.11.0-linux-x64/bin
export PATH=$PATH:$NODE_HOME

为了使该环境变量生效,可以在终端中执行 source /etc/profile 或者 . /etc/profile,但这样只在当前终端中生效。要使得任意终端都生效,退出当前用户再登陆即可。

Deepin 下 zsh 使用 source 的方式会有问题,请使用注销再登录的方式

Node 自带 npm,所以装完应该会有某个版本的 npm。但 npm 相比 Node 更新更频繁,所以,要是想确保使用的是最新版本的,你可以执行以下命令:

$ npm install npm -g

安装 Hexo

$ npm install -g hexo-cli

如果网络条件不好——你懂的,比较难以下载成功,这个自行解决。

如果碰到权限问题,可以参考链接:处理npm权限问题

安装后可使用 hexo versionhexo -v 查看版本信息。一般来说不需要去关心这些信息,我就是看看……

hexo-cli: 1.1.0
os: Linux 4.15.0-20-generic linux x64
http_parser: 2.8.0
node: 10.11.0
v8: 6.8.275.32-node.28
uv: 1.23.0
zlib: 1.2.11
ares: 1.14.0
modules: 64
nghttp2: 1.33.0
napi: 3
openssl: 1.1.0i
icu: 62.1
unicode: 11.0
cldr: 33.1
tz: 2018e

建站及配置

建站初始化

选择在 Documents 目录下创建 blog 文件夹来存放源文件。

$ cd ~/Documents
$ hexo init blog
$ cd blog
$ npm install

初始化完成后,目录内容结构为如下内容:

.
├── _config.yml
├── node_modules
├── package.json
├── package-lock.json
├── scaffolds
├── source
└── themes

生成文件及本地调试

初始化后执行 hexo generatehexo g 可生成静态文件(public 文件夹)与缓存文件(data.json)。

然后我们执行 hexo serverhexo s 就可以启动本地服务器,访问网址 http://localhost:4000/ 就可以查看文章效果了。

初始效果

接下来就是部署网站等简单的操作,好了,本文到此为止,大家自行实践吧。

……

好吧,其实真正的重点才刚刚开始……

部署远程服务器

感谢 GitHub 提供的 Pages 服务,可用来部署静态网页。首先你得注册网站的账号,这里就不具体展开了。

注册账号之后,记得上传一下 SSH 公钥,便于部署、上传操作。具体操作请查看网站的帮助文档:

Github: Connecting to GitHub with SSH

创建 GitHub Pages

  1. 创建项目

创建一个名为 username.github.io 的项目,例如我创建的项目为 https://github.com/Mupceet/mupceet.github.io。从这个例子中可以看到,这里 username 大小写可以不完全对应。

  1. 部署内容

将 Hexo 生成的静态文件上传到该仓库中,就可以通过访问 username.github.io 来查看你的博客,也就是可以看到刚才本地调试时看到的网页了。这个上传过程会使用 hexo deploy 来操作。

部署

上面提到了要使用命令 hexo deploy 上传文件,这需要下载插件,并且要修改站点配置文件 _comfig.yml,关于这个配置文件后续会介绍,这里暂时先修改部署所需要的配置。

首先安装相关插件:

注意:插件下载时需要在博客的文件夹中,在本文就是 blog 文件夹

$ cd ~/Documents/blog
$ npm install hexo-deployer-git --save

然后修改配置,这里配置上传的仓库为 GitHub。以我的配置为例:

# Deployment
## Docs: https://hexo.io/docs/deployment.html
deploy:
  type: git
  repo:
    github: git@github.com:Mupceet/mupceet.github.io.git,master

最后执行 hexo deploy 或者 hexo d 就可以将其部署到服务器上。现在访问对应的域名就可以看到你自己的博客啦!

后续更新文章内容或者配置,标准流程如下:

$ hexo g
$ hexo s
$ hexo d

事实上,我每次本地做了修改,执行 hexo g 生成内容后,都会使用 hexo s -p 2333 --debug 然后访问 http://localhost:2333/ 查看排版格式是否正确、是否有错别字。加 debug 参数是为了可以在访问页面时看到调试信息,便于定位、解决问题。在调整到本地查看效果满意后,最后再 hexo d 部署到远程,完成一次博客的更新。

站点配置文件

上文提到了 _config.yml 这一配置文件,它是关于网站的一些配置,具体说明可见 Hexo 官方文档。以下对官网有详细说明的内容就不再赘述,优先查看官网文档也是个好习惯。

# Site 网站
# URL 网址
# Directory 目录
# Writing 文章
# Home page setting 主页相关设置
# Category & Tag 分类 & 标签
# Date / Time format 日期 / 时间格式
# Pagination 分页
# Extensions 插件

以上内容在官网中都有详细的说明介绍,在你搭建的开始,不需要在配置上面花费过多的精力,大部分保持默认设置即可。这里只补充说明有必要修改的部分。

Site 网站

这一部分是显示在页面上的重要基本信息,如网站的标题、作者、说明等。这一定是要修改的,以我的配置为例:

# Site
title: Mupceet # 博客标题
subtitle: Don't Repeat Yourself # 博客副标题
description:  君子坦荡荡 小人长戚戚 # 博客描述,部分主题会用来生成简介
keywords: # 通常建议包含网站的关键词
author: Mupceet # 博客作者,部分主题会用来显示作者
language: zh-Hans # 语言,具体需要查看主题theme说明
timezone: # 默认使用电脑的时区

URL 网址

这一部分配置你的博客链接的具体格式形式,我参照使用了 Android Developers Blog 的 URL 格式:

https://android-developers.googleblog.com/2018/10/kotlin-momentum-for-android-and-beyond.html

即:域名 + 年 + 月 + 以 - 为连接符的英文标题,因此修改配置如下:

# URL
## If your site is put in a subdirectory, set url as 'http://yoursite.com/child' and root as '/child/'
url: http://yoursite.com
root: /
# permalink: :year/:month/:day/:title/
permalink: :year/:month/:title/
permalink_defaults:

Home page setting 主页相关设置

默认配置文件中只写了 index_generator 这部分,也就是首页的配置,事实上,查看 node_modules 文件中,可以看到有以下几个 generator

├── hexo-generator-archive
├── hexo-generator-category
├── hexo-generator-index
├── hexo-generator-tag

这也表明了我们博客可以通过以上几个维度来展示你的文章,它们分别是归档、分类、索引、标签,其中对于分类与标签我个人理解是一篇文章最好使用一个类别(category)和多个标签(tag)。

分别查看这些 module 的 README 文件,可以将它们内容组合起来,还是以我的配置为例进行说明:

# path: Root path for your blogs index page. (default = '')
# per_page: Posts displayed per page. (0 = disable pagination)
# order_by: Posts order. (Order by date descending by default)
index_generator: # 首页文章列表页面
  path: ''
  per_page: 10 # 首頁显示多少篇文章,默认为10,如果值为0则不分页。由于首页会显示文章的摘要内容,建议不要取太大的数值,造成翻页定位困难
  order_by: -date # 排序,默认时间逆序,即最新的在最上面

archive_generator: # 归档文章列表页面
  per_page: 20 # 默认10个文章标题,由于仅显示标题,可适当设置为较大的数值
  yearly: true  # 生成年视图
  monthly: true # 生成月视图
  daily: false # 生成日视图,默认关
  order_by: -date # 排序

tag_generator: # 标签中各个标签下文章列表页面
  per_page: 20 # 默认10篇文章

category_generator: # 分类中各个分类下文章列表页面
  per_page: 20 # 默认10篇文章

Extensions 插件

Hexo 有强大的插件系统,丰富的插件给 Hexo 带来了生气。

上面部署一节提到了 deploy 插件。可以看到一个插件的生效不仅需要下载,可能还需要修改配置,后续我们会接触的几个插件皆是如此。

另一个插件就是主题(theme)。

## Themes: https://hexo.io/themes/
theme: landscape

可以看到默认的主题为 landscape,从显示效果上看显得少了些现代感。我们可以从 Themes 中选择更多好看优雅的主题。

你可以和我一样选择非常流行的 NexT 主题,它的介绍及说明见:精于心,简于形(新网址 https://theme-next.org 难产了),下面我们先简单介绍如何使用此主题。

Hexo 主题:NexT

作为开发者,我更喜欢使用 master 分支,这将包含最新的特性。

$ cd blog
$ git clone https://github.com/theme-next/hexo-theme-next themes/next

后续主题可以及时更新到最新版本。

$ cd blog/themes/next
$ git pull --rebase

现在,我们有两份主要的配置文件,其名称都是 _config.yml

  • blog/_config.yml:Hexo 本身的配置,我们称为站点配置文件
  • blog/themes/next/_config.yml:主题相关配置,我们称为主题配置文件

在 Hexo 中切换主题需要修改站点配置文件中的 theme 一节:

## Themes: https://hexo.io/themes/
theme: next

执行 hexo ghexo s 就可以查看使用了 NexT 主题的博客样式了。

NexT 主题效果

从预览可以看到,虽然站点配置文件设置了网站的语言为 zh-Hans 但还是英语显示(我是说主页与归档这两个词……),原因其实很简单,NexT 主题中,中文需要指定的 language 字段不是 zh-Hans,而是 zh-CN,所以 language 字段的配置需要查看具体的主题是如何定义。NexT 的语言列表对应关系可见 NexT 主题语言文件夹:themes/next/language/,修改之后再次预览就可以看到切换为中文显示了。

修改了站点配置文件已经可以使用上简洁的 NexT 主题了,而主题还可以进行配置使得显示效果更符合你的心意。

主题配置文件

外观(Scheme)

NexT 主题通过 Scheme 设置可展现出不同的外观。而且几乎可以说所有的配置都可以在 Scheme 之间共用。

修改主题配置文件 scheme 一节:

# Schemes
#scheme: Muse
#scheme: Mist
#scheme: Pisces
scheme: Gemini

当前提供了四种样式,去掉某一样式的行首注释即可使用,修改之后可预览查看显示效果。你可以修改选择自己喜欢的样式。

菜单(Menu)

在修改站点配置文件的时候说到博客可以显示归档、分类、标签等,下面展示如何修改主题配置文件使得能够真正地展示这几个页面。

修改主题配置文件 menu 一节:

menu:
  home: / || home
  #about: /about/ || user
  tags: /tags/ || tags # 取消注释,需要手动创建该页面
  categories: /categories/ || th # 取消注释,需要手动创建该页面
  archives: /archives/ || archive
  #schedule: /schedule/ || calendar
  #sitemap: /sitemap.xml || sitemap
  #commonweal: /404/ || heartbeat

取消 tags 和 categories 两行的注释,预览可以看到已经在界面上显示这两个菜单了,但单击选择时页面提示:Cannot GET /categories/ ,这是因为我们还未创建对应的页面。

$ hexo new page "tags"
INFO  Created: ~/Documents/blog/source/tags/index.md
$ hexo new page "categories"
INFO  Created: ~/Documents/blog/source/categories/index.md

执行命令后还需要修改 index.md 。

分类与标签页不需要标题,当然你也可以自定义一个合适的标题,选择去掉 title: 或修改它。另外,后续博文内容页会集成评论服务,页面会带有评论功能,因此添加 comments: false 在此页面上关闭评论功能。并声明对应的 type: tagstype: categories) 使得在文章中进行配置时可进行归类。

以 tags/index.md 修改为例(tags/index.md 和 categories/index.md 是一样的修改):

---
date: 2018-10-06 09:59:20
comments: false
type: tags
---

现在博客上就有了这两个页面,只不过,现在页面上还是空的,因为,文章并没有增加这两个属性,我们需要在文章头增加对应的内容才能显示到这两个页面上。

创建文章

目前为止还没有自己创建过文章,经过以上配置,我们就可以开始正式地创建文章了:)

创建新文章命令为:hexo new post "name",这是以 scaffolds/post.md 为模板创建文章,我们打开该模板,可以看到已经添加了 tags,我们还需要添加 categories,这样创建出的文章中添加的标签即可就可以归类到对应的页面下。如前所述,一篇文章最好使用一个类别(category)和多个标签(tag)。

---
title: {{ title }}
date: {{ date }}
categories:
- 分类
tags:
- 标签
- 其他
---

我们真正来创建博客的第一篇文章:

$ hexo new post "my-first-post"
INFO  Created: ~/Documents/blog/source/_posts/my-first-post.md

修改 my-first-post.md:

Tips: 使用 < !--more--> 将文章分为两部分,首页只展示前面部分,这样首页浏览更方便

---
title: my-first-post
date: 2018-10-06 10:10:24
categories:
- 技术向
tags:
- Android
- Performance
---

这是我发布的第一篇文章!

<!--more-->

这是更多的内容。

完成基础搭建

经过以上步骤,一个 Hexo 博客已经搭建出来了,并且我们可以愉快地发表文章了!

后续可修改的内容还有很多,可以给博客添加更多的功能如搜索、评论、阅读量统计等,还可以对博客进行个性化定制如头像、背景的修改等等。这些内容我们可以查看主题的说明文档、网站、配置文件,它们一般都对支持的配置进行了说明。

博客的修改暂且不表,后续还要考虑一个问题:程序员一般都不只一台电脑,想在不同电脑上都能维护博客怎么办?或者说以上配置、发布的内容丢失了,博客又怎么找回?可以看到,远程仓库中上传的只有编译好的网页文件,而没有这些博客源文件、文章、主题、配置等,因此我们需要合理备份这些内容来解决上面这个问题。

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

推荐阅读更多精彩内容