一个博客的搭建过程分为三步:
- 编写:包含内容的书写与格式的配置
- 构建:从编写的原始内容生成可发布的最终内容
- 发布:让待发布的内容对读者可见
依托于博客平台(如博客园、新浪博客等)发布内容的用户只需要关注编写部分,但要搭建一个独立的个人博客则以上三方面都需要关心。幸运的是,现在有大量的工具帮助我们简化这个过程:丰富的 Markup 语言简化了编写;强大的静态站点生成器简化了构建;友好的托管平台简化了发布。
这个博客的诞生也得益于这些工具:
- 编写:使用 Markdown,内置大量层级、列表、超链接、代码等的简便语法支持
- 构建:使用 Hexo,几条命令完成生成、预览、发布步骤
- 发布:使用 GitHub Pages 进行托管,方便又免费
接下来我会按以下顺序介绍如何基于这些工具完成整个博客的搭建过程:
- 环境准备
- Hexo 和 NexT 主题的使用
- GitHub Pages 的配置与部署
- 绑定自定义域名(可选)
- Hexo 的详细配置过程
环境准备
-
安装 Node.js
官网下载:https://nodejs.org/en/download/
更换成国内镜像源:
1
2
3[edit ~/.npmrc]
registry=https://registry.npm.taobao.org
[end] -
安装 Hexo
1
npm install -g hexo-cli
常用 Hexo 命令
- 初始化目录:
hexo init [folder]
- 新建文章:
hexo new [layout] <title>
或hexo n [layout] <title>
- 新建草稿:
hexo new draft <title>
- 新建草稿:
- 将草稿发布为正式文章:
hexo publish <title>
- 生成静态文件:
hexo generate
或hexo g
- 监听文件变化:
hexo g --watch
或hexo g -w
- 监听文件变化:
- 部署:
hexo deploy
或hexo d
- 先生成后部署:
hexo d -g
- 先生成后部署:
- 启动本地服务器(服务器会监听文件变化并自动更新):
hexo server
或hexo s
- 启动调试:
hexo s --debug
- 预览草稿:
hexo s --draft
- 启动调试:
- 清除缓存:
hexo clean
使用 NexT 主题
下载主题
1 | cd <your-hexo-site> |
启用主题
编辑 _config.yml
:
1 | theme: next |
设置语言
编辑 _config.yml
:
1 | language: zh-Hans |
查看是否生效
1 | hexo clean |
创建 GitHub Pages
在自己的 GitHub 账号下创建名为 <username>.github.io
的项目即可。
部署博客到 GitHub Pages
设置 ssh 访问 GitHub 仓库
- 生成 ssh key :
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
- 在 GitHub -> Settings -> SSH and GPG keys -> New SSH key 添加
~/.ssh/id_rsa.pub
中的内容
安装 git-deploy 插件
1 | npm install hexo-deployer-git --save |
配置 git-deploy 插件
编辑 _config.yml
:
1 | deploy: |
部署
1 | hexo d -g |
绑定自定义域名
-
在万网申请域名:https://wanwang.aliyun.com/
- 其他可供选择的域名服务商:
- GoDaddy:世界上最大的域名注册商,但续费比较贵
- freenom:可以找到免费的域名,但都是很奇怪的后缀,比如.ml(感觉做机器学习的初创公司可以弄来玩玩,反正不要钱wwww)
- 不同域名服务商的详细对比(主要是价格):Domain Name Price and Availability
- 其他可供选择的域名服务商:
-
注册 DNSPOD:https://www.dnspod.cn
-
在 DNSPOD 的控制台选择:域名解析 -> 全部域名 -> 添加域名,将在万网申请到的域名填入
-
在万网的域名控制台的相应域名依次选择:管理 -> 基本信息 -> 修改 DNS,将 DNS 修改为 DNSPOD 的 DNS:
f1g1ns1.dnspod.net
和f1g1ns2.dnspod.net
-
在 DNSPOD 的控制台选择相应域名并添加记录,主机记录使用 "@",记录类型选择 "CNAME",记录值使用 "
<username>.github.io
",保存 -
在 Hexo 中绑定域名:
1
2
3[create/edit source/CNAME]
<your-domain-name>
[end] -
重新部署,并等待 DNS 生效
如果需要绑定多个域名,可以将 GitHub Pages 绑定到其中一个域名,并把其他域名重定向到该域名。在 DNSPOD 中,这可以通过在需要重定向的域名中添加类型为"显性URL"的记录实现。具体请参考"隐/显性转发"和"DNSPod 支持域名301重定向吗?"。
配置 Hexo
设置头像
编辑 _config.yml
:
1 | avatar: <avatar-url> |
添加标签页面
-
新建页面:
1
hexo new page tags
-
设置页面(编辑
source/tags/index.md
):1
2
3
4
type: "tags"
comments: false -
修改菜单(编辑
themes/next/_config.yml
):1
2menu:
tags: /tags
添加分类页面
-
新建页面:
1
hexo new page categories
-
设置页面(编辑
source/categories/index.md
):1
2
3
4
type: "categories"
comments: false -
修改菜单(编辑
themes/next/_config.yml
):1
2menu:
tags: /categories
添加 about 页面
-
新建页面:
1
hexo new page about
-
设置页面(编辑
source/about/index.md
) -
修改菜单(编辑
themes/next/_config.yml
):1
2menu:
about: /about
首页文章显示摘要
在文章中适当位置插入 <!--more-->
,该位置之前的部分即为摘要,会显示在首页中。
显示文章更新时间
编辑 themes/next/_config.yml
:
1 | # Post meta display settings |
文章更新时间默认使用文件的修改时间,如果想自己指定,可以在文章的 Front-matter (即文件最上方以 ---
分隔的区域)中加入:
1 | updated: <update-time> |
其中,<update-time>
的格式示例为 2017-04-11 16:29:50
。
设置代码高亮
编辑 themes/next/_config.yml
:
1 | # Available value: |
添加 Creative Commons 署名协议
编辑 themes/next/_config.yml
:
1 | # Declare license on posts |
添加评论系统
使用 Disqus 作为评论系统。需要注意的是,Disqus 已经被墙,所以不翻墙是看不到的,只能相信大家都是带着梯子来的了。。。
编辑 themes/next/_config.yml
:
1 | # Disqus |
也可以使用来必力代替 Disqus,编辑 themes/next/_config.yml
:
1 | livere_uid: <your-uid> |
侧边栏社交链接
编辑 themes/next/_config.yml
:
1 | # Social links |
开启打赏功能
编辑 themes/next/_config.yml
:
1 | reward_comment: 坚持原创技术分享,您的支持将鼓励我继续创作! |
腾讯公益404页面
编辑 source/404.html
:
1 |
|
站点建立时间
编辑 themes/next/_config.yml
:
1 | since: 2017 |
阅读次数统计
使用不蒜子统计,编辑 themes/next/_config.yml
:
1 | # Show PV/UV of the website/page with busuanzi. |
集成搜索服务
使用本地搜索,按以下步骤配置:
-
安装 hexo-generator-searchdb 插件:
1
npm install hexo-generator-searchdb --save
-
编辑
_config.yml
:1
2
3
4
5search:
path: search.xml
field: post
format: html
limit: 10000 -
编辑
themes/next/_config.yml
:1
2
3# Local search
local_search:
enable: true
本地搜索的一个替代方案是 Algolia,按以下步骤配置:
-
前往 Algolia 注册页面注册一个新账户。注册后的 14 天内拥有所有功能(包括收费类别的),之后若未续费会自动降级为免费账户,免费账户总共有 10,000 条记录,每月有 100,000 的可操作数。注册完成后,创建一个新的 Index。
-
安装 hexo-algolia 插件(默认使用的 0.1.1 版本会出现问题,必须指定 0.2.0 版本):
1
npm install --save hexo-algolia@0.2.0
-
在 Algolia 网站上找到需要使用的配置值,包括 ApplicationID、Search API Key、Admin API Key。
编辑
_config.yml
:1
2
3
4
5algolia:
applicationID: <application-id>
apiKey: <search-api-key>
indexName: <index-name>
chunkSize: 5000由于 Admin API Key 需要保密保存,我们在一个单独的文件
_config.private.yml
中配置它:1
2algolia:
adminApiKey: <admin-api-key>如果使用了 Git 进行源码管理的话,在
.gitignore
中忽略_config.private.yml
和_multiconfig.yml
(这是在更新 Index 过程中合并_config.yml
和_config.private.yml
的内容生成的文件,里面也包含 Admin API Key),防止 Admin API Key 被公开到 GitHub 等托管网站上。 -
执行以下命令更新 Index:
1
hexo algolia --config _config.yml,_config.private.yml
需要注意的是,在 3.3.1 版本的 Hexo 中,该命令会出现下列报错信息:
1
221:15:11.652 ERROR Local hexo not found in C:\projects\archive\xxx
11:15:11.654 ERROR Try running: 'npm install hexo --save'这是 Hexo 的 bug,具体请参考:
- ERROR when trying to use two alternative configs · Issue #2518 · hexojs/hexo
- Fix multiple config issue #2518 by NoahDragon · Pull Request #2520 · hexojs/hexo
该 bug 已在该 commit 中修复:Fix multiple config issue #2518 (#2520) · hexojs/hexo@fbdee90,并在 3.3.5 版本中 release。
-
编辑
themes/next/_config.yml
:1
2
3
4
5
6
7
8
9# Algolia Search
algolia_search:
enable: true
hits:
per_page: 10
labels:
input_placeholder: Search for Posts
hits_empty: "We didn't find any results for the search: ${query}"
hits_stats: "${hits} results found in ${time} ms"
添加 sitemap 插件
安装 hexo-generator-sitemap 插件:
1 | npm install hexo-generator-sitemap --save |
配置(编辑 _config.yml
):
1 | sitemap: |
添加蜘蛛协议 robots.txt
新建 source/robots.txt
:
1 | User-agent: * |
设置 RSS
安装 hexo-generator-feed 插件:
1 | npm install hexo-generator-feed --save |
配置(编辑 _config.yml
):
1 | feed: |
添加脚注/上标/下标/缩写支持
由于 Hexo 默认使用的 Markdown renderer 是 marked,它不支持脚注/上标/下标/缩写,我们可以使用 Markdown-it 替代 marked:
1 | npm un hexo-renderer-marked --save |
配置(编辑 _config.yml
):
1 | # Markdown-it config |