每个技术人多少都应该写几篇博客,可以选择发布在各大平台如:简书、掘金等;也可以发布于自己搭建的博客。
本文记录了基于 Hexo 框架 + GitHub 搭建个人博客的过程,你可以按照此文进行实践,也期待看到你自己的博客。
本文的实践基于 Deepin 15.11, 博客地址:Mupceet
环境搭建
Hexo 的介绍及详细信息请查看官方文档,以下记录实操的具体细节。
安装 Git
1 | 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。
安装完成后记得配置一下:
1 | git config --global user.email "you@example.com" |
安装 Node.js
建议参考 Ubuntu 安装 Node.js 的正确姿势使用 NVM 方式进行安装。(2020-02-08)
根据 NVM 的 Github 仓库指导,执行以下命令完成安装:
1 | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.2/install.sh | bash |
再下载 node:
1 | 安装最新版本 node |
可以执行命令看是否可以查看 node 版本确保生效。
1 | node -v |
Node 自带 npm
,所以装完应该会有某个版本的 npm
。但 npm
相比 Node 更新更频繁,所以,要是想确保使用的是最新版本的,你可以执行以下命令:
1 | npm install npm -g |
安装 Hexo
安装包时常因为网络原因迟迟无法完成下载。这时候,你需要淘宝 NPM 镜像,使用方法很简单:
- 可以使用定制的 cnpm (gzip 压缩支持) 命令行工具代替默认的 npm:
1 | npm install -g cnpm --registry=https://registry.npm.taobao.org |
- 或者直接通过添加 npm 参数 alias 一个新命令:
1 | alias cnpm="npm --registry=https://registry.npm.taobao.org \ |
后续对应的 npm
命令只要替换成 cnpm
即可。
1 | npm install -g hexo-cli |
安装后可查看版本信息。一般来说不需要去关心这些信息,我只是看看……
1 | hexo -v |
建站及配置
建站初始化
选择在 Documents 目录下创建 blog 文件夹来存放源文件。
1 | cd ~/Documents |
初始化完成后,目录内容结构为如下内容:
1 | . |
生成文件及本地调试
初始化后执行 hexo generate
或 hexo g
可生成静态文件(public
文件夹)与缓存文件(data.json
)。
然后我们执行 hexo server
或 hexo s
就可以启动本地服务器,访问网址 http://localhost:4000/
就可以查看文章效果了。
此处本该有预览图,但你已经看到这里了,看自己的效果吧:)
接下来就是部署网站等简单的操作,好了,本文到此为止,大家自行实践吧。
……
好吧,重点配置在后面。
部署远程服务器
感谢 GitHub 提供的 Pages 服务,可用来部署静态网页。首先你有这个网站的账号,这里就不具体展开了。
注册账号之后,记得上传一下 SSH 公钥,便于部署、上传操作。具体操作请查看网站的帮助文档:Github: Connecting to GitHub with SSH
创建 GitHub Pages
创建项目
创建一个与你用户名对应的项目:
username.github.io
,例如我创建的项目为https://github.com/Mupceet/mupceet.github.io
。从这个例子中可以看到,这里 username 大小写可以不完全对应。
部署内容
将 Hexo 生成的静态文件上传到该仓库中,就可以通过访问
username.github.io
来查看你的博客,也就是可以看到刚才本地调试时看到的网页了。这个上传动作可以使用 Git 手动操作,将 Public 文件夹的内容 Push 到仓库的主分支上,但更建议使用hexo deploy
来操作。
部署
上面提到了要使用命令 hexo deploy
上传文件,这需要下载插件,并且要修改站点配置文件 _comfig.yml
,关于这个配置文件后续会介绍,这里暂时先修改部署所需要的配置。
首先安装相关插件:
注意:插件下载时需要在博客的文件夹中,在本文就是 blog 文件夹
1 | cd ~/Documents/blog |
然后修改配置,以我的配置为例:
1 | # Deployment |
当然,该插件还支持同时上传内容到不同的仓库,如果有需求可以自行探索。
最后执行 hexo deploy
或者 hexo d
就可以将其部署到服务器上。现在访问对应的域名 username.github.io
就可以看到你自己的博客啦!
后续更新文章内容或者配置,标准流程如下:
1 | hexo g |
事实上,我每次本地做了修改,执行 hexo g
生成内容后,都会使用 hexo s -p 2333 --debug
然后访问 http://localhost:2333/
查看排版格式是否正确、是否有错别字。加 debug 参数是为了可以在访问页面时看到调试信息,便于定位、解决问题。在调整到本地查看效果满意后,最后再 hexo d
部署到远程,完成一次博客的更新。
站点配置文件
上文提到了 _config.yml
这一配置文件,它是关于网站的一些配置,具体说明可见 Hexo 官方文档。以下对官网有详细说明的内容就不再赘述,优先查看官网文档也是个好习惯。
1 | # Site 网站 |
以上内容在官网中都有详细的说明介绍,在你搭建的开始,不需要在配置上面花费过多的精力,大部分保持默认设置即可。这里只补充说明有必要修改的部分。
Site 网站
这一部分是显示在页面上的重要基本信息,如网站的标题、作者、说明等。这一定是要修改的,以我的配置为例:
1 | # Site |
URL 网址
这一部分配置你的博客链接的具体格式形式,我参照使用了 Android Developers Blog 的 URL 格式:
https://android-developers.googleblog.com/2018/10/kotlin-momentum-for-android-and-beyond.html
即:域名 + 年 + 月 + 以 - 为连接符的英文标题,因此修改配置如下:
1 | # URL |
Home page setting 主页相关设置
默认配置文件中只写了 index_generator
这部分,也就是首页的配置,事实上,查看 node_modules
文件中,可以看到有以下几个 generator
:
1 | ├── hexo-generator-archive |
这也表明了我们博客可以通过以上几个维度来展示你的文章,它们分别是归档、分类、索引、标签,其中对于分类与标签我个人理解是一篇文章最好使用一个类别(category)和多个标签(tag)。
分别查看这些 module 的 README 文件,可以将它们内容组合起来,还是以我的配置为例进行说明:
1 | # path: Root path for your blogs index page. (default = '') |
Extensions 插件
Hexo 有强大的插件系统,丰富的插件给 Hexo 带来了生气。
上面部署一节提到了 deploy
插件安装与使用。可以看到一个插件的生效不仅需要下载,可能还需要修改配置,后续我们会接触的几个插件皆是如此。
另一个插件就是主题(theme)。
1 | ## Themes: https://hexo.io/themes/ |
可以看到默认的主题为 landscape
,我们可以从 Themes 中选择更多好看优雅的主题。
你可以和我一样选择非常流行的 NexT 主题,它的介绍及说明见:精于心,简于形,另外也可查看官方博客,下面我们先简单介绍如何使用此主题。
Hexo 主题:NexT
作为开发者,我更喜欢使用 master 分支,这将包含最新的特性。
1 | cd blog |
后续主题可以及时更新到最新版本。
1 | cd blog/themes/next |
现在,我们有两份主要的配置文件,其名称都是 _config.yml
:
blog/_config.yml
:Hexo 本身的配置,我们称为站点配置文件
blog/themes/next/_config.yml
:主题相关配置,我们称为主题配置文件
在 Hexo 中切换主题需要修改站点配置文件中的 theme
一节:
1 | ## Themes: https://hexo.io/themes/ |
执行 hexo g
和 hexo s
就可以查看使用了 NexT 主题的博客样式了。
此处本该有预览图,但你已经看到这里了,看自己的效果吧:)
从预览可以看到,虽然站点配置文件设置了网站的语言为 zh-Hans
但还是英语显示(我是说主页与归档这两个词……),原因其实很简单,NexT 主题中,中文需要指定的 language
字段不是 zh-Hans
,而是 zh-CN
,所以 language
字段的配置需要查看具体的主题是如何定义。NexT 的语言列表对应关系可见 NexT 主题语言文件夹:themes/next/language/
,修改之后再次预览就可以看到切换为中文显示了。
修改了站点配置文件已经可以使用上简洁的 NexT 主题了,而主题还可以进行配置使得显示效果更符合你的心意。
主题配置文件
外观(Scheme)
NexT 主题通过 Scheme 设置可展现出不同的外观。而且几乎可以说所有的配置都可以在 Scheme 之间共用。
修改主题配置文件 scheme
一节:
1 | # Schemes |
当前提供了四种样式,去掉某一样式的行首注释即可使用,修改之后可预览查看显示效果。你可以修改选择自己喜欢的样式。
菜单(Menu)
在修改站点配置文件的时候说到博客可以显示归档、分类、标签等,下面展示如何修改主题配置文件使得能够真正地展示这几个页面。
修改主题配置文件 menu
一节:
1 | menu: |
取消 tags 和 categories 两行的注释,预览可以看到已经在界面上显示这两个菜单了,但单击选择时页面提示:Cannot GET /categories/
,这是因为我们还未创建对应的页面。
1 | hexo new page "tags" |
执行命令后还需要修改 index.md 。
分类与标签页不需要标题,当然你也可以自定义一个合适的标题,选择去掉 title:
或修改它。另外,后续博文内容页会集成评论服务,页面会带有评论功能,因此添加 comments: false
在此页面上关闭评论功能。并声明对应的 type: tags
(type: categories
) 使得在文章中进行配置时可进行归类。
以 tags/index.md 修改为例(tags/index.md 和 categories/index.md 是一样的修改):
1 | --- |
现在博客上就有了这两个页面,只不过,现在页面上还是空的,因为,文章并没有增加这两个属性,我们需要在文章头增加对应的内容才能显示到这两个页面上。
创建文章
目前为止还没有自己创建过文章,经过以上配置,我们就可以开始正式地创建文章了:)
创建新文章命令为:hexo new post "name"
,这是以 scaffolds/post.md
为模板创建文章,我们打开该模板,可以看到已经添加了 tags,我们还需要添加 categories,这样创建出的文章中添加的标签即可就可以归类到对应的页面下。如前所述,一篇文章最好使用一个类别(category)和多个标签(tag)。
1 | --- |
我们真正来创建博客的第一篇文章:
1 | $ hexo new post "my-first-post" |
修改 my-first-post.md:
Tips: 使用 < !–more–> 将文章分为两部分,首页只展示前面部分,这样首页浏览更方便
1 | --- |
重新使用 hexo 命令生成、预览、发布,就可以看到博客内容的更新了!
完成基础搭建
经过以上步骤,一个 Hexo 博客已经搭建出来了,并且我们可以愉快地发表文章了!
博客可定制的内容还有很多,例如可以给博客添加更多的功能如搜索、评论、阅读量统计等,还可以对博客进行个性化定制如头像、背景的修改等等。这些内容我们可以查看主题的说明文档、网站、配置文件,它们一般都对支持的配置进行了说明。
博客的定制化修改不做过多说明,接下来考虑一个问题:程序员一般都不只一台电脑,想在不同电脑上都能维护博客怎么办?或者说担心以上配置、发布的内容丢失无法找回博客又要如何进行备份?查看远程仓库主干上的内容,可以看到,上传的只有编译好的网页文件,而没有这些博客源文件、文章、主题、配置等,因此我们需要合理备份这些内容来解决上面这个问题。我在Hexo 博客备份与恢复中描述了具体的过程,有需要的话可以参考。