<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Pinero Blog</title><description>记录生活、技术与想法</description><link>https://lifepeace.cloud/</link><templateTheme>Firefly</templateTheme><templateThemeVersion>6.13.4</templateThemeVersion><templateThemeUrl>https://github.com/CuteLeaf/Firefly</templateThemeUrl><lastBuildDate>2026年6月30日 15:53:45</lastBuildDate><item><title>我是如何搭建自己的博客和网址的</title><link>https://lifepeace.cloud/posts/build-my-own-blog/</link><guid isPermaLink="true">https://lifepeace.cloud/posts/build-my-own-blog/</guid><description>记录从 GitHub 仓库、Astro 模板、Vercel 部署到自定义域名解析的完整过程。</description><pubDate>Tue, 30 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;这是我第一次真正搭建属于自己的个人博客。&lt;/p&gt;
&lt;p&gt;它不是一个复杂到难以维护的系统，也不是一个只停留在本地电脑里的练习项目。它有自己的代码仓库，有自动部署流程，也绑定了自己的域名。换句话说，从现在开始，只要我写下内容、提交代码、推送到 GitHub，网站就会自动更新。&lt;/p&gt;
&lt;p&gt;这篇文章记录一下整个搭建过程。它更像是一份复盘：我做了什么，为什么这样做，以及这个博客后面会如何继续维护。&lt;/p&gt;
&lt;section&gt;&lt;h2&gt;为什么选择静态博客&lt;a href=&quot;#为什么选择静态博客&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;个人博客有很多搭建方式，比如自己买服务器、安装数据库、部署 WordPress，或者使用现成的博客平台。&lt;/p&gt;&lt;p&gt;我最后选择了静态博客，核心原因有三个：&lt;/p&gt;&lt;ol&gt;
&lt;li&gt;结构简单。文章就是 Markdown 文件，图片和视频就是普通资源文件。&lt;/li&gt;
&lt;li&gt;部署稳定。网站构建后是一组静态文件，不依赖数据库，也不需要长期运行后端服务。&lt;/li&gt;
&lt;li&gt;维护成本低。只要 GitHub 和 Vercel 正常工作，网站就能持续访问。&lt;/li&gt;
&lt;/ol&gt;&lt;p&gt;对个人博客来说，静态站点已经足够。它不负责复杂业务，只需要把内容稳定、快速地展示出来。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;技术栈选择&lt;a href=&quot;#技术栈选择&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这个博客基于 &lt;a href=&quot;https://astro.build/&quot; target=&quot;_blank&quot;&gt;Astro&lt;/a&gt; 构建，并参考了 &lt;a href=&quot;https://github.com/CuteLeaf/Firefly&quot; target=&quot;_blank&quot;&gt;Firefly&lt;/a&gt; 这个模板。&lt;/p&gt;&lt;p&gt;Astro 的定位很适合内容型网站。它可以把 Markdown 文章转换成静态页面，也能在需要交互的地方使用前端组件。简单理解就是：普通文章尽量静态化，真正需要动态效果的部分再交给 JavaScript。&lt;/p&gt;&lt;p&gt;这带来的好处是：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;首页、文章页、归档页都可以在构建时生成。&lt;/li&gt;
&lt;li&gt;文章内容不需要数据库，直接写在 &lt;code&gt;src/content/posts&lt;/code&gt; 里。&lt;/li&gt;
&lt;li&gt;图片可以通过 Astro 自动优化，减少加载体积。&lt;/li&gt;
&lt;li&gt;最终产物可以直接部署到 Vercel。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;模板负责解决大部分博客常见功能，例如导航、文章列表、标签、分类、RSS、搜索、暗色模式和侧边栏。我的主要工作是把它改成自己的内容和自己的发布流程。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;代码仓库和内容结构&lt;a href=&quot;#代码仓库和内容结构&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;我在 GitHub 上创建了一个仓库，用来保存整个博客项目。&lt;/p&gt;&lt;p&gt;这个项目里最重要的内容目录是：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/content/posts&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;每一篇文章都是一个 Markdown 文件。例如这篇文章对应的文件就是：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;src/content/posts/build-my-own-blog.md&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;文章开头的 &lt;code&gt;---&lt;/code&gt; 区域叫 Frontmatter，用来描述文章的元信息：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;title&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;我是如何搭建自己的博客和网址的&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;published&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;2026-06-30&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;description&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;记录从 GitHub 仓库、Astro 模板、Vercel 部署到自定义域名解析的完整过程。&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;tags&lt;/span&gt;&lt;span&gt;: [&lt;/span&gt;&lt;span&gt;&quot;博客&quot;&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;category&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;&quot;建站&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;draft&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;false&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;pinned&lt;/span&gt;&lt;span&gt;: &lt;/span&gt;&lt;span&gt;true&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;---&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;这些字段会影响文章在网站里的展示方式。&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;title&lt;/code&gt; 是标题。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;published&lt;/code&gt; 是发布时间。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;description&lt;/code&gt; 是文章列表里的摘要。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;tags&lt;/code&gt; 是标签。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;category&lt;/code&gt; 是分类。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;draft&lt;/code&gt; 控制是否为草稿。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;pinned&lt;/code&gt; 控制是否置顶。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;这样做的好处是很清楚：正文负责表达内容，Frontmatter 负责告诉网站如何展示这篇内容。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;自动部署流程&lt;a href=&quot;#自动部署流程&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;博客不是手动把文件上传到服务器，而是通过 GitHub 和 Vercel 自动部署。&lt;/p&gt;&lt;p&gt;整体流程是：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;本地修改内容&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git commit 提交&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;4&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;5&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git push 推送到 GitHub&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;6&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;7&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;Vercel 检测到新提交&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;8&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;9&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;自动执行 pnpm build&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;10&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;    &lt;/span&gt;&lt;/span&gt;&lt;span&gt;↓&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;11&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;发布最新网站&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;也就是说，真正的发布动作是 &lt;code&gt;git push&lt;/code&gt;。&lt;/p&gt;&lt;p&gt;只要代码推送到 GitHub，Vercel 就会自动拉取最新代码，安装依赖，执行构建命令，然后把 &lt;code&gt;dist&lt;/code&gt; 目录里的静态文件发布出去。&lt;/p&gt;&lt;p&gt;这个流程的优势是可追溯。每一次修改都会留下 Git 提交记录。如果以后出现问题，也能知道是哪一次修改引入的。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;自定义域名是如何接上的&lt;a href=&quot;#自定义域名是如何接上的&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;博客部署到 Vercel 后，默认会有一个 Vercel 提供的访问地址。但我希望使用自己的域名：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;lifepeace.cloud&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;域名是在腾讯云购买的，DNS 解析需要配置到 Vercel。&lt;/p&gt;&lt;p&gt;常见做法是：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;@     A      76.76.21.21&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;www   CNAME  cname.vercel-dns.com&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;这里的含义是：&lt;/p&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;@&lt;/code&gt; 表示根域名，也就是 &lt;code&gt;lifepeace.cloud&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;www&lt;/code&gt; 表示 &lt;code&gt;www.lifepeace.cloud&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;A&lt;/code&gt; 记录把根域名指向 Vercel 的入口 IP。&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CNAME&lt;/code&gt; 记录把 &lt;code&gt;www&lt;/code&gt; 子域名指向 Vercel 的域名服务。&lt;/li&gt;
&lt;/ul&gt;&lt;p&gt;配置完成后，访问 &lt;code&gt;www.lifepeace.cloud&lt;/code&gt; 就会进入 Vercel 部署出来的网站。&lt;/p&gt;&lt;p&gt;DNS 解析不是瞬间全网生效的。有时候配置已经正确，但浏览器还显示旧页面，这通常是 DNS 缓存或 Vercel 部署缓存导致的。等待几分钟，或者强制刷新浏览器，一般就能看到新版本。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;图片和视频如何管理&lt;a href=&quot;#图片和视频如何管理&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;博客里的文章图片和视频，我会放在：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;public/uploads&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;例如某篇文章的资源可以这样组织：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;public/uploads/build-my-own-blog/cover.jpg&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;public/uploads/build-my-own-blog/demo.mp4&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;在 Markdown 里引用图片：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;![&lt;/span&gt;&lt;span&gt;博客截图&lt;/span&gt;&lt;span&gt;]&lt;/span&gt;&lt;span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;/uploads/build-my-own-blog/cover.jpg&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;引用视频：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;span&gt;video&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;controls&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;src&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&quot;/uploads/build-my-own-blog/demo.mp4&quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span&gt;video&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;这种方式的好处是路径直观，也方便删除。以后如果删除某篇文章，并且它的图片和视频只被这篇文章使用，就可以把对应的资源文件夹一起删除。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;删除内容时要注意什么&lt;a href=&quot;#删除内容时要注意什么&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;删除文章不只是删除网页上的卡片，而是删除源文件。&lt;/p&gt;&lt;p&gt;例如删除一篇文章：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;git rm src&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;posts&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;example.md&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;如果它有独立素材目录：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;git rm &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;r public&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;uploads&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;example&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;然后提交并推送：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;git commit &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;m &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Remove example post&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git push&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;之前我也遇到过一个问题：文章文件已经删除，但线上仍然显示旧文章。原因是构建缓存保留了旧的内容数据。&lt;/p&gt;&lt;p&gt;为了解决这个问题，我给构建流程加了缓存清理步骤。现在每次 &lt;code&gt;pnpm build&lt;/code&gt; 都会先清理 Astro 的构建缓存，避免已经删除的文章继续出现在网站里。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;这个博客后续怎么维护&lt;a href=&quot;#这个博客后续怎么维护&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;后续维护其实很简单。&lt;/p&gt;&lt;p&gt;写文章时：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;git add src&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;content&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;posts public&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;uploads&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;git commit &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;m &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Add new post&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git push&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;修改配置时：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;git add src&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;&lt;span&gt;config&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;git commit &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;m &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Update site config&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git push&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;删除内容时：&lt;/p&gt;&lt;div&gt;&lt;figure&gt;&lt;figcaption&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;Terminal window&lt;/span&gt;&lt;/figcaption&gt;&lt;pre&gt;&lt;code&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git rm 对应文件&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;2&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;&lt;span&gt;git commit &lt;/span&gt;&lt;span&gt;-&lt;/span&gt;&lt;span&gt;m &lt;/span&gt;&lt;/span&gt;&lt;span&gt;&quot;Remove old content&quot;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;3&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span&gt;git push&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/code&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/figure&gt;&lt;/div&gt;&lt;p&gt;这个流程不算复杂，但它让我第一次拥有了一个比较完整的个人内容系统。&lt;/p&gt;&lt;p&gt;写作本身是内容，Git 是版本记录，Vercel 是发布管道，域名是入口。它们组合在一起，就变成了一个可以长期维护的个人博客。&lt;/p&gt;&lt;/section&gt;
&lt;section&gt;&lt;h2&gt;结语&lt;a href=&quot;#结语&quot;&gt;&lt;span&gt;#&lt;/span&gt;&lt;/a&gt;&lt;/h2&gt;&lt;p&gt;这篇文章是博客真正意义上的第一篇记录。&lt;/p&gt;&lt;p&gt;它既是一次搭建过程的总结，也是一个开始。之后这里会继续记录我对 AI、软件开发、技术实践和个人成长的理解。内容不一定都成熟，但会尽量真实、清楚，并且能被复盘。&lt;/p&gt;&lt;p&gt;如果未来某一天我回头看这个博客，希望能看到的不只是页面变得更完整，也能看到自己一步一步学习和整理的痕迹。&lt;/p&gt;&lt;/section&gt;</content:encoded></item></channel></rss>