前言
博主在CSDN上写博客多年,然而眼看着CSDN的广告和付费功能越加越多,越发不喜欢这种氛围,而且博主的很多内容被无良的广告站主爬为己用,成了他们赚钱的工具,更觉得气愤。索性自己在Github Page
的基础上,配置coding
和vercel
平台,使用dnspod
的分区域解析功能,搭建了自己的个人博客。在这里记录一下自己的配置细节,希望能帮助到有同样想法的朋友。
随着对博客的不断完善,将会同步更新本博客的对应章节。
Hexo
安装
npm install hexo-cli -g
详见hexo文档
Hexo命令
常见命令
hexo clean
删除自动生成的文件和缓存hexo deploy
部署博客hexo generate
生成静态页面至public目录hexo help
查看帮助hexo init
初始化博客目录hexo list
列出博客的信息,如“页面”、“post”、“标签”等hexo new "postName"
新建文章hexo new page "pageName"
新建页面hexo publish
将一条post
从_drafts
目录移动到_posts
目录hexo render
用渲染器插件渲染文件hexo server
开启预览访问端口(默认端口4000,’ctrl + c’关闭server)hexo version
查看Hexo的版本
命令缩写
hexo n
< == > hexo new
hexo g
< == > hexo generate
hexo s
< == > hexo server
hexo d
< == > hexo deploy
组合命令
hexo s -g #生成并本地预览
hexo d -g #生成并上传
Hexo优化
- 添加404页面
创建source/404.md
文件,内容如下:1
2
3
4
5
6
7
8
9
10---
title: 404 Not Found
date: 2021-01-22 10:41:27
comments: false
---
<center>
对不起,您所访问的页面不存在或者已删除。
您可以<a href="https://blog.echosun.top">点击此处</a>返回首页。
</center>Hexo技巧
- 让博文列表不显示全部内容
在合适的位置加上<!--more-->
即可。
Hexo主题之next
next介绍
- 主页
next项目网址 - 升级
1
2$ cd themes/next
$ git pullnext优化
- 更换logo
进入themes/next/source/images/
文件夹,替换如下图片文件:1
2
3
4apple-touch-icon-next.png
favicon-16x16-next.png
favicon-32x32-next.png
logo.svg - 页面角落添加”fork me on github”按钮
修改博客目录的themes/next/_config.yml
文件,找到github_banner
字段,修改如下:1
2
3
4github_banner:
enable: true
permalink: https://github.com/echosun1996
title: Follow me on GitHub - 修改next主题风格为Gemini
修改博客目录的themes/next/_config.yml
文件,找到Schemes
字段,修改如下:1
2
3
4
5# Schemes
#scheme: Muse
#scheme: Mist
#scheme: Pisces
scheme: Gemini - 增加评论功能
在livere网站中注册,并获取uid。
然后修改博客目录的themes/next/_config.yml
文件,找到livere_uid
字段,填入自己的uid。1
2# LiveRe comments system
livere_uid: <your_uid> - 添加分类列表
运行hexo new page categories
命令,然后修改source/categories/index.md
文件,添加 type 字段,设置为categories
。修改后的文件内容为(date字段随意):接着修改博客目录的1
2
3
4
5
6---
title: categories
date: 2021-01-22 21:17:00
type: categories
comments: false
---themes/next/_config.yml
文件,找到 menu 模块,把 categories 的注释给去掉。修改后的文件内容为:1
2menu:
categories: /categories/ || fa fa-th - 支持博客搜索功能
在博客根目录下运行在博客根目录下的1
2npm install hexo-generator-search --save
npm install hexo-generator-searchdb --save_config.yml
文件,在文件末尾添加如下内容:接着修改博客目录的1
2
3
4
5
6search:
path: search.xml
field: post
format: html
content: true
limit: 10000themes/next/_config.yml
文件,找到local_search
字段,设置enable
为ture
。修改后的内容为:1
2local_search:
enable: true - 隐藏底部Hexo字段
修改themes/next/_config.yml
文件,将powered
字段设置为false。1
2# Powered by Hexo & NexT
powered: false - 修改代码块为黑底,mac样式
修改themes/next/_config.yml
文件,将codeblock
字段修改如下:1
2
3
4
5
6
7
8
9
10
11
12codeblock:
# Code Highlight theme
# Available values: normal | night | night eighties | night blue | night bright | solarized | solarized dark | galactic
# See: https://github.com/chriskempson/tomorrow-theme
highlight_theme: night bright #normal
# Add copy button on codeblock
copy_button:
enable: true #false
# Show text copy result.
show_result: true # false
# Available values: default | flat | mac
style: mac - 为页面添加快速跳转到头部按钮,并显示百分比
修改themes/next/_config.yml
文件,将back2top
字段修改如下:1
2
3
4
5
6back2top:
enable: true
# Back to top in sidebar.
sidebar: false
# Scroll percent label in b2t button.
scrollpercent: true #false - 在页面最上方显示阅读进度
修改themes/next/_config.yml
文件,将reading_progress
字段修改如下:1
2
3
4
5
6
7# Reading progress bar
reading_progress:
enable: true #false
# Available values: top | bottom
position: top
color: "#d46464" #"#37c6c0"
height: 2px - 启动书签,记录阅读位置
修改themes/next/_config.yml
文件,将bookmark
字段修改如下:1
2
3
4
5
6
7
8# Bookmark Support
bookmark:
enable: true #false
# Customize the color of the bookmark.
color: "#222"
# If auto, save the reading progress when closing the page or clicking the bookmark-icon.
# If manual, only save it by clicking the bookmark-icon.
save: auto - 中英文之间渲染时自动添加空格
修改themes/next/_config.yml
文件,将pangu
字段修改如下:1
2# Pangu Support
pangu: true #false - 页面预加载【不采用】
在博客根目录下运行npm install quicklink --save
修改themes/next/_config.yml
文件,将quicklink
字段修改如下:1
2quicklink:
enable: true - 使用pjax加速
在博客根目录下运行:修改1
2cd themes/next/source/lib/
git clone https://github.com/theme-next/theme-next-pjax pjaxthemes/next/_config.yml
文件,将pjax
字段修改如下:1
pjax: true
- 创建标签页
在博客根目录下运行hexo new page tags
命令,然后修改source/tags/index.md
文件,添加type
字段,设置为tags
,添加comments
字段,设置为false
。修改后的文件内容为(date字段随意):接着修改博客目录的1
2
3
4
5
6---
title: tags
date: 2021-01-22 23:08:01
type: tags
comments: false
---themes/next/_config.yml
文件,找到menu
模块,把tags
的注释给去掉。修改后的文件内容为:1
2menu:
tags: /tags/ || fa fa-tags - 使用gitalk留言
首先需要在 GitHub 上面注册一个 OAuth Application,注册完毕之后拿到 Client ID、Client Secret。
首先修改博客目录的themes/next/_config.yml
文件,找到comments
模块,将active
设置为gitalk
。再修改该配置文件中的对应配置如下:1
2
3
4
5
6
7# Multiple Comment System Support
comments:
# Available values: tabs | buttons
style: tabs
# Choose a comment system to be displayed by default.
# Available values: changyan | disqus | disqusjs | facebook_comments_plugin | gitalk | livere | valine | vkontakte
active: gitalk1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# Gitalk
# Demo: https://gitalk.github.io
# For more information: https://github.com/gitalk/gitalk
gitalk:
enable: true
github_id: {your client id}
repo: {your client id}.github.io # Repository name to store issues
client_id: {your client id} # GitHub Application Client ID
client_secret: {your client secret} # GitHub Application Client Secret
admin_user: germey # GitHub repo owner and collaborators, only these guys can initialize gitHub issues
distraction_free_mode: true # Facebook-like distraction free mode
# Gitalk's display language depends on user's browser or system environment
# If you want everyone visiting your site to see a uniform language, you can set a force language value
# Available values: en | es-ES | fr | ru | zh-CN | zh-TW
language: zh-CN - 启用leancloud统计访问次数
在console.leancloud.cn
创建账号,获取app_id
等信息,填入博客目录的themes/next/_config.yml
文件的leancloud_visitors
模块中1
2
3
4
5
6
7
8
9
10
11
12# Do not enable both `valine.visitor` and `leancloud_visitors`.
leancloud_visitors:
enable: true
app_id: <your app id>
app_key: <your app key>
# Required for apps from CN region
server_url: <your server url>
# Dependencies: https://github.com/theme-next/hexo-leancloud-counter-security
# If you don't care about security in leancloud counter and just want to use it directly
# (without hexo-leancloud-counter-security plugin), set `security` to `false`.
security: false #true
betterPerformance: true - 显示阅读时间修改博客目录的
1
2npm install hexo-symbols-count-time --save
npm install eslint --save_config.yml
文件,在最后添加下面内容:修改博客目录的1
2
3
4
5
6symbols_count_time:
symbols: true # 文章字数统计
time: true # 文章阅读时长
total_symbols: true # 站点总字数统计
total_time: false # 站点总阅读时长
exclude_codeblock: true # 排除代码字数统计themes/next/_config.yml
文件的symbols_count_time
模块1
2
3
4
5
6# Post wordcount display settings
# Dependencies: https://github.com/theme-next/hexo-symbols-count-time
symbols_count_time:
separated_meta: true # 是否另起一行(true的话不和发表时间等同一行)
item_text_post: true # 首页文章统计数量前是否显示文字描述(本文字数、阅读时长)
item_text_total: true # 页面底部统计数量前是否显示文字描述(站点总字数、站点阅读时长) - 显示版权
修改博客目录的themes/next/_config.yml
文件的creative_commons
模块1
2
3
4
5creative_commons:
license: by-nc-sa
sidebar: true # flase
post: true # false
language: - 添加RSS【不使用】
在博客主目录下执行:修改博客目录的1
npm install --save hexo-generator-feed
_config.yml
文件修改博客目录的1
2
3# Extensions
## Plugins: http://hexo.io/plugins/
plugins: hexo-generate-feedthemes/next/_config.yml
文件的rss
模块1
2
3
4# Set rss to false to disable feed link.
# Leave rss as empty to use site's feed link.
# Set rss to specific value if you have burned your feed already.
rss: /atom.xml - 启用 LaTeX 公式显示
在博客主目录下执行:修改博客目录的1
npm install hexo-math --save
_config.yml
文件,添加如下内容修改博客目录的1
2
3
4
5
6math:
engine: 'mathjax' # or 'katex'
mathjax:
# src: custom_mathjax_source
config:
# MathJax configthemes/next/_config.yml
文件的mathjax
模块然后在需要开启公式渲染的页面加入1
2
3
4
5# MathJax support.
mathjax:
enable: true # false
# See: https://mhchem.github.io/MathJax-mhchem/
mhchem: false1
mathjax: true
- gulp压缩静态资源
在博客主目录下执行:在 Hexo 文件夹下新建一个1
2npm install -g gulp
npm install gulp gulp-htmlclean gulp-htmlmin gulp-clean-css gulp-uglify-es gulp-imagemin del gulp-minify-inline-jsongulpfile.js
文件,粘贴以下代码然后保存为1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45// 引入需要的模块
var gulp = require('gulp');
var minifycss = require('gulp-clean-css');
var uglify = require('gulp-uglify');
var htmlmin = require('gulp-htmlmin');
var htmlclean = require('gulp-htmlclean');
// 压缩public目录下所有html文件, minify-html是任务名, 设置为default,启动gulp压缩的时候可以省去任务名
gulp.task('minify-html', function() {
return gulp.src('./public/**/*.html') // 压缩文件所在的目录
.pipe(htmlclean())
.pipe(htmlmin({
removeComments: true,
minifyJS: true,
minifyCSS: true,
minifyURLs: true,
}))
.pipe(gulp.dest('./public')) // 输出的目录
});
// 压缩css
gulp.task('minify-css', function() {
return gulp.src('./public/**/*.css')
.pipe(minifycss({
compatibility: 'ie8'
}))
.pipe(gulp.dest('./public'));
});
// 压缩js
gulp.task('minify-js', function() {
return gulp.src(['./public/**/.js','!./public/js/**/*min.js'])
.pipe(uglify())
.pipe(gulp.dest('./public'));
});
// 默认任务
/*
gulp.task('default', [
'minify-html','minify-html1','minify-css','minify-js','minify-images'
]);
*/
// gulp 4.0 适用的方式
gulp.task('default', gulp.parallel('minify-html','minify-css','minify-js'
//build the website
));.github/workflows
下配置文件增加npm install gulp -g
和下方的配置:1
2
3
4hexo clean
hexo generate
gulp
hexo deploy - 支持amp【不启用】
在根目录下运行在1
npm install hexo-generator-amp --save
themes/next/layout/_partials/head/head.swig
中加入下面内容:修改1
2
3{%- if is_post() and config.generator_amp %}
<link rel="amphtml" href="./amp.html" />
{%- endif %}_config.yml
,加入如下内容1
2
3
4
5
6
7
8
9
10
11
12
13
14
15# 启动amp支持
generator_amp:
templateDir: amp-template
assetDistDir: amp-dist
logo:
path: sample/sample-logo.png
width: 600
height: 60
substituteTitleImage:
path: sample/sample-substituteTitleImage.png
width: 1024
height: 800
warningLog: true # false # To display warning, please set true.
validateAMP: true # To AMP HTML validate automatically, please set true.
generateAmpPath: posts/:abbrlink.html/amp.html发布并绑定域名
申请域名
在namesilo申请个人域名echosun.top,并将名称服务器(NameServer)修改至DNSPod。
发布
- 分线路解析需要注意域名设置的先后问题
由于域名解析存在缓存,因此在配置DNS国内外分流解析时,建议先配置coding的域名,然后再配置Github的域名。然后再将Github的线路类型
改为境外
,coding的线路类型
改为境内
,即可实现分线路解析。
1. Github
我将博客的源码上传至gihub的私有仓库中,然后使用Github Action
将生成的网页发布到Github个人页仓库中,然后就可以通过Github Page进行浏览,然而国内由于各种原因,导致该页面经常无法访问,因此需要将博客发布到不同的平台上,并通过DNSPod
进行分流,实现国内、外的正常访问。
由于我已经将导出后的静态页面部署至Github Page,因此,在其他的平台上只需要对github上的这一仓库进行克隆,并执行静态展示即可,不需要额外配置hexo编译脚本。
- 修改github个人页域名
最终目的:用blog.echosun.top
访问个人主页
- 首先在
cloudflare
中为blog.echosun.top
添加CNAME
记录到echosun1996.github.io
。 - 再在Github个人页仓库的
settings
中将域名修改为blog.echosun.top
,同时,确保选中Enforce HTTPS
。 - 在博客目录下的
public
文件夹中创建CNAME
文件,内容为blog.echosun.top
,即避免每次上传仓库后需要再次手动修改github个人页域名设置的问题。
2. coding
coding是腾讯提供的一个代码管理工具,类似于github,也可以发布自己的个人页,配合DNSPod
的区域分流解析功能,实现国内外分线路解析,避免国内用户不能访问Github Page
的问题。
创建一个DevOps项目
,然后在代码仓库
中克隆github上的仓库,然后在”持续部署/静态网站/新建静态网站”中添加一个静态网站
。
添加完成后在自定义域名
中将域名改为blog.echosun.top
。
注意,在配置Github Action
时,由于coding更改了域名,因此需要将e.coding.net
加入known_hosts
,很多旧教程使用coding.net
会导致报Host key verification failed.fatal: Could not read from remote repository.
的错误。正确的Github Action
脚本文件如下:
1 | name: Hexo Blog CI |
3. vercel
用github账号登陆vercel,授予Github个人页仓库
的访问权限,创建一个静态页面模板(注意,不要设置为hexo模板!),并在Domains
中添加backup.echosun.top
这一域名,然后按照提示在DNSPod
中修改CNAME
解析,最终建立博客的备份站点。