Astro博客

coisini-blog-framework — Astro 博客模板

作者 coisini233333333

基于 Astro 的静态博客框架,把可复用的组件、样式与构建脚本放在公开仓库,个人文章与配置放在仓库外的私有内容包,构建时读取并只发布静态网页。

看看你的网站会是什么样

浏览真实页面截图,比较内容排版与手机效果。点击下方缩略图切换,放大查看整页细节。

3 个预览视图
桌面端首页1 / 3
桌面端截图首屏预览

由服务器浏览器实际访问页面后截取。

全部页面与视图 3

截图用于了解视觉与布局,交互效果请以实际项目为准。

采集于 2026-10-13查看来源

值得关注的模板亮点

从已有项目资料中,快速了解它的特点。

01

框架与内容分离:公开仓库只放组件、样式与构建脚本,个人配置、文章和图片放在仓库外的私有内容包

02

构建时读取内容包,发布时只上传静态网页,不需要数据库、后台服务或浏览器 API 密钥

03

支持技术笔记与随笔两类内容,以及文章目录、搜索筛选、归档、RSS 与 sitemap

04

提供深浅主题切换,配色、字体、圆角与间距集中在 global.css 中调整

05

发布脚本只复制 dist/ 到临时发布仓库,不推送私有内容仓库,不改 main,也不强推历史

06

内置构建、内链、隐私与格式校验脚本,隐私校验会拒绝发布 Markdown、TypeScript、JSON 配置、隐藏文件和 source map

模板详细介绍

这是一个面向个人写作的 Astro 静态博客框架,仓库本身只包含组件、样式、构建脚本和虚构示例,站点配置、项目资料、Markdown 文章与图片放在独立的内容包目录中,构建时由框架读取,发布时只上传生成的静态网页。内容包位于框架仓库之外,需要自行备份到私有仓库或其他私有存储。

框架提供首页、栏目、文章、项目等路由,支持技术笔记与随笔两种分类、文章目录、搜索筛选、归档、RSS 与 sitemap,以及深浅主题切换。文章使用 Markdown 与 frontmatter 描述标题、日期、标签、分类、草稿状态和封面,项目使用 JSON 描述。样式集中在 global.css,配色、字体、间距和响应式布局可在此调整。

发布流程面向 GitHub Pages,采用 main 与 gh-pages 分支分离框架与网站:main 的 CI 只验证示例,不会自动覆盖个人站点;发布在本机执行,读取本机私有内容包。已发表文章在网站上仍然公开,生成的 HTML 可被读取、复制和搜索引擎索引,私有内容包保护的是 Markdown 原文、草稿与编辑历史,不是文章访问控制。任何放进内容包 public/ 的文件都会发布。

Astro博客

适合你的项目吗?

适用场景

  • 个人技术博客:用 Markdown 写技术笔记,通过分类与标签组织内容,并生成 RSS 与 sitemap
  • 随笔写作:随笔有独立入口,与首页的技术笔记分开呈现
  • 项目展示:用 projects.json 维护项目列表与详情,可关联已发表的文章
  • 希望把写作原文与草稿保留在私有存储、只公开生成网页的静态站点
  • 部署到 GitHub Pages,并通过自定义域名对外访问

适合人群

  • 接受用 Markdown 与 JSON 维护内容的写作者
  • 希望框架代码公开、个人文章与草稿不进入公开仓库的开发者
  • 需要静态发布、不依赖数据库或后端接口的博客
  • 愿意自行备份内容包并自行处理 GitHub Pages 与域名配置的用户

上手与定制指南

结合仓库当前版本的说明,按下面的资料检查内容、配置与运行要求。

  1. 1

    需要 Node.js 24 与 npm;克隆仓库后执行 npm ci 和 npm run dev,默认只读取 examples/site/ 中的公开示例

  2. 2

    用 npm run content:init -- ../my-private-content 初始化内容包,该命令拒绝覆盖已有目录,并要求目标在框架仓库外

  3. 3

    把 .env.example 复制为 .env,写入 SITE_CONTENT_DIR、SITE_URL、BASE_PATH 和 PAGES_REPOSITORY;修改 JSON 配置或内容包路径后需重启开发服务器

  4. 4

    发布前执行 npm run deploy,首次推送生成 gh-pages 分支后,在 GitHub 仓库 Settings → Pages 选择 gh-pages / (root)

  5. 5

    内容包需要自行备份到私有仓库或其他私有存储;Git ignore 不能替代备份,也不能清除已提交的文件及其历史

