该文档用以,记录自己(外行)利用Hexo建立Blog的过程,将原本用Gitbook构建的笔记转移到Hexo中,同时购买域名并部署其上。网页部署于Github Page 。以Live my Live主题为例。

腾讯云和Github Page的操作和理解在现有的一些博客中过时了,或者说存在一些问题,后续会对此进行简单的讲解。同时大部分博客都是使用NexT主题进行配置,这里采用的是Live My Life主题,该博文介绍自己的粗浅理解,也为自己后续的工作进行一定的参考。

还存在一些没有解决的问题:

  • 对主题切换和主题配置和全局配置的的深入理解(Live my Life主题覆盖了很多默认配置)
  • 前端代码的理解,自定义Layout,超链接,图标等
  • 深入理解插件的应用和自定义
  • 推送网站到baidu和google(Option)(没有计划)

之后有时间的话可以去研究一下:

关键词:Hexo_Livemylive、Github Page、腾讯云(Domain、DNS、SSL)

Environment

需要准备的环境如下:本地Node(NPM),Page部署Git(SSH),可在Windows,Linux,WSL2中部署均可,但需要注意的是,如果在WSL2中进行部署,生成速度与部署速度会明显慢于宿主机。

首先安装NodeJS、NPM、Git并验证是否成功安装,根据Linux和Windows不同环境进行安装,可以去官网了解相关的安装步骤,或者参考Gitee和Github的两篇博文。

为了更好的编写笔记,最好配置一个图床,图床的配置可以使用Github、Gitee或者腾讯云的COS服务,相关的配置可以参考LInk

sh
git version
node -v
npm -v

安装Hexo

sh
npm install -g hexo-cli

# 查看Hexo的版本
hexo -v

Initialize

Blog

对博客目录初始化:hexo init blog,blog为空的话初始化当前文件夹,初始化后基本结构如下:

sh
.
├── _config.yml # 网站的全局配置信息,在此配置大部分的参数。 
├── package.json # 定义Hexo,以及对应安装的依赖的版本等
├── node_module: # Hexo安装插件的位置
├── scaffolds # 页面模版文件夹
├── source  # 资源文件夹,除 _posts 文件,其他以下划线_开头的文件或者文件夹不会被编译打包到public文件夹
|   ├── _drafts # 草稿文件
|   └── _posts # 文章Markdowm文件 
└── themes  # 主题文件夹

有了初始化的目录后,就可以参考相关主题的官方介绍页面进行对应的 配置,不同的主题可能有不同的配置方法。接下来我们会以《Live my life》 主题为例。

后续基于别的主题对文件配置有了更深入的理解后,会对配置部分进行更新说明,或另开一贴。

Github

本文使用Github Page构建自己的静态站点,用于部署自己的网页。GitHub只能使用一个同名仓库托管一个静态站点:aikenh.github.io,但是可以在此站之上,使用其他仓库构建子域名如: aikenh.github.io/Docs

Git和Github仓库和链接的初始化参见GitWorkflow ;对应的io,可以通过建立【UserName】.github.io为名的Repo,并在Setting-> Code and automation -> Page中选择对应的Branch作为Source.

完成后如图所示,后续设置好域名解析服务后后可在Custom domain中设置你的自定义域名,github.io将自动转换成该域名,会在域名解析部分详细介绍

创建完该网站Github的初始部分差不多完成。

Config-livemylife

本章节的基本操作均针对_config.yml进行。

基于我的理解,为了便于多主题的配置和切换,在主Config.yml 中应该尽量不参与特定主题的设置,而在Theme/SpecificTheme/_config.yml中为每个主题定制基本的配置为好。但目前只用过这个主题,就以此为例。

更多的设置去主题的readme中查看和设置。

初始化主题:设置主题的基本需求,并基于此安装相关依赖

