项目概述
小黑丸博客是一个专注于内容的极简纯文本博客系统,采用现代Web技术栈构建,提供流畅的用户体验和简洁的内容管理界面。该系统以内容为中心,去除了不必要的视觉干扰,让读者专注于文章内容本身。系统支持Markdown格式,让创作者能够轻松编写和发布结构化的文章。
主要特点
- Markdown支持:原生支持Markdown格式,轻松创建格式丰富的文章
技术栈详解
前端技术
- Next.js 14:React框架,提供服务器端渲染和静态生成能力
- React 18:用户界面库,采用函数式组件和Hooks
- TypeScript:类型安全的JavaScript超集
- Tailwind CSS:实用优先的CSS框架,用于快速构建自定义设计
- shadcn/ui:基于Radix UI的组件集合,提供可访问性和可定制性
后端技术
- Next.js API Routes:处理API请求的服务器端功能
- Server Actions:Next.js的服务器端操作功能,用于表单处理
- Supabase:开源的Firebase替代品,提供数据库和身份验证服务
- PostgreSQL:强大的关系型数据库,用于存储博客内容
开发工具
- ESLint:JavaScript和TypeScript代码质量工具
系统架构
小黑丸博客采用现代的分层架构设计:
- 表示层:React组件和Tailwind CSS样式
- 应用层:Next.js页面和路由
- 业务逻辑层:Server Actions和API Routes
- 数据访问层:Supabase客户端和数据库操作
- 数据存储层:PostgreSQL数据库
系统使用Next.js的App Router,采用基于文件系统的路由,每个路由对应一个页面组件。数据流采用服务器组件和客户端组件的混合模式,确保最佳性能和用户体验。
数据库设计
博客系统使用简单而高效的数据库设计:
文章表 (posts)
``sql
CREATE TABLE posts (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
title TEXT NOT NULL,
slug TEXT NOT NULL UNIQUE,
content TEXT NOT NULL,
published BOOLEAN NOT NULL DEFAULT false,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
);
CREATE INDEX idx_posts_slug ON posts(slug);
CREATE INDEX idx_posts_published ON posts(published);
`
主要组件详解
核心组件
#### 1. 站点头部 (SiteHeader)
站点头部组件包含网站标志、导航链接和主题切换按钮。它是固定在页面顶部的,在用户滚动时保持可见。
#### 2. 文章卡片 (PostCard)
文章卡片组件用于在首页和列表页面展示文章预览。它显示文章标题、发布日期、阅读时间估计和内容摘要。
#### 3. Markdown渲染器 (MarkdownRenderer)
Markdown渲染器组件负责将Markdown格式的文本转换为HTML并应用语法高亮。它使用marked库进行转换,并使用Prism.js进行代码高亮。
#### 4. 文章表单 (PostForm)
文章表单组件用于创建和编辑文章。它包含标题、slug、内容和发布状态字段,并使用Server Actions处理表单提交。
管理组件
#### 1. 管理头部 (AdminHeader)
管理头部组件是管理界面的导航栏,包含返回网站、创建新文章和登出按钮。
#### 2. 删除文章按钮 (DeletePostButton)
删除文章按钮组件提供安全的文章删除功能,包含确认对话框以防止意外删除。
页面结构
公开页面
/
):显示已发布文章的列表
/posts/[slug]
):显示单篇文章的完整内容
/about
):关于博客和作者的信息
管理页面
/admin
):显示所有文章(包括未发布的)
/admin/login
):管理员登录界面
/admin/new
):创建新文章的表单
/admin/edit/[slug]
):编辑现有文章的表单
认证与授权
博客系统使用简单而安全的认证机制:
- 密码认证:使用环境变量中的管理员密码进行验证
- 会话管理:使用HTTP-only cookies存储会话令牌
- 中间件保护:使用Next.js中间件保护管理路由
认证流程:
- 用户访问管理页面
- 中间件检查会话cookie
- 如果未认证,重定向到登录页面
- 用户输入密码
- 服务器验证密码并创建会话
- 用户被重定向到管理面板
数据流程
读取文章流程
- 用户访问首页或文章页面
- Next.js服务器组件调用
getPublishedPosts
或getPostBySlug
函数
- 函数使用Supabase客户端查询数据库
- 数据返回给服务器组件
- 服务器组件渲染HTML并发送给客户端
创建/编辑文章流程
- 用户填写文章表单
- 表单提交到Server Action
- Server Action验证输入并检查slug唯一性
- 数据保存到数据库
- 缓存被重新验证
- 用户被重定向到管理面板
性能优化
小黑丸博客采用多种技术确保最佳性能:
- 服务器组件:减少客户端JavaScript负载
- 缓存函数:使用React的
cache
函数缓存数据库查询
- 图像优化:使用Next.js的Image组件进行自动图像优化
- 代码分割:自动的基于路由的代码分割
- 懒加载:动态导入重量级库如marked和Prism.js
- 响应式设计:确保在所有设备上的良好性能
部署指南
前提条件
环境变量
部署前需要设置以下环境变量:
`
plaintext
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
ADMIN_PASSWORD=your-admin-password
NEXT_PUBLIC_APP_URL=https://your-domain.com
`
数据库设置
- 在Supabase中创建新项目
- 执行上述SQL创建posts表
- 设置行级安全策略(RLS)
Vercel部署步骤
- 将代码推送到GitHub仓库
- 在Vercel中导入项目
- 配置环境变量
- 部署项目
使用指南
访问博客
访问您的部署URL(例如
https://your-domain.com
)浏览博客内容。
管理内容
- 访问
/admin/login
并输入管理员密码
- 在管理面板中,您可以:
- 查看所有文章
- 创建新文章
- 编辑现有文章
- 删除文章
- 发布或取消发布文章
编写文章
- 在管理面板中点击"新建文章"
- 填写标题和slug(URL)
- 使用Markdown编写内容
- 选择是否立即发布
- 点击"保存文章"
自定义和扩展
主题定制
通过修改
tailwind.config.js
和globals.css`文件自定义主题颜色和排版。
添加新功能
系统设计为模块化,可以轻松添加新功能:
- 评论系统:集成第三方评论服务如Disqus或自建评论系统
- 标签系统:添加文章分类和标签功能
- 搜索功能:实现全文搜索
- 分析功能:集成Google Analytics或其他分析工具
维护与更新
定期维护
- 更新依赖包以获取安全补丁
- 备份数据库
- 监控性能和错误日志
故障排除
常见问题及解决方案:
- 数据库连接错误:检查Supabase凭证和网络连接
- 认证问题:确保环境变量正确设置
- 渲染错误:检查Markdown内容格式
结语
小黑丸博客系统是一个轻量级但功能完备的博客平台,专为内容创作者设计。它的简洁设计和强大功能使其成为个人博客、技术文档或项目展示的理想选择。通过专注于核心功能和用户体验,它提供了一个高效、易用的内容发布平台。
此文档最后更新于2025年3月18日
项目概述
小黑丸博客是一个专注于内容的极简纯文本博客系统,采用现代Web技术栈构建,提供流畅的用户体验和简洁的内容管理界面。该系统以内容为中心,去除了不必要的视觉干扰,让读者专注于文章内容本身。系统支持Markdown格式,让创作者能够轻松编写和发布结构化的文章。
主要特点
技术栈详解
前端技术
后端技术
开发工具
系统架构
小黑丸博客采用现代的分层架构设计:
系统使用Next.js的App Router,采用基于文件系统的路由,每个路由对应一个页面组件。数据流采用服务器组件和客户端组件的混合模式,确保最佳性能和用户体验。
数据库设计
博客系统使用简单而高效的数据库设计:
文章表 (posts)
``
sqlCREATE TABLE posts (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
title TEXT NOT NULL,
slug TEXT NOT NULL UNIQUE,
content TEXT NOT NULL,
published BOOLEAN NOT NULL DEFAULT false,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now()
);
CREATE INDEX idx_posts_slug ON posts(slug);
CREATE INDEX idx_posts_published ON posts(published);
`
- 首页 (
/主要组件详解
核心组件
#### 1. 站点头部 (SiteHeader)
站点头部组件包含网站标志、导航链接和主题切换按钮。它是固定在页面顶部的,在用户滚动时保持可见。
#### 2. 文章卡片 (PostCard)
文章卡片组件用于在首页和列表页面展示文章预览。它显示文章标题、发布日期、阅读时间估计和内容摘要。
#### 3. Markdown渲染器 (MarkdownRenderer)
Markdown渲染器组件负责将Markdown格式的文本转换为HTML并应用语法高亮。它使用marked库进行转换,并使用Prism.js进行代码高亮。
#### 4. 文章表单 (PostForm)
文章表单组件用于创建和编辑文章。它包含标题、slug、内容和发布状态字段,并使用Server Actions处理表单提交。
管理组件
#### 1. 管理头部 (AdminHeader)
管理头部组件是管理界面的导航栏,包含返回网站、创建新文章和登出按钮。
#### 2. 删除文章按钮 (DeletePostButton)
删除文章按钮组件提供安全的文章删除功能,包含确认对话框以防止意外删除。
页面结构
公开页面
):显示已发布文章的列表- 文章详情页 (
/posts/[slug]):显示单篇文章的完整内容- 关于页面 (
/about):关于博客和作者的信息
- 管理面板 (
/admin管理页面
):显示所有文章(包括未发布的)- 登录页面 (
/admin/login):管理员登录界面- 新建文章 (
/admin/new):创建新文章的表单- 编辑文章 (
/admin/edit/[slug]):编辑现有文章的表单
- 密码认证:使用环境变量中的管理员密码进行验证
- 会话管理:使用HTTP-only cookies存储会话令牌
- 中间件保护:使用Next.js中间件保护管理路由
- 用户访问管理页面
- 中间件检查会话cookie
- 如果未认证,重定向到登录页面
- 用户输入密码
- 服务器验证密码并创建会话
- 用户被重定向到管理面板
- 用户访问首页或文章页面
- Next.js服务器组件调用
getPublishedPosts认证与授权
博客系统使用简单而安全的认证机制:
认证流程:
数据流程
读取文章流程
或getPostBySlug函数- 函数使用Supabase客户端查询数据库
- 数据返回给服务器组件
- 服务器组件渲染HTML并发送给客户端
- 用户填写文章表单
- 表单提交到Server Action
- Server Action验证输入并检查slug唯一性
- 数据保存到数据库
- 缓存被重新验证
- 用户被重定向到管理面板
- 服务器组件:减少客户端JavaScript负载
- 缓存函数:使用React的
cache创建/编辑文章流程
性能优化
小黑丸博客采用多种技术确保最佳性能:
函数缓存数据库查询- 图像优化:使用Next.js的Image组件进行自动图像优化
- 代码分割:自动的基于路由的代码分割
- 懒加载:动态导入重量级库如marked和Prism.js
- 响应式设计:确保在所有设备上的良好性能
- Node.js 18+
- Supabase账户
- Vercel账户(推荐)
`部署指南
前提条件
环境变量
部署前需要设置以下环境变量:
plaintext`SUPABASE_URL=https://your-project.supabase.co
SUPABASE_ANON_KEY=your-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
ADMIN_PASSWORD=your-admin-password
NEXT_PUBLIC_APP_URL=https://your-domain.com
- 在Supabase中创建新项目
- 执行上述SQL创建posts表
- 设置行级安全策略(RLS)
- 将代码推送到GitHub仓库
- 在Vercel中导入项目
- 配置环境变量
- 部署项目
https://your-domain.com数据库设置
Vercel部署步骤
使用指南
访问博客
访问您的部署URL(例如
)浏览博客内容。
- 访问
/admin/login管理内容
并输入管理员密码- 在管理面板中,您可以:
- 查看所有文章
- 创建新文章
- 编辑现有文章
- 删除文章
- 发布或取消发布文章
- 在管理面板中点击"新建文章"
- 填写标题和slug(URL)
- 使用Markdown编写内容
- 选择是否立即发布
- 点击"保存文章"
tailwind.config.js编写文章
自定义和扩展
主题定制
通过修改
和globals.css`文件自定义主题颜色和排版。添加新功能
系统设计为模块化,可以轻松添加新功能:
维护与更新
定期维护
故障排除
常见问题及解决方案:
结语
小黑丸博客系统是一个轻量级但功能完备的博客平台,专为内容创作者设计。它的简洁设计和强大功能使其成为个人博客、技术文档或项目展示的理想选择。通过专注于核心功能和用户体验,它提供了一个高效、易用的内容发布平台。
此文档最后更新于2025年3月18日