这个 blog 是怎么搭的:Astro + Markdown 架构笔记
这篇是本站自己的说明书:怎么搭的、文件放哪里、日常怎么写文章。以后换电脑或者忘了流程,看这篇就够。
为什么选 Astro
需求很简单:文章是 markdown、构建出来是纯静态、不要数据库不要后端。Astro 正好全中:
- 每篇文章 = 一个
.md文件,丢进src/content/posts/自动出现在网站上; - 构建产物是纯 HTML,部署到 Cloudflare Pages 零成本;
- 代码高亮(Shiki)、RSS、sitemap 都是内置或官方插件,不用自己造轮子。

astro.build —— 「The web framework for content-driven websites」,说的就是 blog 这种场景
成品长这样(暗色模式):

本站首页:hero + 精选卡片 + 文章列表,全部由 markdown 和几个 Astro 组件生成
目录结构
papalabs-blog/
├── src/
│ ├── content/posts/ ← 文章都在这里(markdown)
│ ├── layouts/Base.astro ← 全站骨架:header、footer、暗色模式
│ ├── pages/ ← 路由:首页、归档、标签、搜索、404
│ ├── styles/global.css ← 全部样式,CSS 变量控制双主题
│ └── lib/ ← 工具函数、remark 插件
├── public/ ← 静态资源:logo、搜索索引
└── astro.config.mjs
日常写作流程
- 在
src/content/posts/新建my-post.md(文件名就是 URL); - 写 frontmatter:
---
title: 文章标题
date: 2026-07-05
tags: [networking, fortigate]
description: 一句话摘要,用于列表页和 RSS。
draft: true # 没写完就设 true,网站上不会出现
---
npm run dev本地预览(http://localhost:4321),保存自动刷新;- 写完把
draft去掉,npm run build跑一次(顺便生成搜索索引)。
几个特性的位置
| 特性 | 实现 |
|---|---|
| 全文搜索 | Pagefind,索引在 build 时生成 |
| 暗色模式 | localStorage + prefers-color-scheme,CSS 变量切换 |
| Mindmap 嵌入 | ```markmap 代码块,自定义 remark 插件 + markmap |
| RSS / Sitemap | /rss.xml、/sitemap-index.xml |
原则:所有内容都是纯文本 markdown,git 管理。哪天想换主题、换框架甚至换平台,文章原样带走。