🚀 Vichi博客 - 现代化全栈博客系统
📋 一、项目概要
1.1 项目名称
Vichi博客 - 基于AI辅助开发的现代化全栈博客平台
1.2 项目愿景
构建一个技术领先、用户体验卓越的博客系统,整合AI能力提升内容创作和管理效率。采用最新的 Next.js 全栈技术架构,结合 Sakura (樱花) 视觉主题,打造一个既有极客感又不失美感的个人知识管理与展示平台。
1.3 技术栈
| 层级 | 技术 | 版本 | 选择理由 |
|---|---|---|---|
| 核心框架 | Next.js (App Router) | 16.x | 服务端组件(RSC)、SEO优化、全栈一体化 |
| 语言 | TypeScript | 5.x | 强类型约束、开发体验好 |
| UI库 | React | 19.0.0 | 最新的 React 特性支持 |
| 样式 | Tailwind CSS v4 | v4.0.0 | 最新的 CSS-based 配置,极致的性能与开发体验 |
| 组件库 | Shadcn UI (Radix UI) | - | 高度可定制、无障碍支持的 UI 组件 |
| 动画 | Framer Motion | 11.x | 强大的交互动画能力,实现樱花飘落等动效 |
| 数据库 | PostgreSQL / SQLite | - | 稳定可靠的关系型数据库 |
| ORM | Drizzle ORM | 0.45.x | 类型安全、SQL-like 语法、轻量高效 |
| 认证 | NextAuth.js | 4.24.x | 灵活的身份验证解决方案 |
| 存储 | Aliyun OSS | 6.23.x | 稳定廉价的对象存储服务 |
| 加密 | RSA + Bcrypt | - | RSA加密传输,Bcrypt安全存储 |
| Markdown | react-markdown + remark-gfm | - | 支持GFM语法的Markdown渲染 |
| 音乐播放器 | APlayer + MetingJS | - | 支持主流音乐平台歌单导入 |
🎯 二、核心功能需求
2.1 用户角色体系
| 角色 | 权限 | 功能 |
|---|---|---|
| 访客 | 只读 | 浏览文章、查看分类标签、阅读/发布评论、查看说说、友链 |
| 管理员 | 全部 | 文章发布/编辑/删除、分类标签管理、评论审核、友链管理、说说发布、媒体库、系统配置、用户管理 |
2.2 博客前台功能 (Sakura 樱花风格)
2.2.1 视觉与交互
- 樱花动效:全局或首页支持
SakuraPetals动态樱花飘落效果。 - 沉浸式导航栏:随页面滚动实现从透明到模糊毛玻璃效果的平滑切换。
- Hero 视觉增强:
- 全屏海报:支持大图背景,底部带有波浪形 (Wave) 视觉平滑过渡。
- 打字机效果:首页 Slogan 动态展示。
- Glitch 故障文本特效:Hero 区域采用故障艺术风格标题。
- 主题切换:支持浅色/深色/系统模式,深色模式采用深紫色调,契合科技风格。
- 资源优化:
- 图片懒加载:实现图片延迟加载,提高页面加载速度。
- 图片压缩:配置图片压缩和 WebP 格式支持,减少带宽使用。
- CDN 加速:使用 CDN 加速静态资源,提升全球访问速度。
- 响应式设计优化:
- 移动端布局:优化移动端布局和交互,确保良好的触摸体验。
- 自适应字体:实现自适应字体大小,在不同设备上保持良好的可读性。
- 全设备兼容:确保所有功能在不同设备上正常工作。
- 交错布局文章列表:左图右文与右图左文的交替展示,提升视觉层次感。
2.2.2 内容展示
- 文章系统:
- 交互式卡片:文章列表采用阴影卡片设计,支持悬浮缩放。
- 详情页:支持目录导航 (TOC)、字数统计、阅读时间估算。
- Markdown 渲染:支持代码高亮、数学公式、图片灯箱效果。
- Mac 风格代码块:支持一键复制与多种语言高亮。
- 说说 (Talks):类似朋友圈的动态展示,支持多图预览和时间轴布局。
- 友链 (Friends):精美的卡片式友链展示,支持分类和搜索。
- 分类/标签系统:支持按分类和标签筛选文章,展示分类/标签云。
- 归档系统:按时间轴展示文章归档,支持年份/月份筛选。
- 关于页面:展示博主个人信息和博客介绍。
- 搜索系统:全站实时搜索,支持标题、内容、摘要匹配。
2.2.3 互动体验
- 评论系统:支持多级回复、评论审核、楼层回复。
- 全站吸底音乐播放器:基于 APlayer + MetingJS,支持主流平台歌单导入。
- 个性化:支持用户修改昵称、头像等基本资料。
2.3 管理后台功能 (/admin)
- 仪表盘:全站数据统计看板,包含文章、评论、访问量等关键指标。
- 内容管理:
- 文章管理:Markdown 编辑器、图片拖拽上传、分类标签关联、草稿管理。
- 分类/标签管理:支持树状或列表式的 CRUD 操作。
- 评论管理:查看、删除、批量审核评论。
- 说说管理:发布、编辑、删除说说内容。
- 用户管理:管理员账户管理、权限配置。
- 媒体库:基于阿里云 OSS 的文件管理系统,支持图片拖拽上传、查看、删除、外链获取。
- 友链管理:添加、编辑、删除友链,支持友链分类。
- 系统设置:个人信息修改、SEO 配置、系统参数设置。
- 关于我管理:Markdown 实时同步编辑关于页面内容。
🏗️ 三、系统架构设计
3.1 目录结构
vichi-blog/
├── app/ # Next.js App Router
│ ├── (blog)/ # 前台展示路由组
│ │ ├── about/ # 关于页面
│ │ ├── archives/ # 归档页面
│ │ ├── articles/ # 文章详情与列表
│ │ ├── categories/ # 分类页面
│ │ ├── friends/ # 友链页面
│ │ ├── privacy/ # 隐私政策
│ │ ├── profile/ # 个人资料
│ │ ├── tags/ # 标签页面
│ │ ├── talks/ # 说说页面
│ │ ├── terms/ # 使用条款
│ │ ├── layout.tsx # 前台公共布局 (Navbar, Footer, Petals)
│ │ └── page.tsx # 首页
│ ├── admin/ # 后台管理路由组 (需 Admin 权限)
│ │ ├── about/ # 关于页面管理
│ │ ├── articles/ # 文章管理
│ │ ├── categories/ # 分类管理
│ │ ├── comments/ # 评论管理
│ │ ├── dashboard/ # 数据统计
│ │ ├── friends/ # 友链管理
│ │ ├── media/ # 媒体库
│ │ ├── settings/ # 系统设置
│ │ ├── tags/ # 标签管理
│ │ ├── talks/ # 说说管理
│ │ ├── users/ # 用户管理
│ │ └── layout.tsx # 后台侧边栏布局
│ ├── api/ # API 路由
│ │ ├── admin/ # 后台管理接口 (严格权限校验)
│ │ ├── auth/ # 认证相关接口
│ │ ├── upload/ # 文件上传接口
│ │ ├── vichi/ # 前台公开接口
│ │ └── visit/ # 访问统计接口
│ ├── login/ # 登录页面
│ ├── register/ # 注册页面
│ ├── favicon.ico # 网站图标
│ ├── globals.css # 全局样式 (Tailwind v4 配置)
│ └── layout.tsx # 根布局
├── components/ # 组件库
│ ├── admin/ # 后台管理组件
│ │ ├── article-table.tsx
│ │ ├── confirm-dialog.tsx
│ │ ├── header.tsx
│ │ ├── image-uploader.tsx
│ │ ├── markdown-editor.tsx
│ │ └── sidebar.tsx
│ ├── blog/ # Sakura 风格前台组件
│ │ ├── article-card.tsx
│ │ ├── blog-petals.tsx
│ │ ├── category-list.tsx
│ │ ├── comment-form.tsx
│ │ ├── comment-section.tsx
│ │ ├── footer.tsx
│ │ ├── hero.tsx
│ │ ├── home-layout.tsx
│ │ ├── markdown-viewer.tsx
│ │ ├── music-player.tsx
│ │ ├── navbar.tsx
│ │ ├── sakura-petals.tsx
│ │ ├── search-button.tsx
│ │ ├── tag-cloud.tsx
│ │ └── visit-tracker.tsx
│ ├── ui/ # shadcn/ui 基础原子组件
│ │ ├── avatar.tsx
│ │ ├── badge.tsx
│ │ ├── button.tsx
│ │ ├── card.tsx
│ │ ├── checkbox.tsx
│ │ ├── command.tsx
│ │ ├── dialog.tsx
│ │ ├── dropdown-menu.tsx
│ │ ├── form.tsx
│ │ ├── input.tsx
│ │ ├── label.tsx
│ │ ├── sheet.tsx
│ │ ├── switch.tsx
│ │ ├── table.tsx
│ │ ├── tabs.tsx
│ │ └── textarea.tsx
│ ├── mode-toggle.tsx # 主题切换组件
│ ├── session-provider.tsx # 会话提供器
│ └── theme-provider.tsx # 主题提供器
├── lib/ # 核心库
│ ├── db/ # Drizzle Schema 与数据库连接
│ │ ├── index.ts
│ │ ├── relations.ts
│ │ └── schema.ts
│ ├── auth.ts # NextAuth 配置
│ ├── oss.ts # 阿里云 OSS 封装
│ ├── permission.ts # 权限管理
│ ├── rsa-keys.ts # RSA 密钥管理
│ ├── types.ts # 类型定义
│ └── utils.ts # 工具函数
├── public/ # 静态资源
├── scripts/ # 脚本文件
│ ├── check-db.ts # 数据库检查
│ └── init-admin.ts # 初始化管理员账户
├── drizzle/ # 数据库迁移文件
├── .gitignore # Git 忽略文件
├── LICENSE # 许可证文件
├── README.md # 项目说明
├── components.json # Shadcn UI 配置
├── drizzle.config.ts # Drizzle ORM 配置
├── eslint.config.mjs # ESLint 配置
├── middleware.ts # Next.js 中间件
├── next.config.ts # Next.js 配置
├── package.json # 项目依赖
├── postcss.config.mjs # PostCSS 配置
└── tsconfig.json # TypeScript 配置
### 代码结构优化
- **组件拆分**:将大型组件拆分为更小的专注组件,提高可维护性和复用性。
- **逻辑提取**:将重复逻辑提取为可复用函数,减少代码冗余。
- **类型定义**:实现更严格的 TypeScript 类型定义,提高代码质量和开发体验。
- **路由组织**:使用 Next.js App Router 的路由组功能,清晰分离前台和后台路由。
### 3.2 数据库设计 (Drizzle Schema)
- **t_article**: 存储文章核心内容、统计信息、封面、状态等。
- **t_user_auth**: 存储登录账号、加密密码。
- **t_user_info**: 存储用户昵称、头像、简介等元数据。
- **t_category / t_tag**: 分类与标签体系。
- **t_comment**: 存储评论及回复关系。
- **t_talk / t_friend**: 存储说说和友链数据。
- **t_visit**: 存储网站访问统计数据。
### 3.3 API 架构设计
#### 前台 API (`/api/vichi/`)
- **articles**: 文章列表、详情、搜索
- **categories**: 分类列表、详情
- **tags**: 标签列表、详情
- **comments**: 评论列表、发布
- **talks**: 说说列表
- **friends**: 友链列表
- **profile**: 博主信息
- **config**: 网站配置
#### 后台 API (`/api/admin/`)
- **articles**: 文章管理 (CRUD)
- **categories**: 分类管理 (CRUD)
- **tags**: 标签管理 (CRUD)
- **comments**: 评论管理 (审核、删除)
- **talks**: 说说管理 (CRUD)
- **friends**: 友链管理 (CRUD)
- **users**: 用户管理
- **settings**: 系统设置
- **dashboard/stats**: 数据统计
- **media**: 媒体库管理
#### 认证 API (`/api/auth/`)
- **[...nextauth]**: NextAuth 认证端点
- **register**: 用户注册
#### 工具 API
- **upload**: 文件上传
- **visit**: 访问统计
---
## 🔒 四、安全架构实现
### 4.1 身份认证与授权
- **密码安全**:前端 RSA 加密传输 + 后端 Bcrypt 强哈希存储。
- **访问控制**:基于 NextAuth 的 Session 校验,结合 Middleware 实现 `/admin` 路由的 Role-Based Access Control (RBAC)。
- **路由保护**:后台管理路由严格校验管理员权限,防止未授权访问。
### 4.2 数据安全
- **注入防护**:Drizzle ORM 原生支持参数化查询,防止 SQL 注入攻击。
- **XSS 防护**:前端输入验证和输出转义,防止跨站脚本攻击。
- **CSRF 防护**:NextAuth 内置 CSRF 保护机制。
### 4.3 配置安全
- **敏感配置**:所有密钥通过 `.env.local` 环境变量管理,避免硬编码。
- **RSA 密钥管理**:使用 `rsa-keys.ts` 统一管理 RSA 密钥对,确保加密传输安全。
### 4.4 存储安全
- **文件上传安全**:媒体库上传接口严格验证文件类型和大小,防止恶意文件上传。
- **阿里云 OSS 安全**:使用临时访问凭证和权限控制,确保对象存储安全。
---
## 🚀 五、部署与优化
### 5.1 部署方案
#### 5.1.1 本地开发环境
- **环境准备**:Node.js 18+、PostgreSQL/SQLite
- **快速启动**:
```bash
# 克隆项目
git clone <repository-url>
cd vichi-blog
# 安装依赖
npm install
# 配置环境变量
# 复制 .env.example 为 .env.local 并填入配置
# 数据库迁移
npx drizzle-kit push
# 初始化管理员账户
npx tsx scripts/init-admin.ts
# 启动开发服务器
npm run dev
5.1.2 生产部署
- Vercel 部署(推荐):
- 连接 GitHub 仓库
- 配置环境变量
- 一键部署
- Docker 部署:
- 构建 Docker 镜像
- 配置容器环境变量
- 启动容器
- 自托管服务器:
- 配置 Node.js 环境
- 安装 PostgreSQL
- 配置 Nginx 反向代理
- 部署应用
5.2 性能优化
5.2.1 前端优化
- 代码分割:使用 Next.js 内置的代码分割功能,减少初始加载时间。
- 组件懒加载:对非关键组件使用
dynamic import实现按需加载。 - 图片优化:
- 实现图片懒加载,提高页面加载速度。
- 配置图片压缩和 WebP 格式支持,减少带宽使用。
- 合理设置图片尺寸,避免过度下载。
- 静态资源优化:
- 使用 CDN 加速静态资源,提升全球访问速度。
- 配置浏览器缓存策略,减少重复请求。
- 字体图标替代图片图标,减少 HTTP 请求。
5.2.2 后端优化
- 数据库优化:
- 合理设计数据库索引,提高查询性能。
- 使用 Drizzle ORM 的批量操作,减少数据库请求次数。
- API 优化:
- 实现 API 缓存,减少重复计算。
- 合理设置 API 响应头,启用浏览器缓存。
- 存储优化:
- 图片通过阿里云 OSS CDN 加速,减少服务器带宽压力。
- 实现文件上传进度条,提升用户体验。
5.2.3 构建优化
- Next.js 优化:
- 关键页面采用静态生成 (SSG) 或增量静态再生 (ISR)。
- 配置
next.config.ts,启用压缩和优化。
- TypeScript 优化:
- 严格的类型检查,减少运行时错误。
- 使用
tsconfig.json配置,优化编译速度。
5.3 响应式适配
- 完美适配:支持 2K/4K 超大屏及移动端设备。
- 移动端优化:
- 优化移动端布局和交互,确保良好的触摸体验。
- 实现自适应字体大小,在不同设备上保持良好的可读性。
- 针对移动端设备,减少不必要的动画效果,提高性能。
- 断点设计:使用 Tailwind CSS 的响应式断点,实现多设备适配。
📅 六、开发进度追踪
6.1 核心功能开发状态
| 功能模块 | 开发状态 | 完成度 | 备注 |
|---|---|---|---|
| 前台展示 | ✅ 已完成 | 100% | 包含首页、文章详情、分类、标签、归档、友链、说说等页面 |
| 后台管理 | ✅ 已完成 | 100% | 包含仪表盘、文章管理、评论管理、用户管理、媒体库等功能 |
| 身份认证 | ✅ 已完成 | 100% | 包含登录、注册、权限控制等功能 |
| 媒体库 | ✅ 已完成 | 100% | 基于阿里云 OSS 的文件管理系统 |
| 评论系统 | ✅ 已完成 | 100% | 支持多级回复和评论审核 |
| 搜索功能 | ✅ 已完成 | 100% | 支持全站搜索 |
| 音乐播放器 | ✅ 已完成 | 100% | 基于 APlayer + MetingJS |
| 樱花动效 | ✅ 已完成 | 100% | 基于 Framer Motion |
6.2 技术实现状态
| 技术模块 | 实现状态 | 完成度 | 备注 |
|---|---|---|---|
| Next.js 16 | ✅ 已完成 | 100% | 使用 App Router 架构 |
| Tailwind CSS v4 | ✅ 已完成 | 100% | 配置全局样式和主题 |
| Shadcn UI | ✅ 已完成 | 100% | 集成基础 UI 组件 |
| Drizzle ORM | ✅ 已完成 | 100% | 数据库 schema 和迁移 |
| NextAuth.js | ✅ 已完成 | 100% | 身份认证和会话管理 |
| 阿里云 OSS | ✅ 已完成 | 100% | 文件存储和 CDN 加速 |
| TypeScript | ✅ 已完成 | 100% | 严格的类型检查 |
6.3 后续开发计划
- 性能优化:进一步优化页面加载速度和响应时间
- SEO 优化:完善网站 SEO 配置,提高搜索引擎排名
- 多语言支持:添加英文版本支持
- AI 辅助功能:集成 AI 内容生成和推荐功能
- 主题扩展:支持更多主题风格切换
- 插件系统:开发插件机制,支持功能扩展
6.4 部署与上线
- 测试环境:已搭建,用于功能测试和性能测试
- 生产环境:准备部署,配置 CDN 和 SSL 证书
- 监控系统:计划集成网站访问统计和错误监控
📄 七、项目文档
7.1 技术文档
- 系统需求与架构方案.md:本文档,详细描述系统架构和功能需求
- README.md:项目说明文档,包含快速开始指南和技术栈介绍
- 代码注释:详细的代码注释,提高代码可读性和可维护性
7.2 使用文档
- 管理后台使用指南:后台管理系统的使用说明
- Markdown 语法指南:文章编写的 Markdown 语法说明
- 音乐播放器配置指南:音乐播放器的配置和使用说明
7.3 贡献指南
- CONTRIBUTING.md:项目贡献指南,包含代码规范和提交规范
- ISSUE_TEMPLATE.md:Issue 提交模板
- PULL_REQUEST_TEMPLATE.md:Pull Request 提交模板
🤝 八、开源与社区
8.1 开源协议
- 本项目采用 MIT 许可证,详见 LICENSE 文件。
8.2 社区贡献
- 欢迎提交 Issue:报告 bug 或提出新功能建议
- 欢迎提交 Pull Request:改进代码或添加新功能
- 代码规范:遵循项目的代码规范和提交规范
- 文档完善:帮助完善项目文档和使用指南
8.3 联系方式
- GitHub Issues:提交问题和建议
- 邮件联系:项目维护者邮箱
- 社交媒体:项目相关的社交媒体账号
📞 九、联系与支持
如有问题或建议,请通过以下方式联系:
- 提交 Issue:在 GitHub 仓库提交问题
- 发送邮件:codewwang@163.com
- 社交媒体:关注项目相关的社交媒体账号
Vichi博客 - 用技术记录生活,用代码书写人生 🌸