sh
cd blog
rm -rf scaffolds source themes _config.landscape.yml _config.yml package.json yarn.lock #just keep node_modules
git clone https://github.com/V-Vincen/hexo-theme-livemylife.git
mv hexo-theme-livemylife/* ./
rm -rf hexo-theme-livemylife
npm install

设置主题:修改配置中的theme值

yaml
theme: livemylife

themecolor:
	enable: true
	mode: light

完成了基础设置后,可以直接在本地运行博客,查看效果,方便后续调试后部署,具体命令如下

bash
hexo cl && hexo g && hexo s -p your-port
# default port is 4000
hexo g && hexo s

Basic Configs

使用自己的信息修改配置文件的对应选项,以下介绍一些基本属性配置:

yaml
# header
title: My_Blog
subtitle: some description of u or ur site
author: NickName
timezone: 

# url
url: http://aikenh.cn # note: 不要忘了修改source文件中的CNAME
root: 
permalink: :lang/:title/ # 子页面的链接形式

# site setting
SEOTitle: Names Blog # 标签栏显示的标题
email:
description: "Development Documentation"
keyword: "name,Name,blog,Blog"
header-img: img/header_img/bg_img.jpg # 标题图像的存储路径,Source为根路径

favicon: img/avatar/f_img.png # 标签栏显示的图像

# 暂时不使用签名
signature: false
signature-img: _ 

不使用Internationalization 设置,关掉选项:

yaml
langselect:
	enable: false

该选项会关闭生成语言选择按钮。

Effects custom

该部分控制页面的特效设置。主要包括关闭线段背景,线段背景消耗CPU的同时还会遮挡文字,故而关闭;鼠标点击特效mouseclick关闭,在界面使用的时候异常选中的问题以及遮挡的问题。

yaml
wave: true

# false can not disable this, should del content and color alse
mouseclick:
	enable: false
	content: 
	color: 

ribbonDynamic: true
bglinecanvas: false

启用侧边栏放置相关的个人信息,SNS的设置实际上也与该部分相关,会显示在头像的下方。

yaml
sidebar: true   # whether or not using Sidebar.
sidebar-about-description: "making trash"
sidebar-avatar: img/avatar/samura.jpg    # use absolute URL, seeing it's used in both `/` and `/about/`
widgets:
- visitor   # busuanzi: https://busuanzi.ibruce.info/
- featured-tags
- short-about
- recent-posts
- friends-blog
- archive
- category

# widget behavior 设置相关的Archieve侧边部件
## Archive
archive_type: 'monthly'
show_count: true

## Featured Tags 
featured-tags: true   # whether or not using Feature-Tags
featured-condition-size: 0    # A tag will be featured if the size of it is more than this condition value

## Friends 友站设置
friends: [
    {
        title: "GitBook",
        href: "https://Name.github.io/Docs"
    },
    {
        title: "Hexo",
        href: "https://hexo.io/"
    }]

# SNS Settings just enable what u want.
RSS: false
github_username: yourAccount
twitter_username: yourAccount
# instagram_username: 
# facebook_username:  yourAccount
# linkedin_username:  yourAccount
zhihu_username: yourAccount
weibo_username: numid of weibo in url

Layout Custom

修改一些页面布局,除了一些基础设置,还有还有一些对应的标签问题。

yaml
# top scroll progress
scroll: true
# make article sticky
top: true
# count word for each doc
wordcount: true
# show tag of each article
home_posts_tag: true
# anchorjs 设置锚点
anchorjs: true
socialshare: true
viewer: true

页面的Newer Posts和Old Posts在theme中,根据不同的语言选项去修改即可。

页面背景在博文中通过Header(Meta-data)设置,批量转化的时候可以通过代码循环生成,后续进行转化的时候最好依靠随机数指定。

Github Page

安装部署插件如下:

shell
npm install hexo-deployer-git  --save

实际上就是将public 文件夹push到对应仓库的指定分支,有插件能够直接执行该操作,在config中执行如下设置:

yaml
deploy:
  type: git
  repo: https://github.com/<yourAccount>/<repo> # or https://gitee.com/<yourAccount>/<repo>
  branch: <your-branch>

之后执行 hexo d即可

Mathjax(TB fix)

用于下一次验证的策略:手动添加MathJa支持而不基于Kramed ,基于此思想迁移到Mathjax3 ,也避免了Kramed和Prismjs的冲突。

支持公式的方式主要有以下 的几种思路,该设置实际上主要是和Next主题相关,包括Katex等

该主题目前使用的是Mathjax + kramed + it的方式。

官方描述对应的Latex支持, 该部分目前的渲染效果处于玄学状态,有时候能用,有时候针对一些语法会出现渲染错误,但是并不能很好的定位到错误的原因。现象如下:

  • 缩略图中出现正常的渲染,而在正文中只显示公式
  • 部分语法可以正常渲染,稍微复杂一点的无法渲染,且原因不定。

目前猜测可能与Package有一定的关系,在对hexo-renderer-marked等Package进行操作后,可能就会恢复正常。

当前情况下在Windows清除,在WSL2中执行Hexo命令好像就可以,非常的玄学。

目前按照主题 的方式(默认已配置好),后续如果效果仍然不稳定,可能会对渲染的方式进行改动。比如利用math的jax支持 ,或者基于pandoc 的方式把。后续再出现问题的话对比一下。

  • 利用pandoc可以完美的显示所有的LaTex,但是原有设置下Archive主页的归档信息消失:
  • 基于karmx等的数学公式无法完美显示,问题有些严重,所以最终还是换了

其中的一些语义冲突修改 倒是在新版本中,好像影响不是很明显,可能更多的是与marked的冲突,但是我们使用的是别的渲染引擎

CDN的设置:可能需要自动添加文件末尾 ,CDN可以自己去找一找了,把后面的对其就行

在 ~/blog/_config.yml 文件(注意,是 Hexo 博客文件夹根目录中的 /_config.yml 而不是主题目录下的 /themes/next/_config.yml)中增加 MathJax 的支持,并手动设置下面的 src(这一步很重要,使用默认的 src 会导致数学表达式渲染显示失败。这里的关键是 src 中的 ?config=TeX-MML-AM_CHTML 这个字段)

Pandoc

MathJax + PanDoc + it的解决方案,最好部署在自己的服务器上,部署在Github上有一些折磨, Pandoc需要使用CI或者Action去部署,等熟悉了再采用该方法把。

pandoc 需要本机中首先安装 pandoc ,各平台参考官方链接进行安装即可。

bash
npm uninstall hexo-renderer-kramed --save
npm install hexo-renderer-pandoc -- save

(非正常方式)对于Archive的问题只需要修改一下生成Archive的路径即可,即通过修改config的生成archive和archive的路径

具体的对pandoc的配置可以参考:[Link1](https://feigeek.com/posts/b1bbb984 . html),对其一些bug的修复则用Link2 ,但是暂时作为可选项,新版的好像已经没有问题。

目前配置如下(有一些不对的冗余存在):

bash
mathjax: 
  enable: true
  mhchem: false

katex: 
  enable: false
  copy_tex: false

pandoc:
 extensions:
    - '+hard_line_breaks'
    - '+emoji'
    - '-implicit_figures'

Prismjs

在Hexo6.0之前 还是需要借助插件的,但是根据官方说明 ,在6.0之后官方已经添加了Prismjs的支持,disable Hightlight,Enable prismjs后,基于preprocess模式

yaml
highlight:
  enable: false
  line_number: true
  auto_detect: true
  tab_replace:
  wrap: true
  hljs: false
  
prismjs:
  enable: true
  preprocess: true
  line_number: true
  tab_replace: ''

在对应的Theme/specific theme/layout/_partial/head.ejs中添加需要的css样式。

javascript
<head>
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/prism-themes/1.9.0/prism-lucario.min.css">
  ...
  
<\header>

对应的样式可以在github prismjs 中查看,其对应的cdn则按照此链接 查询,虽然不懂得javascript,但是我寻思下载到本地也是一样的,按照其他对应的prismjs-hexo-Blog中的处理即可。

javascript
<head>
  <link rel="stylesheet" href="/js/prism/prism.css">
  ...
  
<\header>

之后应该就可以正常使用

Password 4 Blog

利用插件对特定的文章进行加密,使得特定的文章的查看需要输入密码。

安装插件:

shell
npm install --save hexo-blog-encrypt

快速使用: 只需要在文章的Meta信息中添加Password字段即可

markdown
---

password: test

---

也可进行全局加密设置:参考Password

Domain Setup

腾讯云注册:首先获取一个免费的域名或是去腾讯云 /阿里云购买一个域名,(实名制->付钱->审核备案)

DNS Setting

DNS解析:在购买域名的提供商为域名添加解析,以腾讯云为例:

(不推荐)如果想要使用ipv4,ipv6进行dns解析的话可以搜索Github Page的IP,或者

bash
ping username.github.io

(推荐)在域名注册控制台 选择对应的域名解析

主机记录:@、www分别注册一次,分别用于https://yourdomain和 https:// www. yourdomain的解析。

记录类型:由于同个网站的CNAME和AAAA会发生冲突,这里建议使用CNAME类型,并在后续的

记录值: 中填写自己的username.github.io

后面有免费的SSL记得勾选,等待审核即可。

Deploy it

Hexo部署:

本地部署和服务启动不需要d(eploy)执行到前面即可在指定的端口查看本地的部署效果了。远程部署实际上就是git Push -f 到远程仓库的指定分支,完成前面github page的设置可以使用hexo -d 进行部署。

bash
hexo cl 
hexo g
hexo s
hexo d

hexo cl && hexo g && hexo s && hexo d

Github绑定:

在站点的source目录下创建CNAME并添加域名

bash
echo "yourDomain" >> CNAME

在Github-> Repo -> Settting -> Page —> Custom Domain 中填写域名并保存,等待解析完成后,即可。

参考资料:Link1Link2

Themes Switch

主题之间的切换应该和我预想的一致,下载主题到对应的Theme文件夹,在最外层的_Config中切换,但是由于我们的初始主题Live my LIfe极度依赖默认_config.yml,而非自身目录下的配置文件。故而有以下的几点工作

  • Compatibility Check: config setting,plugin version and dependencies conflics
  • Dir structure: check the consistency of the dir tree structure
  • Find themes u like: latex-support,post-style,archive,tag,Difficulty,Long-Time-Support…

以下这些是一些初步筛选出来的觉得还可以的主题,之后可以切换看看:

  1. 画廊 Miccall主页为画廊的基本样式,有对应的图库功能,作为图片和效果展示的话可能还不错,post页面和标签等页面较为一般。
  2. 三钻主题 ,亮色惊艳,暗色太花,设计难度和修改难度估计较大,Archive为时间轴模式,大爱,可以的话看看怎么将LivemyLife的Archive也变为这种样式。正文的效果以及对应的TOC
  3. 极简程序员博客 ,简洁美但是稍微有点太简洁,Archive界面好像崩了
  4. 闪耀狐 ,LTS,分类的雷达图,标签的热力图大爱,想办法搞到自己的主题里,功能较为全面和完善,如果想要自定义或者添加一些功能,完全可以参考这个主题。
  5. Find More 官方主题游廊

当前对各方各面的概念还不是太理解,后面考虑对网页构建的底层,以及其他的相关知识进行进一步的了解,方便自己对网站进行更进一步的自定义。

Public

站点提交,通过将自己的网页提交给搜索引擎,使得自己的文章能够被搜索到,目前暂时先不考虑Public,所以这里先行占位,功能暂时不进行支持。

主要参考Link1 ,初步计划使用sitemap进行站点提交,由于baidusitemap存在较多冲突考虑先不启用。后续进行继续实验。

Reference

  1. 基础+百度网站提交 | 基础解读 |
  2. Official SIte : 介绍默认_config文件的配置信息
  3. 简单修改 livemylife主题的一些简单修改
  4. 知乎教程 可以添加网易云音乐的外链,同时有我们需要的自定义社交网络按钮的部分(基于Next)去看看用的是什么插件,怎么嵌入。
  5. zhihu2 ,基本同上,但是多了一些其他的自定义的
  6. 大小写的改变不会git推送,导致发生404 错误