前言

这是本博客的第一篇文章!特此把本博客的配置过程记录下来作为纪念也顺便测试Hexo的相关功能。

本博客由Github Page+Hexo搭建而成。优点为不用担心被ddos,可以借由git的版本管理管理文件更安全。缺点也是有的,静态页面更新极为痛苦以及性能不高,不过免费大过天,还要啥自行车。

准备工作

  1. 首先登录Github账号,新建两个个储存库,一个名称为用户名.github.io(免费账户只能设置为公开仓库),另一个名字随意用来保存hexo原始代码(可以设置成私有仓库)
  2. 安装Git,或者安装GitHub Desktop用来同步储存库
  3. 安装Node.Js(推荐安装最新版本),因为Hexo是基于Node.Js的,而且之后的所有包都是通过npm安装。
  4. 拉取存储库

在windows资源管理器内右键可以打开git-bash命令行工具,输入

git clone https://github.com/用户名/创建的私有仓库

安装Hexo

进入储存库,然后输入如下代码

1
2
3
4
5
npm install -g hexo-cli
hexo init
npm install
hexo g
hexo server

此时Hexo就会在**Http://localhost:4000运行

安装主题

添加子模块并下载的Git指令:

1
2
3
git.exe submodule add -b master "https://github.com/jerryc127/hexo-theme-butterfly.git" "themes/hexo-theme-butterfly"

git submodule update --init --recursive

修改 Hexo 根目錄下的 _config.yml,把主題改為 butterfly

1
theme: butterfly

打开hexo根目录下的package.json文件并替换dependencies项下的内容为

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
"hexo": "^6.3.0",
"hexo-generator-archive": "^2.0.0",
"hexo-generator-category": "^2.0.0",
"hexo-generator-index": "^3.0.0",
"hexo-generator-tag": "^2.0.0",
"hexo-renderer-ejs": "^2.0.0",
"hexo-deployer-git": "^4.0.0",
"hexo-renderer-marked": "^6.0.0",
"hexo-renderer-stylus": "^3.0.0",
"hexo-server": "^3.0.0",
"hexo-theme-landscape": "^1.0.0",
"hexo-renderer-pug": "^3.0.0",
"hexo-tag-aplayer": "^3.0.0",
"hexo-douban": "^2.2.0",
"hexo-generator-feed": "^3.0.0",
"hexo-generator-searchdb": "^1.4.0",
"hexo-wordcount": "^6.0.0"

然后执行npm install,会自动安装所有未安装的插件

以上为butterfly主题所依赖的大部分插件,如果需要其他插件则修改package.json即可。这样方便之后使用GitHub Action自动部署

在 hexo 的根目錄創建一個文件 _config.butterfly.yml,並把主題目錄的 _config.yml內容複製到 _config.butterfly.yml 去。( 注意: 複製的是主題的 _config.yml,而不是 hexo 的_config.yml)

部署的时候会优先使用_config.butterfly.yml里面的配置,这样更新的时候配置就不会丢失了

可以在hexo根目录的Source 下新建一个文件夹保存图片等资源。可以在_config.butterfly.yml中直接调用。放在主题文件夹内的所有文件都会在更新后丢失

剩余的配置步骤请跟随官方文档进行

GitHub Action 自动部署

配置SSH

  1. 生成ssh部署密钥,可以使用现有的密钥,也可以重新生成一个专有密钥
1
ssh-keygen
  1. 然后进入保存hexo源码的私有仓库,在Settings -> Secrets -> Add a new secret 页面上添加ssh私钥
  • Name 输入框填写 HEXO_DEPLOY
  • Value 输入框填写私钥(默认在/.ssh/id_rsa文件中)

https://cdn.jsdelivr.net/gh/xxlgenius/blog_img/Qexo/2023/7/image_25406c5c153cfc2a2d90e15eacfb69b3.png

  1. 进入github.io的共有仓库,在 Settings -> Secrets -> Add a new secret 页面上添加ssh公钥
  • Title 输入框填写 HEXO_DEPLOY
  • Key 输入框填写公钥(默认在/.ssh/id_rsa.pub文件中)
  • 勾选 Allow write access 选项

