Files
Jiao77-Blog/TODO
2026-03-01 09:13:24 +08:00

119 lines
5.8 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 轻量级混合架构博客系统 (暂定名NovaBlog) 需求及开发文档
## 1. 项目概述
本项目旨在开发一款面向程序员和极客的极轻量级博客系统。针对目前市面上静态博客(如 Hexo排版能力有限、缺乏动态交互以及动态博客如 Halo、WordPress过度商业化、架构臃肿、资源占用高的问题本项目提出一种**“静态渲染 + 轻量级微服务”**的解耦架构。
**核心目标:**
* **极致的排版自由:** 原生支持 MDX允许在 Markdown 中直接嵌入前端组件JS/HTML 动效)和 Typst 复杂学术排版。
* **优雅的动态交互:** 支持用户注册登录、评论、点赞,但核心页面保持纯静态。
* **低资源占用:** 确保应用能在 2C1G 甚至更低配置的云服务器上稳定运行,杜绝周期性 CPU 满载问题,同时支持 Docker 容器化,方便部署在个人 NAS 上。
* **现代化的主题系统:** 基于组件化思想构建主题,实现积木式的页面组合,降低主题开发和迁移成本。
---
## 2. 核心架构设计
系统采用前后端完全解耦的架构,前端负责内容解析与预渲染,后端仅作为无状态的数据 API 提供支持。
### 2.1 表现层 (前端 / Astro)
基于 Astro 框架构建,利用其 Islands Architecture群岛架构特性
* **构建时 (Build Time)** 将 `.md` 和 `.mdx` 文件(包含 Typst 代码块)统一编译为纯静态的 HTML/CSS。
* **运行时 (Client Side)** 大部分页面为 Zero-JS仅在“评论区”、“点赞按钮”等特定“岛屿”组件上挂载 JavaScript 并发起按需 API 请求。
### 2.2 交互层 (后端微服务 / Micro API)
一个极轻量的后端 API 服务,专门处理动态请求。为了绝对的轻量化,避免 JVM 或臃肿 Node 框架带来的内存和 CPU 开销采用轻量级语言或极简框架开发搭配本地文件型数据库SQLite
### 2.3 部署形态
* **前端产物:** 编译后的纯静态文件可托管于任何 CDN、Nginx 容器或 GitHub Pages。
* **后端 API** 打包为轻量级 Docker 镜像,暴露特定端口,通过 Nginx 反向代理提供服务。可轻松接入虚拟局域网作为服务节点。
---
## 3. 功能需求详细说明
### 3.1 内容管理模块 (基于文件系统)
* **本地化撰写:** 以 `src/content/blog/` 目录为核心,通过标准 Markdown 和 Frontmatter (YAML) 管理元数据(标题、日期、标签、分类)。
* **MDX 混合解析:** * 支持标准的 Markdown 语法。
* 支持直接在文章中 `import` 并使用 Vue/React/原生 JS 组件,实现图表、可交互动画等丰富排版。
* **Typst 渲染支持:** 封装 `<TypstBlock />` 组件,在构建阶段调用 Typst 编译器将数学公式和复杂排版渲染为高质量 SVG 嵌入页面。
### 3.2 动态交互模块 (API 驱动)
* **用户鉴权:** * 管理员身份认证(用于后台极简面板或特定 API 调用)。
* 普通用户注册/登录(支持邮箱验证或 OAuth 第三方登录,如 GitHub
* 基于 JWT (JSON Web Token) 的无状态鉴权。
* **评论系统:**
* 支持文章下的多级嵌套评论。
* 支持 Markdown 基础语法解析。
* 前端组件支持 `client:visible` 懒加载,仅当用户滚动到评论区时才加载请求逻辑。
* **点赞系统:**
* 基于文章 ID 和用户 ID (或访客 IP Hash) 的防刷点赞接口。
### 3.3 主题与布局系统 (组件化)
* **Layout 核心:** 提供基础的 `BaseLayout.astro`,定义全局的 Header、Footer 和 SEO Meta 标签。
* **CSS 变量换肤:** 样式层全面采用 CSS Variables通过切换变量配置文件即可实现黑白模式和主题色彩切换。
* **组件插槽 (Slots)** 页面主体留白,通过 Astro 的 `<slot />` 机制允许不同文章复用或重写特定的页面布局。
---
## 4. 技术选型建议
### 4.1 前端 (静态生成与渲染)
* **核心框架:** Astro (提供极速构建、MDX 支持和内容集合强校验)。
* **组件库生态:** Vue 3 或 React (仅用于编写需要动态交互的“岛屿”组件,如评论框)。
* **样式方案:** Tailwind CSS 或纯 CSS 变量 (保持轻量)。
### 4.2 后端 (动态 API 提供)
为了解决小鸡(如 2C1G 配置)资源受限问题,推荐以下两种方案之一:
* **方案 A (性能极致 - 推荐)** **Go 语言 (Gin/Fiber) + SQLite**。编译为二进制文件运行,内存常驻极低(通常十几 MBCPU 开销极小,高并发无压力。
* **方案 B (开发极速)** **Node.js (Hono 或 Fastify) + SQLite + Prisma (ORM)**。比传统的 NestJS 或 Express 轻量得多,生态契合度高。
---
## 5. 阶段开发规划 (Roadmap)
### Phase 1: 核心静态引擎构建 (MVP)
* [ ] 初始化 Astro 项目,配置 Content Collections 数据校验。
* [ ] 编写基础的博客 Layout (主页、文章列表页、文章详情页)。
* [ ] 实现 MDX 支持,编写首个包含动态 HTML 交互组件的测试文章。
* [ ] 封装 Typst 渲染组件,打通构建流。
### Phase 2: 轻量 API 服务开发
* [ ] 搭建后端服务项目,配置 SQLite 数据库和 ORM 模型 (Users, Posts_Meta, Comments)。
* [ ] 实现 JWT 登录与鉴权接口。
* [ ] 实现评论的 CRUD 接口和文章点赞接口。
* [ ] 后端 Docker 化封装。
### Phase 3: 前后端联调与交互组件
* [ ] 在 Astro 中使用 UI 框架 (Vue/React) 开发独立于静态页面的评论区组件。
* [ ] 联调跨域 API处理 Loading、Error 等异步状态。
* [ ] 实现文章页的点赞按钮交互。
### Phase 4: 部署与测试
* [ ] 前端打包测试 (`astro build`),验证打包后的 JS 产物大小。
* [ ] 后端部署至云服务器或 NAS 节点,配置 Nginx 反向代理。
* [ ] 压力测试与 CPU 监控,确保资源占用在合理阈值内。