查看仓库使用说明

授权与来源资料

使用条件与限制

免费使用 · 保留许可声明

本次收录的是公开仓库中采用 MIT 许可的免费版本;免费范围为该版本代码,不代表外部服务或第三方素材免费。

使用时需要遵守

  • 允许免费使用、修改、商用和分发该版本代码。
  • 分发代码副本或实质性部分时,保留原作者版权声明和完整 MIT 许可声明。
  • 代码按现状提供;担保与责任限制以原许可证及适用法律为准。

额外费用与待核对事项

  • 演示图片、字体、图标及其他第三方素材需按各自许可核对,不能仅凭代码的 MIT 许可判断。
  • 域名、托管、数据库、支付或 AI 等外部服务可能另外收费。
  • 内容包必须自行备份到私有仓库或其他私有存储;Git ignore 不能替代备份,也无法清除已提交文件及其历史。
  • 已发表文章仍公开且可被索引;私有内容包只保护 Markdown 原文、草稿与编辑历史,不是访问控制;放入内容包 public/ 的文件都会发布。
  • deploy 推送成功不等于 Pages 部署完成,需检查 GitHub Actions/Pages 状态;首次仓库设置由 GitHub 管理,脚本不会购买套餐或修改 DNS。
  • 从含个人内容的旧仓库迁移时,仅当前提交删除文章不够;应新建无旧历史的框架仓库并保持旧仓库私有,不要公开含文章历史的旧仓库。
  • 隐私校验会拒绝发布 Markdown、TypeScript、JSON 配置、隐藏文件和 source map,并检查常见私钥/令牌格式,但不能保证识别所有敏感信息。
  • 未来若需带密钥的接口,必须使用独立服务端代理;敏感值不得放入 PUBLIC_*、页面脚本、Markdown 或 public/。
  • 内容被视为可信作者输入并支持 Markdown/HTML;不要把不可信第三方内容直接放入构建。
  • 使用分支发布时需在内容包 public/CNAME 写入域名一行以避免发布覆盖域名设置,并同步更新 SITE_URL 与 BASE_PATH=/ 后重新发布。
查看原文依据

Permission is hereby granted, free of charge

许可证原文

**内容包需要自行备份到私有仓库或其他私有存储**,Git ignore 不能替代备份,也不能清除已经提交过的文件及其历史。

README 原文

已发表文章在网站上仍然公开,生成的 HTML 也可读取、复制和被搜索引擎索引。私有内容包保护 Markdown 原文、草稿与编辑历史,不是文章访问控制。任何放进内容包 `public/` 的文件都会发布。

README 原文

`npm run deploy` 推送成功不等于 Pages 已完成部署,请检查 GitHub Actions/Pages 的状态。首次仓库设置由 GitHub 管理,脚本不会自行购买套餐或修改 DNS。

README 原文

从包含个人内容的旧仓库迁移时,**仅在当前提交删除文章还不够**。请像本项目一样新建无旧历史的框架仓库,旧仓库保持私有;不要直接公开含文章历史的旧仓库。

README 原文

隐私校验拒绝发布 Markdown、TypeScript、JSON 配置、隐藏文件和 source map,并检查常见私钥/令牌格式。它是额外检查,**不能保证识别所有形式的敏感信息**。

README 原文

未来需要带密钥的接口时,使用独立服务端代理,敏感值不得放入 `PUBLIC_*`、页面脚本、Markdown 或 `public/`。

README 原文

内容是可信作者输入,支持 Markdown/HTML;不要把不可信第三方内容直接放入构建。

README 原文

