惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Jina AI
Jina AI
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
T
Threat Research - Cisco Blogs
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志
S
Schneier on Security
博客园 - 三生石上(FineUI控件)
P
Proofpoint News Feed
G
Google Developers Blog
Project Zero
Project Zero
小众软件
小众软件
NISL@THU
NISL@THU
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Vulnerabilities – Threatpost
B
Blog RSS Feed
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
宝玉的分享
宝玉的分享
博客园 - 司徒正美
Simon Willison's Weblog
Simon Willison's Weblog
Schneier on Security
Schneier on Security
G
GRAHAM CLULEY
GbyAI
GbyAI
Recent Announcements
Recent Announcements
Cisco Talos Blog
Cisco Talos Blog
C
Cisco Blogs
C
CXSECURITY Database RSS Feed - CXSecurity.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
人人都是产品经理
人人都是产品经理
C
CERT Recently Published Vulnerability Notes
罗磊的独立博客
T
Tailwind CSS Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
I
Intezer
Blog — PlanetScale
Blog — PlanetScale
月光博客
月光博客
PCI Perspectives
PCI Perspectives
S
Security @ Cisco Blogs
Google Online Security Blog
Google Online Security Blog
M
MIT News - Artificial intelligence
C
Cybersecurity and Infrastructure Security Agency CISA
T
Threatpost
B
Blog
The Hacker News
The Hacker News
Attack and Defense Labs
Attack and Defense Labs
腾讯CDC
T
Tenable Blog
酷 壳 – CoolShell
酷 壳 – CoolShell

カレーうどん屋

パソコンをアップグレードした 我再也不能不假思索 Soundcore C30i 耳机 日本之行-第二站-奈良 23 年对我影响最大的硬件与软件 旅行与军粮 被我整坏的路由器和服务器 日本之行-第一站-大阪 深圳-香港三日行 My Second Attempt To ARM Servers 修复 UEFI 引导的 GRUB 使用 Docker Compose 部署音乐服务器 Navidrome 使用 Docker Compose 部署 Keycloak 20 寻梦穿越机 - 入门浅谈 使用再生龙 Clonezilla 备份操作系统 BETAFPV 高频头固件编译 AttributeError DIY 显示器音箱 DELL 灵越 15 5547 拆解与更换硅脂 Virmach Japan
迁移 Hexo 渲染环境至 GitHub Actions
Kare Udon · 2022-05-23 · via カレーうどん屋

本博客使用的是 Hexo 静态博客框架,我将渲染环境搭建在家中 NAS 之上,部署了一个 Ubuntu Docker 并安装好了 Node.js 环境,正常使用了一两年。

上周末,写完新文章的我心血来潮,打算在更新博客的时候顺便更新一下老旧的 Node 和 Hexo(Node 12, Hexo 5.2)。

一番折腾之后,以 npm 和 hexo 环境全部被破坏(事后想想也许只是环境变量掉了)的下场结束。

鉴于 NAS 性能低下,更新一次 node module 都需要 30 分钟,我放弃了在 NAS 上重新部署渲染环境的念头,转而使用 GitHub Actions 渲染,并同时部署于 GitHub Pages 与 CloudFlare Pages。

将渲染环境迁至 GitHub Actions

不久之前,CloudFlare Pages 悄悄下架了 Hexo 框架的部署功能,只能用 GitHub Actions 渲染,然后再部署至 CloudFlare Pages 了。

项目结构的修改

若想使用 GitHub Actions,需要将博客的源码上传至 GitHub。考虑到隐私和安全的问题,建议创建一个私有仓库管理源码。

对于项目没有什么需要修改的,因为 Actions 渲染的流程和本地渲染的流程没有区别。

唯一需要改动的,是引入的主题。由于两个 Git 仓库不能嵌套,我们需要以 Git submodule 的形式引入主题仓库。

