博客自动部署方案

发布于 — 2024 年 12 月 19 日
#blog

趁着这次博客迁移, 更新记录下当前博客的写作, 同步, 发布方案.

之前是使用Hexo来作为博客的生成框架, 现在迁移到了Hugo, 迁移的一个原因是Hexo中无法过滤掉没有Title的文件, 导致生产了很多空白页面, 而Hugo则可以过滤掉没有Title的文件, 从而避免了这个问题.
另外的一个原因是Hugo的性能比Hexo要高, 在生成静态页面时, Hugo的速度更快.
现在博客的主题也只想要一个简洁的样式, 所以就选择了HugoMinima主题, 简单修改了一下, 就完成了迁移.

写作记录方面

我最开始是使用Typora来写作, 及时渲染, 但是Typora后来开始收费, 又尝试了Notion, 但是Notion的速度太慢, 慢慢就换到了现在使用的Obsidian.
这个目前来说绝对是写作神器, 配合各种插件, 可以方便的写作, 任务安排/查看, 画流程图等等.
再配合Remote Sync插件, 可以非常方便的进行多端同步.

以下是其中一些步骤的记录:

Obsidian同步

使用Obsidian也有官方同步方案, 但是需要收费, 作为一名白嫖党, 肯定是不愿意花这个钱的, 所以就使用Remote-Sync来进行数据同步, 按照文档配置一下即可完成, 非常简单. Remote-Sync的同步方案有多种, 我最后选择了One Drive的同步方案, 原因有以下几点:

  1. 这个国内也可以正常访问, 速度也很快
  2. 注册账号就有一些免费空间, 而同步的数据仅仅是一些文字, 图片. 总的体积也不会很大, 免费空间也足够使用了
  3. 在手机端也可以使用(这个就过滤掉了Git的同步方案, 因为手机端无法使用Git, 所以就只能使用OneDrive的同步方案了)

同时我有一台NAS, 在NAS上也会通过Cloud-Sync将数据从OneDrive云盘下载, 来进行数据备份, 再配合定时任务来监测是否有文件变动, 有变动则进行Git的提交. Git提交后则会触发Github Action来进行博客的构建和发布流程.

NAS同步

使用Obsidian写作时, 我博客的内容仅仅是一个同步内容的子文件夹, 使用Cloud-Sync可以指定要同步哪个文件夹到NAS的哪个目录上. 同时我博客的其他代码, 配置等, 我是没有放到Obsidian中的, 所以会有两个文件夹, 一个存放Obsidian中的文章内容, 一个存放博客的源文件. 然后通过软链将文件关联到源文件下.

同步任务可以设置每天定时同步, 同步完成后再跟一个任务来检查博客文件是否有变动, 如果有变动, 则自动提交到Github 检查变更的脚本内容为:

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

now=$(date +%Y-%m-%d)
if [ -n "git status -s" ];then
    git add .
    git commit -m  "update files on $now"
    git push
else 
echo "no changes on $now"    
fi

Github Action.

其实博客的部署也可以在NAS上运行, 但是我不想在NAS上安装相关的依赖, 就使用了Github Action来完成此任务. 我的仓库中有两个分支

  • hugo : 是markdown文件和hugo的配置文件
  • master : 生成的html文件

使用Githubuser-name.github.io仓库, 并关联到自己的域名上, 从而实现无服务器部署.

设置私钥 设置私钥到user-name.github.io仓库下,打开该仓库,找到setting/secrets/New repository secret将本地~/.ssh/id_ras文件复制进来,名称可以随便取,不过在下面使用的时候需要对应起来,比如我用了ACTION_DEPLOY_KEY这个名称。需要勾选 Allow write access

Action配置文件

 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
name: Deploy Blog

on:
  push:
    branches:
      - hexo
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout source
        uses: actions/checkout@v4
        with:   
          ref: hexo
      - name: Setup Node.js
        uses: actions/setup-node@v3
        with:
          node - version: stable
      - name: Install required libs
        run: |
          npm install hexo-deployer-git --save          
          npm install hexo-generator-feed --save
      - name: Verify Node.js version
        run: node - v   
      - name: Setup hexo
        env:
          ACTION_DEPLOY_KEY: ${{ secrets.ACTION_DEPLOY_KEY }}
        run: |
          mkdir -p ~/.ssh/
          echo "$ACTION_DEPLOY_KEY" > ~/.ssh/id_rsa
          chmod 600 ~/.ssh/id_rsa
          ssh-keyscan github.com >> ~/.ssh/known_hosts
          git config --global user.email "liunaijie1996@163.com"
          git config --global user.name "Jarvis"
          npm install hexo-cli -g
          npm install 
      - name: Hexo deploy
        run: |
          hexo clean
          hexo g
          hexo d

一个流程图大致是这样: