Papa Labs

这个 blog 是怎么搭的:Astro + Markdown 架构笔记

这篇是本站自己的说明书:怎么搭的、文件放哪里、日常怎么写文章。以后换电脑或者忘了流程,看这篇就够。

为什么选 Astro

需求很简单:文章是 markdown、构建出来是纯静态、不要数据库不要后端。Astro 正好全中:

  • 每篇文章 = 一个 .md 文件,丢进 src/content/posts/ 自动出现在网站上;
  • 构建产物是纯 HTML,部署到 Cloudflare Pages 零成本;
  • 代码高亮(Shiki)、RSS、sitemap 都是内置或官方插件,不用自己造轮子。

Astro 官网首页

astro.build —— 「The web framework for content-driven websites」,说的就是 blog 这种场景

成品长这样(暗色模式):

Papa Labs 首页暗色模式截图

本站首页: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

日常写作流程

  1. src/content/posts/ 新建 my-post.md(文件名就是 URL);
  2. 写 frontmatter:
---
title: 文章标题
date: 2026-07-05
tags: [networking, fortigate]
description: 一句话摘要,用于列表页和 RSS。
draft: true    # 没写完就设 true,网站上不会出现
---
  1. npm run dev 本地预览(http://localhost:4321),保存自动刷新;
  2. 写完把 draft 去掉,npm run build 跑一次(顺便生成搜索索引)。

几个特性的位置

特性实现
全文搜索Pagefind,索引在 build 时生成
暗色模式localStorage + prefers-color-scheme,CSS 变量切换
Mindmap 嵌入```markmap 代码块,自定义 remark 插件 + markmap
RSS / Sitemap/rss.xml/sitemap-index.xml

原则:所有内容都是纯文本 markdown,git 管理。哪天想换主题、换框架甚至换平台,文章原样带走。

← 全部文章