[{"content":" Tags # ","date":"2026 年 5 月 9 日","externalUrl":null,"permalink":"/tags/","section":"","summary":"\u003ch1 class=\"relative group\"\u003eTags \n    \u003cdiv id=\"tags\" class=\"anchor\"\u003e\u003c/div\u003e\n    \n    \u003cspan\n        class=\"absolute top-0 w-6 transition-opacity opacity-0 ltr:-left-6 rtl:-right-6 not-prose group-hover:opacity-100\"\u003e\n        \u003ca class=\"group-hover:text-primary-300 dark:group-hover:text-neutral-700 !no-underline\" href=\"#tags\" aria-label=\"锚点\"\u003e#\u003c/a\u003e\n    \u003c/span\u003e        \n    \n\u003c/h1\u003e","title":"","type":"tags"},{"content":"","date":"2026 年 5 月 9 日","externalUrl":null,"permalink":"/tags/arch-linux/","section":"","summary":"","title":"Arch Linux","type":"tags"},{"content":"","date":"2026 年 5 月 9 日","externalUrl":null,"permalink":"/tags/hugo/","section":"","summary":"","title":"Hugo","type":"tags"},{"content":"","date":"2026 年 5 月 9 日","externalUrl":null,"permalink":"/posts/","section":"Posts","summary":"","title":"Posts","type":"posts"},{"content":"","date":"2026 年 5 月 9 日","externalUrl":null,"permalink":"/tags/wsl2/","section":"","summary":"","title":"WSL2","type":"tags"},{"content":"","date":"2026 年 5 月 9 日","externalUrl":null,"permalink":"/tags/%E6%8A%80%E6%9C%AF/","section":"","summary":"","title":"技术","type":"tags"},{"content":" 本文将介绍安装 WSL2 并进行基础配置的方法，以及在其中复现之前博客工作流的完整过程。\n近来学业繁忙，偶然想起我还有一个博客静静地躺在 GitHub 上，于是心血来潮，打算重启这个项目。奈何前段时间电脑坏了，重装了系统，正好借这个机会整理一下我的开发环境。\n之前我一直在 Windows 环境下搞开发，弄得十分杂乱，各种配置和环境变量满天飞（确信）。后来有段时间尝试将 Arch Linux 作为主力系统，虽然 Linux 的开发体验很好，但是日常使用远没有 Windows 省心。再加上一些科研要用到的软件只支持 Windows，我不得不捏着鼻子重新投入 Windows 的怀抱。\n后来偶然听朋友介绍了 WSL2，我说：“竟有此等好物？”于是忙里偷闲，在新系统上开始了本次尝试。\n适用于 Linux 的 Windows 子系统（WSL）是 Windows 的一项功能，可用于在 Windows 计算机上运行 Linux 环境，而无需单独的虚拟机或双重启动。 WSL 旨在为想要同时使用 Windows 和 Linux 的开发人员提供无缝高效的体验。\n我目前的想法是：将 Windows 作为主力系统日常使用，在 WSL2 的 Arch Linux 上做开发，各取所长。\n安装并配置 WSL2 # 当前我使用的操作系统是 Windows 11 26200.8246，整个安装流程十分丝滑。如果你使用的是 Windows 10 19041 或者更老的版本，可能需要参考微软官方文档进行手动安装。\n安装 WSL2 # 我决定安装 Arch Linux 发行版的 WSL，将其命名为 Arch，并将安装目录设置到 D:\\10-WSL2\\Arch。在 Windows 中打开 Powershell 并执行以下命令：\nwsl.exe --install --distribution archlinux --name Arch --location D:\\10-WSL2\\Arch 如果 WSL 功能尚未启用，首次执行该命令后需要重启电脑，重启后再运行该命令即可开始下载安装。 可以通过命令 wsl.exe --list --online 查询所有可在线下载的 Linux 发行版。\n--location 指定的安装目录必须为空或不存在，否则将会报错。\n等待自动安装完成后，开始菜单里将会出现名为 Arch（即 --name 设置的值）的 Arch Linux 图标。打开它即可在命令行中运行 Arch Linux。\n如果不指定 --distribution，WSL2 会默认安装 Ubuntu。但是 Arch Linux 是最好的 Linux 发行版喵~\n初次启动与基础配置 # 进入安装好的 Arch Linux，像常规配置 Arch Linux 系统那样进行配置就可以了。\n设置 root 密码和创建普通用户 # passwd root # 设置root密码 useradd -m \u0026lt;username\u0026gt; # 例如：useradd -m dexter passwd \u0026lt;username\u0026gt; # 设置上一步创建的普通用户的密码 配置 Pacman 包管理器、国内镜像源以及 ArchLinuxCN 源 # pacman -Syyu # 更新包数据库 pacman -S vi vim sudo # 安装必要工具 由于国内特殊的网络环境，需要配置一些镜像源以加快软件下载速度。打开 /etc/pacman.d/mirrorlist，将国内镜像源置顶。我比较常用的是以下几个：\nServer = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch Server = https://mirrors.aliyun.com/archlinux/$repo/os/$arch 然后是添加 ArchLinuxCN 源。在 /etc/pacman.conf 文件末尾添加以下几行：\n[archlinuxcn] SigLevel = Optional TrustAll Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch 接着安装 archlinuxcn-keyring。\npacman -Syu pacman -S archlinuxcn-keyring 为普通用户授予 sudo 权限 # usermod -aG wheel \u0026lt;username\u0026gt; visudo 在打开的 /etc/sudoers 文件中，找到 %wheel ALL=(ALL:ALL) ALL，取消注释。\n设置默认登录用户 # 在 /etc/wsl.conf 中添加以下内容：\n[user] default=\u0026lt;username\u0026gt; 保存后重启 WSL 即可。\n不得不品的fastfetch环节 配置博客工作环境 # 在之前的文章中，我使用了 Hugo + Blowfish 作为博客的架构。接下来，我们将在刚刚配置好的 WSL2 中完成相关配置。\n使用 VS Code 远程连接 WSL2 # 现在我们可以在 Windows 中使用 VS Code 无缝享受到 Arch Linux 的丝滑开发体验了。\n进入 VS Code，按 Ctrl Alt O，选择“连接到 WSL”。 等待 VS Code 自动安装相应扩展。VS Code 会检测已安装的 WSL 环境，并启动一个新的窗口连接到你的 WSL 环境。 之后，我们可以直接使用 VS Code 像本地开发一样编辑文件和运行终端命令，所有操作将会在 WSL 中执行。\n安装基础工具 # sudo pacman -S git base base-devel wget curl which net-tools openssh hugo 等待下载完成之后验证安装：\ngit version hugo version 配置 Git 与 GitHub # 接下来，我们需要在 WSL2 环境中重新配置 Git 身份信息，并连接 GitHub 仓库。\n配置 Git 用户名和邮箱 # git config --global user.name \u0026#34;你的 GitHub 用户名\u0026#34; git config --global user.email \u0026#34;你的 GitHub 邮箱\u0026#34; 建立 SSH 连接 # 生成 SSH 密钥对（一般不设置密码，一路回车即可）：\nssh-keygen -t ed25519 -C \u0026#34;你的 GitHub 邮箱\u0026#34; 输入以下指令，显示公钥的内容并复制。\ncat ~/.ssh/id_ed25519.pub 登录 GitHub，进入 Settings → SSH and GPG keys，点击 New SSH key，将复制的公钥粘贴进去并保存，随便起一个名字。\n测试连接：\nssh -T git@github.com 如果看到“successfully authenticated”的提示，说明已经成功建立连接。\n克隆源代码仓库到 WSL2 本地 # 在之前的文章中，我已经将源代码仓库上传到 GitHub 的私有仓库 BlogSource 中，现在将它重新克隆到本地。\ncd ~/dev # 我希望将仓库放在 /home/dev 目录下 git clone git@github.com:derec30240/BlogSource.git cd BlogSource 因为上一步已经配置好了 SSH 密钥，这里就使用 SSH 地址（而不是 HTTPS 地址）进行克隆。\n这时所有的源代码已经被克隆到本地。如果你注意力惊人，就会发现/themes/blowfish 目录下没有文件。这是因为之前我们将 Blowfish 作为子模块导入到了项目中，所以我们还需要初始化并拉取所有子模块：\ngit submodule init git submodule update --recursive 验证环境是否就绪 # 执行以下命令检查一切是否正常：\nhugo version hugo server 如果一切正常，在浏览器中访问 http://localhost:1313 就可以看见之前创建的博客了。太棒了！\n日常编辑与发布 # 现在的编辑与发布流程和之前没什么区别。让我们复习一下：\n创建新文章 # hugo new posts/文章名.md 不过为了方便管理文章中的图片等附件，我们一般会在 /content/posts 下新建一个以文章名命名的文件夹，再在该文件夹下创建 index.md 作为文章页面，并为其添加 Front Matter。结构如下：\ncontent └─ posts ├─ 文章名1 | └─ index.md └─ 文章名2 └─ index.md 当然如果你不需要为文章添加附件，这种结构属实没必要。我只是强迫症犯了\n本地预览 # hugo server # 常规预览 hugo server -D # 预览包括草稿 生成静态文件并提交 # hugo # 生成静态文件 git add . git commit -m \u0026#34;添加新文章\u0026#34; git push origin main GitHub Action 自动部署 # 好消息是，我们并不需要做任何配置。写好的 /.github/workflows/*.yml 文件依旧会像以前一样自动触发。\n现在开始，我们可以像之前一样继续愉快地写博客了喵~\n参考 # 如何使用 WSL 在 Windows 上安装 Linux 设置 WSL 开发环境 Arch Linux pacman 主要国内镜像源配置（wsl通用，小白向） ","date":"2026 年 5 月 9 日","externalUrl":null,"permalink":"/posts/%E5%B0%86%E5%8D%9A%E5%AE%A2%E5%B7%A5%E4%BD%9C%E6%B5%81%E8%BF%81%E7%A7%BB%E5%88%B0wsl2/","section":"Posts","summary":"\u003cblockquote\u003e\n\u003cp\u003e本文将介绍安装 WSL2 并进行基础配置的方法，以及在其中复现之前博客工作流的完整过程。\u003c/p\u003e","title":"将博客工作流迁移到 WSL2","type":"posts"},{"content":"","date":"2025 年 7 月 17 日","externalUrl":null,"permalink":"/tags/github/","section":"","summary":"","title":"GitHub","type":"tags"},{"content":" 本文将详细介绍在 Windows 环境下使用 Hugo 与 Blowfish 主题搭建个人博客，并借助 GitHub Actions 自动推送静态网站到 GitHub Pages 的方法。\n在搭建这个博客的过程中，我遭遇了各种各样的问题。然而，部分问题在官方文档和其他网络教程里都语焉不详，只能靠我自己慢慢摸索解决办法。现在，我把这些踩过的坑记录下来，一来是提醒自己，二来也希望能对后来者有所帮助。\n注意 这篇文章主要面向有一定计算机基础的人群。如果你还不了解什么是命令行、如何添加环境变量以及如何使用 Git 等相关内容，建议先系统性地学习这些知识，再按照本文的步骤进行操作。 准备工作 # 一个 GitHub 账号 安装并配置好 Git 一个文本编辑器（比如 VS Code、Notepad++等，记事本也行） 一个浏览器 （废话） 创建 GitHub 仓库 # 我们需要创建两个 GitHub 仓库。其中一个是私有仓库，用于存放网页的源代码；另一个是公共仓库，作为我们接下来要用到的 GitHub Pages 仓库，用于存放静态网页文件。\n首先创建一个新的私有仓库，稍后将会用它来存放 Hugo 生成的源代码。你可以为它取任何你喜欢的名字。例如，我将它命名为 BlogSource。\n然后创建一个公共仓库作为 GitHub Pages 的存放位置。需要注意的是，这个仓库的名称必须是 \u0026lt;username\u0026gt;.github.io，其中，\u0026lt;username\u0026gt; 是你的 GitHub 用户名。例如，我将它命名为 derec30240.github.io。\nderec30240/derec30240.github.io HTML 0 0 关于 GitHub Pages 的更多信息参见 GitHub Pages 官方文档。\n本地安装 # 安装 Hugo # 前往 Hugo 官方 GitHub 仓库，进入 Release 界面下载对应版本。我这里选择下载 hugo_0.148.1_windows-amd64.zip。\ngohugoio/hugo The world’s fastest framework for building websites. Go 87994 8257 将下载的文件解压后，放在合适的位置，例如 D:\\Hugo。\n将 hugo.exe 所在的文件夹路径 （不是 hugo.exe 的路径！！！） 添加到系统环境变量中。\n例如，如果 hugo.exe 的路径是 D:\\Hugo\\hugo.exe，那么将 D:\\Hugo 添加到系统环境变量中。\n在终端执行以下命令，验证安装是否成功：\nhugo version 如果安装成功，会显示 Hugo 的版本信息。否则会报错。\n\u0026gt; hugo version hugo v0.148.1-98ba786f2f5dca0866f47ab79f394370bcb77d2f windows/amd64 BuildDate=2025-07-11T12:56:21Z VendorInfo=gohugoio 创建本地站点 # 在终端执行以下命令，创建一个新的 Hugo 站点：\nhugo new site \u0026lt;mysite\u0026gt; 其中 \u0026lt;mysite\u0026gt; 是站点的名称，下文将以 BlogSource 为例进行说明。当然你也可以将其替换为自己喜欢的名称。\n这个命令将在当前位置创建一个名为 \u0026lt;mysite\u0026gt; 的文件夹，站点根目录即位于该文件夹内。\n进入站点根目录：\ncd BlogSource 到这一步，不出意外的话，你已经成功创建了一个站点。你可以直接跳转到这里继续下一步操作。当然，如果你已经迫不及待地想要尝试运行这个站点，也可以接着按下面的步骤操作。\n新建一篇文章：\nhugo new post/my-post.md 这个命令将在 /content/post 文件夹中生成 my-post.md 文件。你可以使用文本编辑器打开这个 .md 文件。\n打开之后，你会看到文件里已经生成了一些内容：\n+++ title = \u0026#39;My Post\u0026#39; date = 2025-07-17T15:09:01+08:00 draft = true +++ 这是文件头区域（Front Matter），在使用 hugo new 创建新的 .md 文件时，会根据 /archetypes 中的模板在文件开头自动生成。其中保存着文件的基本信息，例如 title 是标题，date 是日期，draft 是草稿状态等。\n若 draft 的值为 true ，启动服务后这篇文章是默认不可见的。如果要在预览中显示这些文章，需要给命令添加参数。详见下文。\n你可以在文件中随意编辑，之后点击保存。\n进行预览\n在站点根目录下，执行以下命令启动服务：\nhugo server # 显示草稿状态的文章 hugo server -D 此时在浏览器中访问 http://localhost:1313 即可看到你的站点。但是此时你会发现页面显示 404 Page Not Found。不用担心，这是正常的，因为我们还没有安装主题。\n先按 Ctrl + C 停止服务。接下来开始安装主题。\n安装 Blowfish 主题 # 在站点根目录依次执行以下命令：\ngit init -b main git submodule add -b main https://github.com/nunocoracao/blowfish.git themes/blowfish 这些命令将把你的站点目录初始化为一个新的 git 仓库，并把 Blowfish 作为其子模块导入。\n等待 Blowfish 下载完成后进行下一步操作。\n删除站点根目录中的 hugo.toml 文件。\n将 /themes/blowfish/archetypes 和 /themes/blowfish/config 两个文件夹分别复制到站点根目录的 /archetypes 和 /config 中，替换原有文件。\n进入 /config/_default 目录，将其中的 language.en.toml 和 menus.en.toml 两个文件名中的 en 替换为默认语言代码。例如，在中文环境下，将其分别重命名为 language.zh-cn.toml 和 menus.zh-cn.toml。\n打开同一目录下的 hugo.toml 文件，按照以下步骤修改：\n取消第 5 行的注释。 取消第6 行的注释，并将其中的域名替换为你的域名，也就是之前创建的 GitHub Pages 域名：https://\u0026lt;userename\u0026gt;.github.io，其中 \u0026lt;username\u0026gt; 是你的 GitHub 用户名。 将第 7 行的 en 替换为 zh-cn。 在第 8 行插入 hasCJKLanguage = true，以启用汉字计数。 以我的文件为例，修改后的 hugo.toml 开头应该是这样的：\n5 6 7 8 theme = \u0026#34;blowfish\u0026#34; baseURL = \u0026#34;https://derec30240.github.io/\u0026#34; defaultContentLanguage = \u0026#34;zh-cn\u0026#34; hasCJKLanguage = true 现在回到站点根目录，执行以下命令启动服务：\nhugo server 可以看到你的站点已经成功运行了。\n至此，Blowfish 的基本安装已经完成。接下来我们将进一步完善网站配置。\n配置与调试 # 配置站点 # 本节内容仅供参考。请根据 Blowfish 官方文档，结合自己的实际情况进行配置。 配置文件中每一项参数在官方文档中都有详细说明，如有疑问建议优先查阅。在此仅对一些关键步骤与容易出错的地方进行解释。\n建议一边运行 hugo server 预览，一边进行修改。\n进入 /config/_default 目录，打开 language.zh-cn.toml 文件进行修改。以下是我文件中的部分内容：\nlanguageCode = \u0026#34;zh-cn\u0026#34; languageName = \u0026#34;Simplified Chinese (China)\u0026#34; weight = 1 title = \u0026#34;Dr. Kee\u0026#39;s Blog\u0026#34; [params] displayName = \u0026#34;简体中文\u0026#34; isoCode = \u0026#34;cn\u0026#34; rtl = false dateFormat = \u0026#34;2006 年 1 月 2 日\u0026#34; logo = \u0026#34;img/logo.png\u0026#34; description = \u0026#34;Dr. Kee\u0026#39;s Blog\u0026#34; copyright = \u0026#34;© { year } by Dr. Kee. All Rights Reserved.\u0026#34; [params.author] name = \u0026#34;Dr. Kee\u0026#34; image = \u0026#34;img/profile.png\u0026#34; bio = \u0026#34;Talk less. Smile more.\u0026#34; links = [ { github = \u0026#34;https://github.com/derec30240\u0026#34; }, { bilibili = \u0026#34;https://space.bilibili.com/526473701\u0026#34; }, { steam = \u0026#34;https://steamcommunity.com/profiles/76561199075095514/\u0026#34; }, { email = \u0026#34;mailto:derec30240@163.com\u0026#34; }, ] params.logo：站点 logo 在 /assets 中的相对位置 params.author.image：作者头像在 /assets 中的相对位置，也可以是外部 URL 这里所说的这两个目录是站点根目录中的 /assets，而非 /themes/blowfish 中的 /assets。事实上，对网站进行的所有编辑均应在站点根目录中进行，一般不要编辑 /themes/blowfish 中的内容。这样可以避免文件结构混乱。\n经过测试，若 /assets 和 /themes/blowfish/assets 中存在同名文件，会优先调用 /assets 中的文件。另外，如果编辑了 /themes/blowfish 中的文件，在后续更新主题时可能会产生冲突。综上，推荐优先在站点根目录中进行编辑。\n打开 menus.zh-cn.toml 进行修改。以下是我文件中的部分内容：\n[[main]] name = \u0026#34;Posts\u0026#34; pageRef = \u0026#34;/posts\u0026#34; weight = 10 [[main]] name = \u0026#34;Tags\u0026#34; pageRef = \u0026#34;/tags\u0026#34; weight = 20 [[main]] name = \u0026#34;About\u0026#34; pageRef = \u0026#34;/about\u0026#34; weight = 30 这段配置将在网站头部菜单栏中创建三个项目：Posts、Tags 和 About，分别指向各自 pageRef 中的对应路径。这些项目会根据各自的 weight 进行排序，若 weight 相等则根据 name 的字母顺序排序。你可以根据自己的需求进行调整。\n打开 params.toml 进行修改。具体的可调节参数特别多，请参照 Blowfish 官方文档进行配置。你可以逐一尝试调节这些参数，看看会产生什么效果。\n另外，如果想要配置站点的 Favicon（即浏览器标签中网站标题旁边的小图标），应当把它们保存在 /static 目录中。它的结构看起来应当是这样的：\nstatic ├─ android-chrome-192x192.png ├─ android-chrome-512x512.png ├─ apple-touch-icon.png ├─ favicon-16x16.png ├─ favicon-32x32.png ├─ favicon.ico └─ site.webmanifest 能够制作 Favicon 的网站有很多，我使用的是 favicon.io。\n创建文章页面 # 如果你在之前的步骤中已经创建过文章，推荐把他们全部删除后再创建新的文章，因为 Blowfish 的模板和 Hugo 的默认模板有一些区别。当然如果不嫌麻烦的话你也可以在之前的基础上进行修改。\n新建一篇文章：\nhugo new post/my-new-post.md 这个命令将在 /content/post 文件夹中生成 my-new-post.md 文件。\n打开 my-new-post.md 文件，可以看到文件里已经生成了一些内容：\n--- title : \u0026#39;My New Post\u0026#39; date : 2025-07-17T17:10:29+08:00 draft : true description : \u0026#34;\u0026#34; --- 你可以在文件中随意编辑，之后点击保存。\n与标准 Markdown 语法和 Hugo 默认简码略有不同的是，Blowfish 有一套额外的语法和简码规则。同时，Blowfish 还允许你对页面内容进行高度自定义。如果你对这些还不是很了解的话，推荐参考以下 Blowfish 官方内容：\nMarkdown 简码 文件头信息 缩略图 内容示例 在站点根目录下，输入 hugo server 启动服务。此时在浏览器中访问 http://localhost:1313，进入 Posts 页面，即可看到你的文章。\n如果文章没有显示出来，请确认其 draft 参数是否为 false，并确保 menus.zh-cn.toml 中的 pageRef 配置正确。\n如果想要预览草稿状态的文章，请使用 hugo server -D 命令。 上传站点 # 在站点根目录下，执行以下命令生成静态文件：\nhugo 这时你会发现，站点根目录下多了一个 /public 文件夹，生成的站点静态文件都存放在这个文件夹里。这也是我们接下来要使用 GitHub Actions 自动推送的目录。\n依次执行以下命令，将站点的所有源文件推送到你的私有仓库中：\ngit remote add origin \u0026lt;你的私有仓库地址\u0026gt; git pull --rebase origin main git add . git commit -m \u0026#39;\u0026lt;提交信息\u0026gt;\u0026#39; git push -u origin main 之后对站点做出修改并需要提交时，使用以下命令即可：\ngit add . git commit -m \u0026#39;\u0026lt;提交信息\u0026gt;\u0026#39; git push -u origin main 到这里，你的站点源文件应该被成功推送到之前创建好的私有仓库中了。接下来，我们将使用 GitHub Actions 实现自动推送并发布到 GitHub Pages。\n发布到 GitHub Pages # 在开始之前，我们再来梳理一遍使用 Hugo 生成站点的流程：\n安装 Hugo 安装主题 进行编辑 生成静态页面 将静态页面推送到 GitHub Pages 如果你理解了以上流程，那么接下来的操作应该非常好懂。我们使用 GitHub Actions 的目的，就是要将以上所有步骤自动化。之后，当你每次完成编辑并推送到私有仓库时，这些流程都会被自动执行。同样，我们也将按照这个思路来撰写 Workflows 文件。\n如果你还不知道什么是 GitHub Actions，推荐阅读这些内容：GitHub Actions 文档、5分钟快速入门 GitHub Actions 以子模块形式导入 /public # 如果你是按照前面的流程一步步进行到这里的，那么只需要将 /public 导入为子模块即可。打开站点根目录下的 .gitmodules 文件，在其中添加下面这一段：\n[submodule \u0026#34;public\u0026#34;] path = public url = \u0026lt;你的 GitHub Pages 仓库地址\u0026gt; 例如，我的 .gitmodules 文件如下：\n[submodule \u0026#34;themes/blowfish\u0026#34;] path = themes/blowfish url = https://github.com/nunocoracao/blowfish.git branch = main [submodule \u0026#34;public\u0026#34;] path = public url = https://github.com/derec30240/derec30240.github.io 如果你并非按照前面的流程操作到这里，或者你的站点根目录下没有 .gitmodules 文件，或者 .gitmodules 文件中的内容中不包含上面第一项，说明 Blowfish 主题没有被成功添加为子模块。请返回前文，执行这一节中的第一步。\n个人访问令牌（PAT） # 我们在最开始创建了两个仓库，并希望将私有仓库中的内容推送到公共仓库中。但是 GitHub Actions 自身只拥有自己所在仓库的操作权限。所以，为了实现跨仓库推送，我们需要为它添加一个允许跨仓库操作的令牌，即个人访问令牌（personal access token, PAT）。\n创建 PAT # 前往 GitHub 账号设置中的 Personal access token 界面。 点击「Generate new token」，选择「Generate new token (classic)」。 按如下方式设置 PAT： Notes 填一个自己喜欢的名称。 Expiration 选择 No expiration。 Select scopes 只需勾选 repo 和 workflow 即可。 点击页面最下方的「Generate token」按钮，会显示刚才创建的 PAT。点击右侧的按钮将它复制下来。PAT 只会显示这一次，请务必复制下来保存好，我们马上会用到它。 设置私有仓库的 Secret # 进入私有仓库界面，打开「Settings」-「Secrets and variables」-「Actions」，点击「New repository secret」。 Name 填一个自己喜欢的名称。将刚才复制的 PAT 粘贴到 Secret 或 Value 字段中。 撰写 Workflows 文件 # 在私有仓库的根目录中创建目录 /.github/workflows，这个文件夹将用来专门存储 Workflows 文件。\n在其中创建文件 \u0026lt;action\u0026gt;.yml。其中 \u0026lt;action\u0026gt; 可以使用自己喜欢的名称。此时文件结构应当是这样的：\n. └─ .github └─ workflows └─ \u0026lt;action\u0026gt;.yml 打开\u0026lt;action\u0026gt;.yml，开始撰写 workflow。如果你不会写，可以参考我的配置，也可以参考 Hugo 官方配置，或者让 AI 帮你写。当然都要根据你的实际情况进行修改。\n以我的配置为例，第30行的 \u0026lt;Name\u0026gt; 需要替换为你在创建 Secret 时设定的 Name；第32行的 \u0026lt;repo\u0026gt; 需要替换为你自己的 GitHub Pages 仓库地址。\nname: Deploy Hugo site to Pages # Action 的名称 on: push: branches: - main # 在 main 分支发生 push 事件时触发 jobs: build: runs-on: ubuntu-latest # 使用最新版 Ubuntu 作为虚拟环境 steps: - name: Checkout repository uses: actions/checkout@v2 with: submodules: true # 使用子模块 - name: Setup Hugo # 在虚拟环境中安装 Hugo uses: peaceiris/actions-hugo@v2 with: hugo-version: \u0026#39;latest\u0026#39; extended: true - name: Build Hugo site # 生成静态文件 run: hugo --minify - name: Deploy to GitHub Pages # 部署到 GitHub Pages uses: peaceiris/actions-gh-pages@v3 with: personal_token: ${{ secrets.\u0026lt;Name\u0026gt; }} # 拥有相应权限的 PAT publish_dir: ./public # 要推送的目录 external_repository: \u0026lt;repo\u0026gt; # 目标仓库地址 publish_branch: main # 推送到目标仓库的 main 分支 测试效果 # 完成以上所有步骤后，在私有仓库进行 push 操作，即可触发我们编辑好的 workflow。\n然后，进入你的 GitHub Pages 仓库界面，可以看到站点的静态文件已经被成功推送。在提交信息旁边的绿色小勾说明我们的 workflow 已经被成功执行。\n进入 Action 界面即可看到全部 workflow 的执行情况。橙色的圈表示正在执行，蓝色的勾表示成功，红色的叉表示失败（不过既然静态文件能够出现在 GitHub Pages 仓库，说明 workflow 肯定运行成功了）。我们可以在私有仓库的 Action 界面查看每次 push 后的执行情况。如果运行失败，GitHub 会通过邮件提醒你。\n点击即可查看详细执行过程和日志。\n🎉恭喜你成功搭建了属于自己的博客！\n提示 # 修复 Tags 页面显示问题 # 当你第一次为文章添加了 tags 属性后，进入到「Tags」页面，可能会发现刚才添加的 tags 都没有显示。\n如果遇到了这种问题，按照下面的步骤进行配置：\n确保 /config/_default/menus.zh-cn.toml 中相关的 pageRef 配置正确。 在 /content 目录下创建 /tags 文件夹。 在 /content/tags 目录下创建 _index.md 文件。 这时再打开「Tags」页面，可以看到 tags 都正常显示在这里了。你可以在这个 _index.md 文件中添加你想要在「Tags」页面显示的内容。\n这个方法也适用于首页、「Categories」、「About」等页面。对于首页，_index.md 可直接位于 /content 目录下。\n设置代码块行为 # 如果代码块不能复制，按照下面的流程进行配置：\n将 /config/_default/params.toml 中的 enableCodeCopy 设置为 true。 确保 /config/_default/markup.toml 中的 highlight.noClasses 设置为 false。 代码块必须声明使用的语言类型，或者声明为 plaintext 类型。 如果想让代码块显示行号，在语言类型声明后添加 {linenos=table} 即可。例如：\n1 2 3 4 5 6 ```yml {linenos=table} name: Deploy Hugo site to Pages on: push: branches: - main 更多操作详见 语法高亮 | Hugo 官方文档。\n然而，在默认情况下，如果开启 linenos=table，当代码行过长时无法左右滚动。一种可能的解决方法如下：\n在 /config/_default/hugo.toml 中添加如下内容：\n[markup] [markup.highlight] lineNos = true lineNumbersInTable = false # 强制使用非表格模式 使用 {linenos=true}。\n但是这会导致复制代码时连同行号一起复制。我目前还没有找到更好的解决方法，还请各位提点。\n添加自定义图标 # 如果想使用主题自带图标之外的图标（例如 Bilibili ），可以去寻找对应的 .svg 矢量图，然后对其重命名，使文件名只包含英文字母和数字，存放在 /assets/icons 目录下。需要使用时，直接通过不带 .svg 扩展名的文件名，在简码中引用即可。\n例如，要使用 Bilibili 的图标，在找到合适的文件后将其重命名为 bilibili.svg，使用 {{\u0026lt; icon \u0026quot;bilibili\u0026quot; \u0026gt;}} 即可。主页中的 links 也会自动匹配同名图标。\n如果使用后发现图标颜色显示异常，可以用文本编辑器打开对应的 .svg 文件，将 fill=\u0026quot;***\u0026quot; 修改为 fill=\u0026quot;currentColor\u0026quot;，或者将 \u0026lt;path d=\u0026quot;***\u0026quot;\u0026gt; 修改为 \u0026lt;path fill=\u0026quot;currentColor\u0026quot; d=\u0026quot;***\u0026quot;\u0026gt;。\n在这里推荐一个常用的 svg 图标网站：Simple Icons。但是由于版权原因，有些图标在这个网站中可能找不到 ，就要靠诸位各显神通了。\n参考 # Hugo 官方文档 Blowfish 官方文档 GitHub Pages 官方文档 GitHub Actions 官方文档 Nuno Coração - 使用 Blowfish和 Hugo 构建你的主页 褐瞳さん - 如何使用 GitHub Page 搭建自己的博客 Tomial - Hugo使用GitHub Action自动部署博客到GitHub Pages ","date":"2025 年 7 月 17 日","externalUrl":null,"permalink":"/posts/%E4%BD%BF%E7%94%A8hugo+github-pages%E6%90%AD%E5%BB%BA%E4%B8%AA%E4%BA%BA%E5%8D%9A%E5%AE%A2/","section":"Posts","summary":"\u003cblockquote\u003e\n\u003cp\u003e本文将详细介绍在 Windows 环境下使用 Hugo 与 Blowfish 主题搭建个人博客，并借助 GitHub Actions 自动推送静态网站到 GitHub Pages 的方法。\u003c/p\u003e","title":"使用 Hugo + GitHub Pages 搭建个人博客","type":"posts"},{"content":" ","date":"2025 年 7 月 16 日","externalUrl":null,"permalink":"/","section":"首页","summary":"\u003ch2 id=\"typeit-6fb22d3943ec7794c447a8e7c1bb77a4\"\u003e\u003c/h2\u003e\n\n\u003cscript\u003e\n    document.addEventListener(\"DOMContentLoaded\", function () {\n      new TypeIt(\"#typeit-6fb22d3943ec7794c447a8e7c1bb77a4\", {\n        strings: [\"\",\"世界平和なんで嘘だ　皆一人ぼっちだ\",\"\"],\n        speed:  100 ,\n        lifeLike:  true ,\n        startDelay:  0 ,\n        breakLines:  true ,\n        waitUntilVisible:  true ,\n        loop:  false \n      }).go();\n    });\n\u003c/script\u003e","title":"首页","type":"page"},{"content":" Three passions, simple but overwhelmingly strong, have governed my life: the longing for love, the search for knowledge, and unbearable pity for the suffering of mankind.\n—— Bertrand Russell\n关于我 # 我是 Dr. Kee，一名医学生，目前在西安就读。\n课余喜欢折腾编程和各类新技术，闲时会写点 Python、Flutter、C# 相关的小项目。也希望有机会能参与一些开源项目，和同好一起交流学习。\n日常爱好：玩游戏、听音乐、跑步。沉迷明日方舟（蟑螂伸出触须） 听jpop和术曲多一些，喜欢Reol、RADWIMPS、神椿、黑柿子等等（完全列举不完啊）。偶尔随便看看文学和哲学相关内容。\n如果你对我的项目、技术或者爱好有兴趣，随时可以找我聊天讨论。\nE-Mail：derec30240@163.com QQ：1433288172 关于本站 # 本站最初于2025年7月15日使用 GitHub Pages 搭建。主要用于记录自己平时的一些技术笔记和踩坑经验，偶尔也会随手写点生活随笔和杂谈。\n如果文章有错误，或者您对其中的内容有疑问、建议或不同见解，欢迎与我联系。\n技术实现 # 网站托管在 GitHub Pages 上，日常更新流程如下：\n本地撰写、编辑内容 提交到 GitHub 的一个 Private 仓库 通过 GitHub Actions 自动打包生成静态网页 自动推送到 Public 仓库中 由 GitHub Pages 将生成的静态网页投放到公网 网站状态 # 本站已托管 GitHub Pages 运行：加载中\u0026mldr;\n里程碑 # 初次见面 2025-7-15 2025年7月15日，使用 Hugo + Blowfish 作为框架，依托 GitHub Pages 完成个人博客初步搭建。 ","date":"2025 年 7 月 15 日","externalUrl":null,"permalink":"/about/","section":"首页","summary":"\u003cblockquote\u003e\n\u003cp\u003eThree passions, simple but overwhelmingly strong, have governed my life: the longing for \u003cstrong\u003elove\u003c/strong\u003e, the search for \u003cstrong\u003eknowledge\u003c/strong\u003e, and unbearable \u003cstrong\u003epity\u003c/strong\u003e for the suffering of mankind.\u003c/p\u003e","title":"关于","type":"page"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]