我使用的是 Fluid 主题。采用 覆盖配置 的方法,即在根目录之下有一份配置会覆盖主题内的配置文件,便于在 Actions 中渲染。

以下也将以 Fluid 为例,请根据你使用的主题修改命令或代码。

首先,删除原来的主题(若使用的是主题内的配置,注意备份配置文件!)

返回博客源码的根目录,执行:

1
git submodule add https://github.com/fluid-dev/hexo-theme-fluid.git themes/fluid

末尾的 themes/fluid 为此 submodule 在项目中的位置与名字,与先前本地渲染时的配置相同即可。

删除子模块的过程较为繁琐,请参考网上的文章进行操作。

在 Clone 此项目时,submodule 默认不会被下载,需要使用指令:

1
git submodule update --init --recursive

下载 submodule。在下面会提到的 Actions 配置文件中会出现这条指令。

接着,就可以将博客源码上传至 GitHub。

GitHub Actions 相关文件

在博客源码根目录创建 .github/workflows/submit.yml.github/script/blog-update.sh 两个文件,填入下列代码。

以下代码参考文章 GitHub Actions 自动部署 Hexo 博客到 cPanel 虚拟主机 - 谷中望月,有所修改。

submit.yml:

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
name: CI

# 监听 main 分支的改动与 Release 的发布
on:
push:
branches:
- main
release:
types: [published]

# 自定义环境变量
env:
GIT_USER: Lao-Liu233 # 改成你自己的 GitHub 用户名
GIT_EMAIL: [email protected] # 改成你自己的 GitHub 注册邮箱

jobs:
build:
name: Build on node ${{ matrix.node_version }} and ${{ matrix.os }}
runs-on: ubuntu-latest
strategy:
matrix:
os: [ubuntu-latest]
node_version: [16.15] # 改成你本地的 Node.js 版本,可以用 `node --version` 命令查询

steps:
# 获取博客源码
- name: Checkout
uses: actions/checkout@v2

# 用 Node.js 渲染
- name: Use Node.js ${{ matrix.node_version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node_version }}

# 安装 Hexo-cli
- name: Install hexo
run: |
npm install -g hexo-cli

# 安装依赖
- name: Install dependencies
run: |
npm install

# 导入 submodule
- name: Clone submodule
run: |
git submodule update --init --recursive

# 配置环境
# ssh-kenscan github.com >> ~/.ssh/known_hosts # 从 GitHub 获取公钥并保存到 known_hosts 文件
- name: Configuration environment
run: |
sudo timedatectl set-timezone "Asia/Shanghai"
mkdir -p ~/.ssh/
echo "$HEXO_DEPLOY_PRI" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
ssh-keyscan github.com >> ~/.ssh/known_hosts
git config --global user.name $GIT_USER
git config --global user.email $GIT_EMAIL

# 生成并部署
- name: Deploy hexo
run: |
hexo clean
hexo g -d

# 部署后更新博客源码,用于添加 abbrlink,如果不用 abbrlink,需要删除
- name: Update Blog
run: |
sh "${GITHUB_WORKSPACE}/.github/script/blog-update.sh"

.github/script/blog-update.sh:

1
2
3
4
5
6
7
8
9
#!/bin/sh

if [ -z "$(git status --porcelain)" ]; then
echo "nothing to update."
else
git add source/_posts/ #仅对文章源码所在文件夹进行修改
git commit -m "triggle by commit ${GITHUB_SHA}" -a
git push origin main
fi

Commit + Push,打开 Actions 界面,就能看到正在运行的 Action 啦。

不出意外,Action 成功执行,1分钟内博客就能渲染成功、部署至 GitHub Pages。

同时部署至 CloudFlare Pages

步骤较为简单,我简述一下。

打开 CloudFlare Pages, 连接至存放 渲染后 的静态文件的仓库,渲染的框架选择 None,执行的指令填写 exit 0; 就可以了。

执行部署后,渲染后的静态文件就被部署至 CloudFlare Pages 啦。