使用分支发布时,在内容包 `public/CNAME` 中放入你的域名一行,避免后续发布覆盖域名设置;同时更新 `SITE_URL` 与 `BASE_PATH=/` 并重新发布。

README 原文
https://github.com/coisini233333333/coisini-blog-framework/blob/main/LICENSEhttps://github.com/coisini233333333/coisini-blog-framework/blob/main/README.md

DeepSeek 根据仓库许可证和 README 整理 ·2026-10-13。结果仅覆盖已读取资料,依赖、图片、字体及后续条款变更以各自原文为准。

项目核对记录与介绍依据

模板资料

来源平台
GitHub
资料与维护参考分
资料较完整 · 80 / 100
技术栈
Astro
网站类型
博客
这个分数如何计算

本站按许可资料(最高30分)、演示链接(12分)、预览图(10分)、Star数(15分)、记录的维护时间(15分)、描述完整度(8分)、功能记录(5分)和分类资料(5分)计算。它不是代码、安全或性能测试,也不是 Google 评分;有链接不代表已实测可用。

这个项目需要核对什么

记录的仓库更新时间
2026-09-23
截图检查日期
2026-10-13

已收录演示链接。请用你的内容与屏幕尺寸检查;有演示不代表表单、认证或支付已经可用。

目录记录的主要技术栈是 Astro。请通过依赖清单和锁文件核对实际版本与托管要求。这些说明基于收录资料,不代表代码审计或部署实测。

查看具体选型方法 →

介绍的制作与核对状态

介绍由 AI 辅助整理目录与仓库资料。仓库作者不等于这篇介绍的审核者。

审核声明: [email protected] · 2026-10-13

查看当时使用的来源资料

SHA-256: a3e510d48c11519901e08717fbae438cc191d400c3b3b59365f46f5893454d96

2026-10-13T00:58:10.174Z

来源文件 / 仓库
# 一隅 · Coisini Blog Framework

一个可复用的 Astro 静态博客框架:浅米白与灰绿配色、深浅主题切换、随笔、技术笔记、项目展示、文章目录、搜索筛选、归档、RSS 与 sitemap。使用 **Astro 7 + TypeScript + 原生 CSS + Markdown**,不需要数据库、后台服务或浏览器 API 密钥。

