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。

一些有用的插件

参考文献