Hugo 博客搭建与自动化发布配置

接上一篇文章,已经完成了博客文章上传到 GitHub 后自动化发布到 GitHub Pages。在此基础上,使用 Obsidian 作为写作平台,实现博客写作的舒适工作流。

Hugo + GitHub 博客自动化部署 - 传送门 →

下载与初始化 Obsidian

没什么好说的,下载安装即可,然后按着新手引导创建一个库即可。

Obsidian - Sharpen your thinking

Obsidian 是使用 Markdown 语法的闭源笔记软件。用户可以在笔记间建立双向链接,并且可以探索这些笔记连接形成的关系图谱。该软件旨在帮助用户以一种灵活的、非线性的方式来组织和构架他们的想法和知识。Obsidian 对个人使用免费,商业使用则需购买许可。

安装完毕后,进入 Obsidian 设置,允许第三方插件,便于后续操作。

添加文章模板

Obsidian 中新建一个文件夹,用于存放模板。新建一篇文章,里面根据自己的需求,填入文章的模板,用于快速创建 Hugo 的文章元数据,可以参考我的:

---
title: "{{title}}"
date: "{{date}}"
slug: "blog-post-slug"
tags:
  - "标签"
categories:
  - "分类"
description: "描述"
summary: "摘要"
cover.image: "https://jacob-1256058189.cos.ap-guangzhou.myqcloud.com/md/2024/08/d535bf1f2d4be47d.webp"
draft: false
share: false # 只有此项为 true 时,文章才会被上传
---

从这里开始撰写正文……

## 参考文献

- 参考文献 1

核心出装:Enveloppe

Enveloppe 是一个能够将指定文章推送到指定 GitHub 目录的插件。

GitHub - Enveloppe/obsidian-enveloppe: Enveloppe helps you to publish your notes on a GitHub repository from your Obsidian Vault, for free!

Enveloppe:Obsidian GitHub 保险库发布者

免费在您自己的 GitHub 存储库中发布您的笔记,并随心所欲地处理它们。✨

这使您能够设置任何模板:Jekyll、Mkdocs、Hugo 或自定义模板!

在插件市场中,搜索 Enveloppe 安装即可。

配置 Envelope

进入 Envelope 的设置,选择第一页配置 GitHub config

GitHub config填写内容介绍
GitHub usernameGitHub 用户名
Repository name源码仓库名称
GitHub token个人令牌
Main branchmain仓库的主分支名称
Automatically merge pull requests开启自动通过合并请求
第二页配置 File paths
File paths填写内容
Root foldercontent/posts
第三页配置,Content
Content填写内容介绍
[[Wikilinks]] to [MDlinks](links)开启自动转换链接格式
Text replacer见下表正则式替换功能

Text replacer 规则:

功能查找替换运行时机介绍
文章引用/[^\(]+\.md/{删掉我{< relref "$&" >*/}}将 obsidian 文章之间的引用转化为 hugo 中的格式,在 obsidian 文章之间引用是没有 md 后缀的,因此执行该替换的时间是等文章使用插件转化后再执行,据此后面的箭头向下。
文章封面/cover\.image/cover:\n image将一级 key 转为二级,因为 obsidian 不支持多层级属性。

由于 Hugo 的勾使渲染机制,请将{删掉我{< relref "$&" >*/}}中的删掉我去除后再使用,下面的配置文件同样。

其他的部分不怎么需要调整了,可以参考我的配置文件,在右上角可以导入我的配置再修改:

{
  "github": {
    "branch": "main",
    "automaticallyMergePR": true,
    "dryRun": {
      "enable": false,
      "folderName": "enveloppe"
    },
    "tokenPath": "%configDir%/plugins/%pluginID%/env",
    "api": {
      "tiersForApi": "Github Free/Pro/Team (default)",
      "hostname": ""
    },
    "workflow": {
      "commitMessage": "[PUBLISHER] Merge",
      "name": ""
    },
    "verifiedRepo": true
  },
  "upload": {
    "behavior": "fixed",
    "defaultName": "content/posts",
    "rootFolder": "",
    "yamlFolderKey": "",
    "frontmatterTitle": {
      "enable": false,
      "key": "title"
    },
    "replaceTitle": [],
    "replacePath": [],
    "autoclean": {
      "includeAttachments": true,
      "enable": false,
      "excluded": []
    },
    "folderNote": {
      "enable": false,
      "rename": "index.md",
      "addTitle": {
        "enable": false,
        "key": "title"
      }
    },
    "metadataExtractorPath": ""
  },
  "conversion": {
    "hardbreak": false,
    "dataview": true,
    "censorText": [
      {
        "entry": "/[^\\(]+\\.md/",
        "replace": "{删掉我{< relref \"$&\" >*/}}", // 请将`{删掉我{< relref "$&" >*/}}`中的`删掉我`去除后再使用

        "flags": "",
        "after": false
      },
      {
        "entry": "fm=jpg",
        "replace": "auto=format",
        "flags": "",
        "after": true
      },
      {
        "entry": "/cover\\.image/",
        "replace": "cover:\\n image",
        "flags": "",
        "after": true
      }
    ],
    "tags": {
      "inline": false,
      "exclude": [],
      "fields": []
    },
    "links": {
      "internal": false,
      "unshared": false,
      "wiki": true,
      "slugify": "disable"
    }
  },
  "embed": {
    "attachments": false,
    "overrideAttachments": [],
    "keySendFile": [],
    "notes": false,
    "folder": "",
    "convertEmbedToLinks": "keep",
    "charConvert": "->",
    "unHandledObsidianExt": [],
    "sendSimpleLinks": false
  },
  "plugin": {
    "shareKey": "share",
    "excludedFolder": [],
    "copyLink": {
      "enable": false,
      "links": "",
      "removePart": [],
      "transform": {
        "toUri": true,
        "slugify": "lower",
        "applyRegex": []
      }
    },
    "setFrontmatterKey": "Set"
  },
  "tabsId": "help"
}

推送文章到 GitHub

右键选中文章,选择 Upload 即可。

或者可以使用命令 Envelope ,在选项中选择 Upload。

一些有用的插件

参考文献