Lei 的个人站和博客源码。站点发布在 https://jokeuncle.github.io,内容以 AI 工具、LLM/AI Infra 学习笔记、工程实践和项目记录为主。
这个仓库既是 Astro 前端项目,也是公开文章的发布面。根 README 的目标是说明如何运行、如何写文章、如何检查内容,以及如何发布。
- Astro 静态站点,构建输出目录为
dist-astro/。 - 首页个人介绍、项目展示、学习记录和联系信息。
- 博客系统基于 Astro Content Collections,支持分页、标签页和 RSS。
- Markdown 支持数学公式渲染,使用
remark-math、rehype-katex和 KaTeX。 - Markdown 支持 fenced Mermaid 图,文章页会在浏览器中渲染图表。
- 博客文章支持来源字段,用于标注文章来自哪个项目、草稿或提交。
- 通过 GoatCounter 展示文章阅读量。
- GitHub Actions 自动构建并部署到 GitHub Pages。
- Astro 7
- TypeScript
- pnpm
- KaTeX
- Mermaid
- GitHub Pages
CI 使用 Node.js 22 和 pnpm 11,配置见 .github/workflows/deploy.yml。
安装依赖:
pnpm install启动开发服务器:
pnpm dev默认访问地址:
http://localhost:4321
构建站点:
pnpm build本地预览构建结果:
pnpm preview公开文章放在 src/content/blog/,文件格式为 Markdown。草稿、源稿或发布前的整理稿可以放在 docs/blog/。
一篇文章的基本 frontmatter:
---
title: "文章标题"
description: "用于博客卡片、RSS 和 SEO 的简短描述。"
pubDate: 2026-07-16
author: Lei
tags: ["AI", "Engineering"]
draft: false
---当前内容 schema 由 src/content.config.ts 定义,常用字段包括:
title:文章标题,必填。description:文章摘要,必填。pubDate:发布日期,必填。updatedDate:更新日期,可选。author:作者,默认是Lei。tags:标签数组,默认是空数组。draft:是否草稿,true不会发布。sourceProject、sourceTitle、sourcePath、sourceRepoUrl、sourceCommit:来源信息,可选。canonicalUrl:外部原文地址,可选。rights、license:内容权利信息,可选。
数学公式可以直接写在 Markdown 中:
行内公式:$PPL = exp(CE)$
块级公式:
$$
softmax(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}
$$流程图、结构图和状态图优先使用 Mermaid:
```mermaid
flowchart LR
A[Source draft] --> B[Blog Markdown]
B --> C[Astro build]
C --> D[GitHub Pages]
```图片和附件使用站点根路径:
- 图片放在
public/images/,文章里使用/images/example.png。 - 文件放在
public/files/,文章里使用/files/example.pdf。 - 交互页面放在
public/interactive/,文章里使用/interactive/example.html。
不要在公开文章中写入本机绝对路径,例如 /Users/...、/home/...、Windows 盘符路径或 file://...。
提交或推送前至少运行:
pnpm validate:blog
pnpm buildpnpm validate:blog 会检查 src/content/blog/ 中是否泄漏本机路径。pnpm build 会执行 Astro 构建,验证内容 schema、路由和 Markdown 渲染是否通过。
博客路径检查脚本本身可以运行测试:
pnpm test:blog-validator推送到 main 分支后,GitHub Actions 会执行:
pnpm install --frozen-lockfile
pnpm build构建产物来自 dist-astro/,随后部署到 GitHub Pages。也可以在 GitHub Actions 页面手动触发 Deploy to GitHub Pages workflow。
.
├── src/
│ ├── components/ # Astro 组件
│ ├── content/blog/ # 公开博客文章
│ ├── layouts/ # 页面布局
│ ├── pages/ # Astro 路由
│ ├── scripts/ # 前端脚本
│ └── styles/ # 全局样式
├── docs/
│ └── blog/ # 博客源稿和整理稿
├── public/
│ ├── files/ # 可公开下载的附件
│ ├── images/ # 文章图片和站点图片
│ └── interactive/ # 可公开访问的交互页面
├── scripts/ # 校验、测试和生成脚本
├── .github/workflows/ # GitHub Pages 部署流程
├── astro.config.mjs # Astro 配置
├── src/content.config.ts # Content Collections schema
└── package.json # 脚本和依赖
dist-astro/、.astro/ 和 node_modules/ 是生成目录,不作为内容维护入口。
- 根 README 只说明仓库维护方式,不写成面向访客的营销页。
src/content/blog/里的文章必须是可以公开发布的版本。- 来源路径使用项目相对路径,不使用本机绝对路径。
- 复杂流程图优先使用 Mermaid,必要图片放入
public/images/。 - 发布前用
pnpm validate:blog做本机路径泄漏检查。
当前仓库尚未包含独立的 LICENSE 文件。复用代码或文章内容前,请先确认授权范围。