写在之前
在此之前,我尝试过在 GitHub pages 上部署一个基于 Quartz 的 静态知识库,但由于 Quartz 的功能过于简单,无法满足我对博客的需求(臆想)。
再后来,我也尝试过使用 Hexo 和 Hugo 等静态博客生成器,但由于它们的配置较为复杂,且需要一定的前端知识,加上我的懒癌(大概这才是最主要的),导致最后没有好好操作下去。
最近好像还真是发生了很多事情啊…现在大概需要督促自己做点什么,不然整个人要烂了。
在对比好几个朋友的选择之后,我最终选择了 Astro-theme-Mizuki 作为我的博客框架,这是一个基于 Astro 的博客主题,具有简洁的设计和丰富的功能,而且上手非常容易,适合个人博客的搭建。
那么,接下来我将分享一下我捣鼓博客的过程,希望能给有需要的朋友提供帮助。
本教程力求在 官方文档 的基础上,结合我自己的经验,提供一个更为通俗、详细的指南,帮助大家顺利搭建自己的博客,毕竟先把东西跑起来,才有动力去研究官方文档以完善它。
当然,本教程不可能完全替代(完全不可能替代)官方文档。因此,建议搭配食用。
1. 环境讲解与配置
- 什么是
Astro?
它是一个现代化的静态网站生成器,支持多种前端框架(如 React、Vue、Svelte 等),并且具有出色的性能和灵活性。要搭建基于 Astro 的博客,您需要先安装 Node.js 和 npm 。
- 什么是
Node.js?
它是一个基于 Chrome V8 引擎的 JavaScript 运行环境,允许您在服务器端运行 JavaScript 代码。
- 什么是
npm?
npm 是 node package manager 的缩写,是 Node.js 的包管理器,用于安装和管理项目所需的依赖包。
也就是说,我们通过 Node.js 来支持 Astro 生成器的运行,而 npm 则帮助我们安装和管理博客所需的各种依赖包。
- 什么是
pnpm?
pnpm 是 performance npm 的缩写,是一个快速、节省磁盘空间的包管理器。
与 npm 不同,pnpm 使用符号链接来共享依赖包,从而减少了磁盘空间的占用,并且在安装速度上也有显著提升。
此外,本博客的搭建还需要使用到 Git 和 GitHub。
- 什么是
Git?
Git 是一个分布式版本控制系统,用于跟踪文件的更改历史,协助多人协作开发项目。
- 什么是
GitHub?
GitHub 是一个基于 Git 的代码托管平台,提供了版本控制和协作功能,允许开发者在云端存储和管理他们的代码库。
也就是说,我们需要使用 Git 来管理博客的源代码,并将其托管在 GitHub 上,以便于后续的部署和管理。
知道了这些基础知识后,我们可以发现 搭建博客的第一步就是在电脑中安装这些基础工具:
1. 安装 Node.js 和 npm
-
访问 Node.js 官网 下载并安装最新的 LTS 版本,这将同时安装
Node.js和npm。 -
安装完成后,可以通过命令行输入以下命令来验证安装是否成功:
node -vnpm -v
如果显示版本号,说明安装成功。
2. 安装 pnpm
-
您可以通过
npm来安装pnpm,打开命令行输入以下命令:npm install -g pnpm -
安装完成后,可以通过以下命令来验证
pnpm是否安装成功:pnpm -v如果显示版本号,说明安装成功。
3. 安装 Git
-
访问 Git 官网 下载并安装
Git。 -
安装完成后,可以通过命令行输入以下命令来验证安装是否成功:
git --version如果显示版本号,说明安装成功。
2. 项目搭建
1. 克隆博客模板
-
导航到您想要存放博客项目的目录,例如:我直接把整个项目放在桌面上,那么于我而言,就是进入桌面目录:
cd D:/Desktop -
使用 Git 克隆
Astro-theme-Mizuki的模板仓库:git clone https://github.com/matsuzaka-yuki/mizuki.git -
进入克隆的项目目录,下文的所有指令都需要在该目录中进行:
cd Mizuki
2. 安装依赖
- 使用
pnpm安装项目所需的依赖包:pnpm install
3. 配置博客
根据自己的需求配置您的博客,详细的配置教程将在下文介绍。
4. 本地预览
- 使用以下命令启动本地开发服务器:
pnpm dev
- 打开浏览器,访问
http://localhost:4321,您应该能够看到博客的默认界面。
5. 打包网站
- 运行以下命令将网站打包成静态文件,生成到 dist 目录中:
pnpm build
生成的 dist 目录后续将可以部署到您自己的服务器上。
3. 项目部署
在正式开始之前,我们有必要了解一下 一个本地项目是如何在网络上被看见的:
当我们在本地开发一个网站时,它只能在我们的计算机上访问,其他人无法看到它。
为了突破这个限制,我们需要将它部署到服务器上,这样它就可以通过互联网被访问了。
以下是一个简单的部署流程图:
- 本地开发:我们在本地计算机上开发和测试我们的网站。
- 打包成静态文件:我们使用构建工具将我们的项目打包成静态文件,这些文件可以被服务器直接提供给用户。
- 上传到服务器:我们将打包好的静态文件上传到服务器上,这可以通过 FTP、SSH 或者使用云服务提供的工具来完成。
- 服务器配置:我们需要在服务器上进行一些配置,例如设置域名、SSL 证书等,以确保我们的网站能够正常访问。
- 网站上线:完成以上步骤后,我们的网站就可以通过互联网访问了。
显然,上传、配置服务器对我来说太过困难。但我们有两位赛博义父: Github 和 Cloudflare 。
在本教程中,我们将使用 GitHub 来托管我们的博客源代码,并通过 Cloudflare Pages 来部署我们的博客,这是一个免费的静态网站托管平台,具有全球 CDN、自动部署和免费 SSL 证书等特性。
每当我们将代码推送到 GitHub 仓库时,Cloudflare Pages 会自动构建并部署最新版本的网站,这样我们就可以轻松地管理和更新我们的博客了。
- 本地开发:我们在本地计算机上开发和测试我们的博客。
- 推送代码到
GitHub:我们将我们的代码推送到GitHub仓库中。 Cloudflare Pages自动构建:Cloudflare Pages会自动检测到GitHub仓库的更新,并开始构建我们的博客。- 部署到全球 CDN:构建完成后,
Cloudflare Pages会将我们的博客部署到全球的内容分发网络(CDN)上,以确保用户能够快速访问。 - 用户访问博客:用户通过互联网访问我们的博客,
Cloudflare Pages会从最近的 CDN 节点提供博客内容,确保访问速度和稳定性。
可以看出,这两尊大佛为我们减轻很多部署时候的障碍,让我们再次感谢它们。
1. 创建 GitHub 仓库
-
登录到 GitHub 并创建一个新的仓库。
-
将本地项目与
GitHub仓库关联:git remote add origin https://github.com/your-username/your-repo.git -
将代码推送到
GitHub:git add .git commit -m "提交信息"git push -u origin main
有关
GitHub的使用,请参阅:(我也不知道参阅哪里 先搁置吧
2. 配置 Cloudflare Pages
1. 登录 Cloudflare Pages
访问 Cloudflare Dashboard,使用您的账号登录,然后选择 “Pages” 服务。 当然 您可以在左下角找到更改语言的选项,切换到中文界面或许会更方便一些。
2. 创建新项目
点击 “Create a project” 或 “Connect to Git” 按钮
选择您的 Git 提供商(GitHub、GitLab 等)并授权
从列表中选择您的 Mizuki 项目仓库
3. 配置构建设置
在项目设置页面中,配置以下构建设置:
基本设置
Project name: 输入您的项目名称(如 alisa22580-blog)
Production branch: 设置主分支(通常为 main 或 master)
构建配置
# 构建设置Build command: pnpm i && pnpm buildBuild output directory: distRoot directory: /参考如下:

4. 部署项目
配置完成后,点击 “Save and Deploy” 开始首次部署:
Cloudflare Pages会克隆您的仓库- 安装依赖(pnpm i)
- 构建项目(pnpm build)
- 将 dist 目录部署到全球 CDN
首次部署可能需要几分钟时间。
5. 获取部署信息
部署完成后,您将获得:
站点 URL:如 https://alisa22580.pages.dev
URL: URL 是 Uniform Resource Locator 的缩写,中文通常翻译为统一资源定位符。它是互联网上资源的地址,用于指定和访问各种类型的资源,如网页、图片、视频等。URL 通常由以下几个部分组成:
- 协议(Protocol):指定访问资源所使用的协议,如 http、https、ftp 等。
- 域名(Domain):指定资源所在的服务器地址,如 www.example.com。
- 路径(Path):指定资源在服务器上的具体位置,如 /blog/post1。
- 查询参数(Query Parameters):用于传递额外的信息,如 ?id=123。 例如 当前这篇文章的 URL 就是 https://alisa22580.pages.dev/posts/post1/#本博客的搭建教程
自动生成的 SSL 证书
SSL: SSL 是 Secure Sockets Layer 的缩写,是一种安全协议,用于在互联网上加密数据传输,确保数据的机密性和完整性。SSL 证书是由受信任的证书颁发机构(CA)签发的数字证书,用于验证网站的身份并启用 HTTPS 协议。当用户访问启用了 SSL 的网站时,浏览器会显示一个锁形图标,表示连接是安全的。
全球 CDN 分发
CDN: CDN 是 Content Delivery Network 的缩写,中文通常翻译为内容分发网络。CDN 是一种分布式的服务器网络,旨在通过将内容缓存到全球各地的服务器上来加速网站的加载速度。当用户访问一个启用了 CDN 的网站时,CDN 会根据用户的地理位置选择最近的服务器来提供内容,从而减少延迟和提高性能。CDN 还可以提供额外的安全功能,如 DDoS 防护和 Web 应用防火墙。
现在,您可以通过站点 URL 访问您的博客了!每当您推送新的代码到 GitHub,Cloudflare Pages 都会自动重新构建和部署您的博客,确保您的内容始终是最新的。
也就是说,我们以后的操作流程将是:
就结束了, GitHub 和 Cloudflare 会帮我们完成剩下的工作。
4. 博客配置
完成了GitHub 和 Cloudflare 的部署后,所有需要动脑的工作告一段落,接下来我们就可以专注于博客的内容和配置了。
博客的配置主要涉及到 src/config.ts 文件,这个文件包含了博客的全局设置,如站点标题、描述、作者信息、社交链接等。您可以根据自己的需求修改这些配置项来个性化您的博客。
有关博客各项配置已经在 官方文档 中有详细的介绍。
因此关于大多数常规设置,我就不在这里赘述了,这里只发表一些我自己的建议…
配置文件的查找与修改
- 如果您使用vscode编辑项目,可以在左侧任务栏找到搜索框,输入关键词进行整个工作区目录下的相关查找。

- 也可以通过快捷键
ctrl + f进行当前文件下的关键词查找。

更好的时间输入
博客中很多地方需要输入时间,例如文章的发布时间、日记的日期等。
通过官方文档的介绍,我们可以知道,博客中使用的时间格式是 ISO 8601 格式,例如:2026-03-12T16:20:00Z。
这种格式虽然标准,但由于这个博客并没有自动化的时间输入工具(比如说日历选择器),因此我们的手动输入、修改显得繁琐且没必要。
因此,我尝试了 vscode 的 Insert Date String 扩展。

但是这个扩展的默认输出格式是 YYYY-MM-DD HH:mm:ss,并不符合我们博客的时间格式要求。
于是,我在 vscode 的设置中,手动将输出格式修改为 YYYY-MM-DDTHH:mm:ssZ。
然而,这个插件自动识别了时区,并在输出的时间字符串中加入了时区偏移,例如 2026-03-12T16:20:00+08。
这显然是我们不愿看到的,因为 通过配置 config.ts 中的 timeZone,我们已经自行选择了时区,因此我们需要将这个时区偏移手动修改为 Z,表示 UTC 时间。但是每次输入时间后都要修改一次时区,显然也是不合理的。
于是,我参考了自己先前打 acm 时候使用的, vscode 原生提供的 配置代码片段 功能,在惊喜的发现这个功能支持时间相关的预定义变量后,事情就变得简单了。
-
使用组合键
ctrl + shift + p打开命令面板,输入Snippets: Configure Snippets(配置代码片段) 并选择它。 -
选择
New Global Snippets file(新建代码片段) 来创建一个全局的代码片段文件,命名为全局.code-snippets。 -
在打开的
全局.code-snippets文件中,添加以下代码片段:
"Insert ISO Z Date": { "scope": "typescript,markdown,mdx", // 只针对 TypeScript 和 Markdown 文件生效 "prefix": "isodate", "body": [ "${CURRENT_YEAR}-${CURRENT_MONTH}-${CURRENT_DATE}T${CURRENT_HOUR}:${CURRENT_MINUTE}:${CURRENT_SECOND}Z" ], "description": "插入当前 UTC 时间 (Z)"}此时,完整的文件内容大致如下:

保存文件后,您就可以在任何地方输入 isodate,然后按下 Tab 键,就会自动插入当前的 UTC 时间,格式为 YYYY-MM-DDTHH:mm:ssZ… 吗?
问题到此并没有结束,我发现在 markdown 文件中无法触发补全,而在 ts 文件中可以。
经过一番折腾,我发现这是因为 markdown 文件默认没有启用代码片段补全功能。
于是,我打开了 vscode 的设置,在右上角找到 Edit in settings.json (在 settings.json 中编辑) 的选项,点击它打开 settings.json 文件。

在文件中,我添加了关于 markdown 文件的代码片段补全配置:
"[markdown]": { "editor.quickSuggestions": { "other": "on", "comments": "on", "strings": "on" }, "editor.snippetSuggestions": "top", // 让代码片段排在最前面 "editor.tabCompletion": "on" // 允许按 Tab 键直接补全}问题终于解决了,现在在 markdown 文件中输入 isodate 并按下 Tab 键,正确格式的 UTC 时间就会被插入了…吗??
仍然没有!在文章的表头中输入 isodate 并按下 Tab 键,竟然没有任何反应。
经过一番调查,我发现这是因为 markdown 文件的表头部分(也就是 --- 包围的部分)被 vscode 识别为 yaml 语言,而不是 markdown。…真是令人窒息。!
因此,我们回到 全局.code-snippets 文件中,将代码片段的 scope 属性增加一个 yaml,使其变为:
"scope": "typescript,markdown,mdx,yaml", // 现在也针对 yaml 文件生效更新后的完整文件内容应如下:
请注意 29 行的更改

终于,我做到了,我可以随心所欲地在表头插入当前的 UTC 时间,而且格式完全符合博客的要求。我真想狠狠地吃掉一包放在旁边的香辣小鱼干来庆祝下!

评论功能的配置
博客的评论功能是通过 Twikoo 实现的,您可以在 src/config.ts 文件中找到相关配置项:
export const commentConfig: CommentConfig = { enable: true, // 启用评论功能。当设置为 false 时,评论组件将不会显示在文章区域。 twikoo: { envId: "...", // Twikoo 环境 ID,通常是一个 URL 地址。 lang: SITE_LANG, // 评论界面语言设置,默认为站点语言。 },};- enable: 设置为 true 启用评论功能,设置为 false 则禁用评论功能。
- envId: 这是
Twikoo的环境 ID,通常是一个 URL 地址,您需要将其替换为您自己的Twikoo环境 ID。 - lang: 这是评论界面的语言设置,默认为站点语言,不动就行。
由是观之,我们操作的目的就是得到一个 以 .app 结尾的 URL 地址,并将其填入 envId 中。
我们可以直接访问 Vercel 部署 的教程来获取这个 ID 。
更多内容
持续更新中…
部分信息可能已经过时











