Rosydawn:一个极简但是完整的 Astro 博客框架
介绍 Rosydawn 博客框架的架构设计、核心特性与自动化部署能力,包括基于 Cron 的 Git 自动部署和 HTTPS 证书管理。
这是 Rosydawn 博客框架的介绍文档。 一句话概括 Rosydawn: 一个基于 Astro 进行构建,完全由 AI 设计和开发实现的博客框架,集成了一键部署、自动化部署、https 集成等等能力。
核心特性
| 特性 | 描述 |
|---|---|
| 静态生成 | 基于 Astro SSG,无需服务器 |
| 内容管理 | 使用 Astro Content Collections 管理博客文章,能够通过文件夹的方式组织和管理内容 |
| Markdown/MDX | 支持标准 Markdown 和 MDX 扩展语法 |
| 代码高亮 | 集成 Shiki(使用 one-light 主题) |
| 图表支持 | 集成 PlantUML、Drawio 绘图能力 |
| 响应式设计 | 移动端友好,自适应布局 |
| 自动部署 | 基于 Cron 的 Git 监控与自动构建 |
| HTTPS | Let’s Encrypt 证书自动申请与续期 |
技术栈
框架: Astro 5.17.x
语言: TypeScript
样式: Scoped CSS (无预处理器)
代码高亮: Shiki (内置于 Astro)
图表: astro-plantuml
部署: Nginx + Let's Encrypt (自动化脚本)
目录结构
rosydawn/
├── public/ # 静态资源
│ ├── favicon.ico
│ └── favicon.svg
│
├── src/
│ ├── content/ # 内容目录
│ │ └── posts/ # 博客文章
│ │ └── {year}/{month}/{slug}/
│ │ ├── index.md # 文章内容
│ │ ├── cover.jpg # 封面图片 (可选)
│ │ └── assets/ # 文章资源 (可选)
│ │
│ ├── layouts/
│ │ └── Layout.astro # 全局布局组件
│ │
│ ├── pages/ # 页面路由
│ │ ├── index.astro # 首页
│ │ ├── about.astro # 关于页面
│ │ ├── blog/ # 博客相关
│ │ └── tags/ # 标签相关
│ │
│ └── content.config.ts # 内容集合配置
│
├── scripts/
│ ├── deploy.mjs # 部署脚本入口
│ └── lib/ # 部署脚本模块
│
├── logs/ # 日志目录
└── README.md # 项目文档
文章编写规范
文件结构
每篇文章存放在独立目录中,按年月组织:
src/content/posts/2026/02/my-article/
├── index.md # 文章内容
├── cover.jpg # 封面图(可选)
└── assets/ # 文章资源目录(可选)
├── diagram.png
└── screenshot.jpg
Frontmatter 格式
---
title: "文章标题"
date: 2026-02-08
description: "一句话描述,会显示在列表页"
tags: ["标签1", "标签2"]
coverImage: ./cover.jpg # 可选
---
图表内嵌
PlantUML内嵌:
语法如下,指定代码块的语言为 plantuml,并使用 @startuml 和 @enduml 标记代码块。
Drawio内嵌:
Drawio 是通过 svg 内嵌实现的,如果你要使用 drawio,需要按照下列步骤进行:
1、文档需要指定格式为 MDX,即文件命名为xxx.mdx
2、在本地将 drawio 导出为 svg 格式,并将 svg 文件命名为 xxx.drawio.svg
3、在文档中使用 ?raw 内嵌 svg:
import deploySvg from './assets/deploy-flow.svg?raw';
<div class="drawio-container" set:html={deploySvg} />
部署系统
Rosydawn 提供了完整的自动化部署能力,基于 Node.js 实现。
基础命令
# 一键构建部署(HTTP)
npm run deploy
# 启用 HTTPS
# 更改配置文件中的 `SSL_EMAIL` 变量,并运行以下命令即可完成 SSL 配置
npm run deploy:ssl
# 查看部署状态
npm run deploy:status
自动部署 (Cron)
脚本支持基于系统 Cron 的自动部署,定时检查 Git 仓库更新并自动构建部署:
# 安装 Cron 任务
# 定时任务配置在 scripts/deploy.mjs 文件中
npm run deploy:cron:install
# 查看状态
npm run deploy:cron:status
# 查看实时日志
tail -f logs/deploy.log
工作原理
- Cron 定时触发 - 系统 Cron 每 N 分钟调用脚本
- Git 检查 - 比较本地和远程 commit hash
- 自动拉取 - 检测到更新后执行
git pull - 构建部署 - 自动执行构建和部署流程
- 邮件通知 - 部署完成后发送邮件通知(待实现)
Cron 环境兼容性
脚本针对 Cron 的特殊环境做了以下适配:
| 问题 | 解决方案 |
|---|---|
| PATH 环境变量精简 | 脚本启动时自动将当前 Node.js 的 bin 目录添加到 PATH |
| USER 环境变量缺失 | 使用 id -un 系统命令获取用户名 |
| SSH Agent 不可用 | 自动检测 SSH key 并通过 GIT_SSH_COMMAND 注入 |
| 日志目录不存在 | 写入日志前自动创建 logs/ 目录 |
SSL 证书管理
# 首次安装证书
# 更改配置文件中的 `SSL_EMAIL` 变量, 用于接收 Let-Encrypt 的信息,运行以下命令即可完成 SSL 配置
npm run deploy:ssl
# 手动续期
npm run deploy:renew
# 查看证书状态
npm run deploy:status
Let’s Encrypt 证书有效期为 90 天,Certbot 会自动设置续期任务。
性能优化
前端优化
| 优化项 | 实现方式 | 效果 |
|---|---|---|
| 零字体请求 | 使用系统原生字体栈 | 首屏渲染无阻塞 |
| 单一 Favicon | 仅使用 SVG 格式 | 减少网络请求 |
| 静态生成 | Astro SSG 预渲染 | 无服务端渲染开销 |
Nginx 服务端优化
部署脚本自动配置以下性能优化:
# 零拷贝传输
sendfile on;
tcp_nopush on;
tcp_nodelay on;
# Gzip 压缩
gzip on;
gzip_comp_level 5;
gzip_types text/plain text/css application/json application/javascript;
# 静态资源长期缓存
location ~* \.(css|js|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
代码块增强
文章详情页对代码块做了以下增强:
- 语言标签显示 - 代码块右上角显示语言名称
- 行号显示 - 等宽对齐的行号
- 复制按钮 - 一键复制代码内容
- 展开/收起 - 超过 15 行时自动折叠
- 滚动位置补偿 - 防止展开/收起时页面跳动
// 展开/收起时的滚动补偿
const rectBefore = wrapper.getBoundingClientRect();
const topBefore = rectBefore.top;
wrapper.classList.toggle('collapsed');
const rectAfter = wrapper.getBoundingClientRect();
const scrollDiff = rectAfter.top - topBefore;
if (scrollDiff !== 0) {
window.scrollBy(0, scrollDiff);
}
开发注意事项
重要❗:开发前把这段提示词发给你的大模型工具:
这是 rosydawn 个人博客项目。
## 开始前
请阅读 README.md,其中包含:
- 项目架构与技术栈(Astro 5 + TypeScript + Tailwind)
- 开发规范与代码风格
- 部署流程(Git 驱动 + Cron 监控)
- AI 协作专属指南
## 限制
- 不要读取 src/content/**/*.md 文件(博客文章)
- 不要读取 public/images/ 下的资源文件
## 关注范围
- src/components/ - 组件开发
- src/layouts/ - 布局模板
- src/pages/ - 页面路由
- scripts/lib/ - 部署脚本
- astro.config.mjs - 构建配置
快速开始
# fork 本项目并 克隆项目到本地
cd rosydawn
# 安装依赖
npm install
# 开发模式
npm run dev
# 服务端部署
npm run deploy
# 查看部署帮助信息
npm run deploy:help
Rosydawn 是一个专注于内容展示的博客框架,通过极简设计和自动化部署,让创作者专注于写作本身。