https://cdn.jsdelivr.net/gh/xxlgenius/blog_img/Qexo/2023/7/image_cac8eaccc00bb2e36bcd9670663acaac.png

生成GitHub Token

点此处来新建一个token,选择经典Token,然后勾选repo,然后点击生成即可看到token(一定要及时保存,因为token只会显示一次,若没有保存只能重新申请)

image-20230521214205257

创建token

项目文件设置

  1. 在 hexo私有仓库根目录下创建 .github/workflows/deploy.yml 文件,并修改git的user.emailuser.name(大约在33行)
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
name: Hexo Deploy

on:
push:
branches:
- master

jobs:
build:
runs-on: ubuntu-22.04
if: github.event.repository.owner.id == github.event.sender.id

steps:
- name: Checkout source
uses: actions/checkout@v2
with:
ref: master

- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: '18'

- name: Setup Hexo
env:
ACTION_DEPLOY_KEY: ${{ secrets.HEXO_DEPLOY }}
run: |
mkdir -p ~/.ssh/
echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.email "email"
git config --global user.name "username"
git submodule update --init --recursive
npm install hexo-cli -g
npm install

- name: Deploy
run: |
hexo clean
hexo g
hexo deploy

我在部署的时候遇到了一个BUG:hexo并不会自动引用_config.butterfly.yml的配置。所以需要将配置复制进主题中才能正常部署

npm install后面添加两句指令rm themes/hexo-theme-butterfly/_config.ymlcp _config.butterfly.yml themes/hexo-theme-butterfly/_config.yml就可以正常部署了

  1. 修改根目录的_config.yml文件
1
2
3
4
5
deploy:
type: git
repo: git@github.com:用户名/用户名.github.io.git
branch: main
token: 你的token
  1. git bash中输入指令提交修改。git指令可以参考廖雪峰的Git教程

上传后应该就会自动部署环境并生成静态网页然后上传到github.io的仓库中

修改域名与开启HTTPS

虽然现在已经可以访问网站但是域名却是Github的,有域名的还是建议通过自己的域名访问,这样及时以后迁移网站也方便很多。

  1. 打开你的DNS管理页面,在域名创建A记录到如下几个IP
1
2
3
4
185.199.108.153
185.199.109.153
185.199.110.153
185.199.111.153

若想开启ipv6访问也可以创建AAAA记录,官方文档建议至少创建一个A记录,因为 IPv6 的全局采用速度缓慢。

1
2
3
4
2606:50c0:8000::153
2606:50c0:8001::153
2606:50c0:8002::153
2606:50c0:8003::153

IP来源于GitHub官方文档

  1. 然后在www子域创建CNAME规则指向你的用户名.github.io

如果配置顶点域名(如example.com),则一定要配置www子域。

  1. 打开配置Hexo的公开储存库,点击setting然后选择Pages。然后在Custom domain中填入你的域名,等待DNS验证通过后就可以了。等待几分钟后就可以开启强制HTTPS了。

配置域名

  1. 在/source目录下添加文件命令为CNAME,在里面添加你绑定的域名,否则,使用hexo d 上传的时候会删除github的cname设置

在线编写&发布文章

点击下方标题进入官方文档查看如何配置

Wexagonal

一个Hexo后端,可以通过cloudflare worker部署也可以在服务器和Vercel上部署

目前该项目已经一年没有更新,且官方文档内容不全

ESHexoN

一款简洁、强大的 Hexo 在线编辑器。后端部署支持 Deno 与 Cloudflare Workers 两个平台

ESHexoN 官方使用 Vue + Vuetify 构建了一个公共前端。公共前端只需要填写用户名,密码和后端地址即可直接使用

Qexo

不仅是Hexo在线编辑器,同时集成了图床,友链管理和说说等其他高级功能

可以通过Vercel或者本地部署