[实际站点:Coisini 博客](https://coisini2333.com/) · [框架构建状态](https://github.com/coisini233333333/coisini-blog-framework/actions/workflows/ci.yml)

**公开框架,私有写作。** 框架仓库只包含组件、样式、构建脚本和虚构示例。你自己的站点配置、项目资料、文章和图片放在独立内容包,构建时读取,发布时只上传静态网页。

> 已发表文章在网站上仍然公开,生成的 HTML 也可读取、复制和被搜索引擎索引。私有内容包保护 Markdown 原文、草稿与编辑历史,不是文章访问控制。任何放进内容包 `public/` 的文件都会发布。

## 快速体验

需要 Node.js 24、npm。点击 GitHub 的 **Use this template** 创建自己的框架仓库,或克隆此仓库:

```bash
git clone https://github.com/coisini233333333/coisini-blog-framework.git
cd coisini-blog-framework
npm ci
npm run dev
```

打开 `http://localhost:4321/`。默认只读取 `examples/site/` 中的公开示例。

## 创建自己的博客

```bash
npm run content:init -- ../my-private-content
```

初始化拒绝覆盖已有目录,并要求目标在框架仓库外。把 `.env.example` 复制为 `.env`,写入:

```dotenv
SITE_CONTENT_DIR=../my-private-content
SITE_URL=https://YOUR_NAME.github.io/YOUR_REPOSITORY
BASE_PATH=/YOUR_REPOSITORY
PAGES_REPOSITORY=YOUR_NAME/YOUR_REPOSITORY
```

本地体验时可先省略后三项。使用自定义域名时设 `SITE_URL=https://your-domain.com`、`BASE_PATH=/`。路径以框架根目录为基准,支持绝对路径;进程环境变量优先于 `.env`。修改 JSON 配置或内容包路径后重启开发服务器。

`.env` 已忽略;框架的格式化和 Git 提交不会包含外部内容目录。**内容包需要自行备份到私有仓库或其他私有存储**,Git ignore 不能替代备份,也不能清除已经提交过的文件及其历史。

## 目录与职责

```text
coisini-blog-framework/        公开、可以复用
├── content/source.mjs        选择内容包与部署地址(仅构建端)
├── src/config/site.ts        站点 JSON 的类型与校验
├── src/content.config.ts     Markdown 集合与 frontmatter 校验
├── src/data/projects/        项目 JSON 校验
├── src/pages/                首页、栏目、文章、项目等路由
├── src/components/           导航、卡片、搜索与 SVG 插图
├── src/layouts/              共享页面外壳
├── src/styles/global.css     配色、字体、间距、响应式布局
├── examples/site/            可运行的公开示例内容包
├── scripts/                  初始化、校验和发布
└── .github/workflows/ci.yml  只验证示例,不读取私有内容

my-private-content/           私有、在框架仓库之外
├── site.json                 作者、标题、首页图片和关于介绍
├── projects.json             项目列表与详情
├── blog/                     Markdown 文章与草稿
└── public/                   会公开的图片、图标等静态资源
```

每次构建只选一个完整内容包,不会把个人文章与示例混合。框架升级通常只需更新框架代码;内容结构如有不兼容变化,JSON/Markdown 校验会明确报错。

## 日常修改

| 需求                       | 修改位置                                             |
| -------------------------- | ---------------------------------------------------- |
| 站名、介绍、头像、首页图片 | 内容包 `site.json`                                   |
| 替换图片                   | 内容包 `public/images/`,配置使用 `/images/name.jpg` |
| 写随笔、技术文章           | 内容包 `blog/*.md`                                   |
| 新增项目、状态、相关资料   | 内容包 `projects.json`                               |
| 配色、字体、圆角、间距     | 框架 `src/styles/global.css`                         |
| 调整布局、交互             | 框架 `src/pages/`、`src/components/`                 |

图片路径不带 `public`。头像设为空字符串时不显示右上角头像,关于页使用姓名首字。默认字体来自本机,不请求第三方字体。详见 [美术定制](docs/visual-assets.md)。

### 文章格式

```md
---
title: 我的笔记
description: 简短介绍。
pubDate: 2026-09-12
tags: [研究, 实践]
category: technical
draft: false
art: particles
# updatedDate: 2026-09-13
# cover: /images/my-cover.jpg
# coverAlt: 图片说明
---

## 正文标题

正文从这里开始。
```

- `category`:`technical`(默认)或 `essay`;首页放技术笔记,随笔有独立入口。
- `draft: true`:不生成文章页面,也不进入列表、搜索、归档、RSS、sitemap。草稿仍只应保存在私有内容包。
- `art`:默认 `landscape`,另有 `particles` 和 `interface` 两种 SVG 封面;设置 `cover` 时优先使用图片。
- `sample: true`:标记公开示例,不影响发布;真实文章通常不需要这个字段。
- 文件名作为文章地址,建议英文小写与连字符。项目的可选 `noteSlug` 对应该文件名;未找到已发表文章时不显示关联链接。

内容是可信作者输入,支持 Markdown/HTML;不要把不可信第三方内容直接放入构建。文章内链使用相对地址。单层文章互链可写 `../another-post/`,图片可写 `../../images/picture.jpg`。复杂路径请以 `npm run test:build` 的检查结果为准。

### 项目格式

复制示例 `projects.json` 中的一项。必填字段为 `slug`、`title`、`subtitle`、`description`、`tags`、`status`、`overview`、`focus` 和 `references`。允许空数组;`noteSlug` 可省略。项目 `slug` 必须唯一,只允许小写英文、数字及中间连字符。

## 发布到 GitHub Pages

采用两个分支分离框架与网站:

| 位置                | 内容                            |
| ------------------- | ------------------------------- |
| 公开仓库 `main`     | 框架源码、文档和公开示例        |
| 公开仓库 `gh-pages` | 生成的 HTML、CSS、JS 和公开资源 |
| 外部私有内容包      | 个人配置、Markdown 原文与草稿   |

`main` 的 CI 只检查示例,**不会自动覆盖你的个人网站**。发布个人博客在本机执行,读取本机私有内容,不要求把私有仓库访问令牌交给公开 Actions。

1. 准备公开框架仓库,安装 GitHub CLI 并运行 `gh auth login`。配置 Git 的 `user.name` 与 `user.email`;建议使用 GitHub 的 noreply 邮箱。
2. 设置本地 `.env` 的内容包路径和真实发布地址。
3. 执行:

   ```bash
   npm run deploy
   ```

4. 首次推送生成 `gh-pages` 分支后,在 GitHub 仓库 **Settings → Pages → Deploy from a branch** 选择 **gh-pages / (root)**。
5. 等待 GitHub 的 Pages 构建成功,再访问网站。以后修改文章仍执行 `npm run deploy`。

发布脚本每次重新构建并校验,只复制 `dist/` 到临时发布仓库。它使用现有 Git/GitHub 登录权限,不创建或打印密钥,不更改仓库可见性,不推送私有内容仓库,不改 `main`,也不强推历史。`gh-pages` 的发布历史包含以前公开过的网页;删除文章不能保证互联网副本或旧提交被删除。

`npm run deploy` 推送成功不等于 Pages 已完成部署,请检查 GitHub Actions/Pages 的状态。首次仓库设置由 GitHub 管理,脚本不会自行购买套餐或修改 DNS。参考 [GitHub 发布源文档](https://docs.github.com/en/pages/getting-started-with-github-pages/configuring-a-publishing-source-for-your-github-pages-site)。

### 自定义域名

先在 GitHub 账户 Settings → Pages 验证域名,再在仓库 Pages 配置 Custom domain,然后按 [GitHub DNS 文档](https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site) 修改注册商 DNS。使用分支发布时,在内容包 `public/CNAME` 中放入你的域名一行,避免后续发布覆盖域名设置;同时更新 `SITE_URL` 与 `BASE_PATH=/` 并重新发布。DNS/证书就绪后开启 HTTPS。

## 验证与安全边界

```bash
npm run build          # Astro / TypeScript 检查与静态构建
npm run test:build     # 内链、资源、目录锚点、草稿、RSS、sitemap、canonical
npm run test:privacy   # 输出白名单、草稿标记、疑似凭据、source map、符号链接
npm run format:check
npm run preview       # 查看最近一次构建
```

CI 验证根路径与项目子路径。隐私校验拒绝发布 Markdown、TypeScript、JSON 配置、隐藏文件和 source map,并检查常见私钥/令牌格式。它是额外检查,**不能保证识别所有形式的敏感信息**。请只在内容包 `public/` 放明确准备公开的文件;不引用某张图片不会使它变成私有。

没有后端接口或 API 凭据;配置内容只在构建端读取,前端不包含私有磁盘路径。未来需要带密钥的接口时,使用独立服务端代理,敏感值不得放入 `PUBLIC_*`、页面脚本、Markdown 或 `public/`。公开 CI 只有读取权限,官方 Actions 固定提交 SHA,checkout 不保留凭据。

从包含个人内容的旧仓库迁移时,**仅在当前提交删除文章还不够**。请像本项目一样新建无旧历史的框架仓库,旧仓库保持私有;不要直接公开含文章历史的旧仓库。

## 学习与复用

建议依次阅读:`src/pages/index.astro` 的页面结构 → `src/styles/global.css` 的样式变量 → `PostList.astro` 的浏览器交互 → 内容模型与构建脚本。先调整一个颜色或组件,再运行验证。

框架代码与内置示例采用 [MIT License](LICENSE)。个人博客的文章、头像和其他私有内容不属于框架授权范围;发布网页不自动授予他人转载许可。
反馈内容错误

看看同类模板

对比同技术栈与用途的模板,找到更适合的视觉与内容结构。