博客技术栈与框架介绍
博客技术栈与框架介绍
小葱博客技术栈与框架介绍
欢迎来到 葱葱小窝!本站不是「纯静态页 + 第三方评论云函数」的简单组合,而是 Hexo 静态前端 + 自研 Java 后端 前后端分离架构。本文按当前线上实际实现,介绍各层技术与它们如何协作。
整体架构一览
┌─────────────────────────────────────────────────────────────┐ |
日常发布流程:
- 在
source/_posts/用 Markdown 写文章 - 执行
hexo clean && hexo generate生成public/静态资源 - 将静态资源部署到服务器 / OSS / CDN
- 评论、友链、悄悄话等动态能力由 自研后端 实时提供(前端通过
waline.serverURL指向 API 服务)
一、静态站点:Hexo
Hexo 负责把 Markdown 文章编译为静态页面,是本博客的内容引擎。
为什么选择 Hexo?
- ⚡ 生成快:本地一键
hexo g,适合个人博客体量 - 📝 Markdown 写作:正文与元数据分离,维护成本低
- 🎨 主题生态成熟:本站在 AnZhiYu 主题上做了定制
- 🔌 插件扩展:标签、摘要、部署等均可插件化
常用命令
hexo new "文章标题" # 新建文章 |
博客静态源码与 Java 后端在同一仓库中维护,便于本地联调。
二、前端展示:AnZhiYu 主题
主题:AnZhiYu(安知鱼),配置文件为 _config.anzhiyu.yml。
主题层技术
| 技术 | 用途 |
|---|---|
| Pug | 页面模板,生成 HTML 结构 |
| Stylus | 样式预处理,变量与模块化 CSS |
| JavaScript | 懒加载、PJAX、侧边栏、控制台等交互 |
本站已启用的代表性功能
| 功能 | 说明 |
|---|---|
| 💬 Waline 评论区 | 对接自研后端,非 Twikoo / LeanCloud |
| 📋 侧边栏最新评论 | 调用 /api/comment?type=recent,展示最近留言 |
| 🤖 文章 AI 摘要 | 标题区打字机摘要(主题内置) |
| 🌓 深色模式 | 一键切换亮/暗色 |
| 🎵 音乐 / 即刻 / 相册 | 按主题配置按需开启 |
| ⌨️ 快捷键与右键菜单 | 提升阅读与操作效率 |
主题魔改包括:侧边栏「最新评论」卡片、作者卡悬停文案、评论相关样式等,模板位于 themes/anzhiyu/layout/。
三、动态后端(Spring Boot)
自研 Java 后端 是本博客的能力中枢,技术选型如下:
| 类别 | 技术 | 版本/说明 |
|---|---|---|
| 语言 / 运行时 | Java | 17 |
| 框架 | Spring Boot | 3.2.x |
| ORM | MyBatis | 3.0.x |
| 数据库 | MySQL | 评论、友链等业务数据 |
| 缓存 | Redis | 评论列表、计数、最近评论 等 |
| 对象存储 | 阿里云 OSS | 评论图片、博客静态资源 |
| 邮件 | Spring Mail | 回复通知、悄悄话、友链审核 |
| 文档 | SpringDoc OpenAPI | /swagger-ui.html 接口调试 |
3.1 评论系统(Waline 兼容)
前端 comments.use: Waline,waline.serverURL 指向自研 API 服务,无需单独部署 Waline 官方服务端。
主要接口(节选):
| 接口 | 说明 |
|---|---|
GET /api/comment |
按 path 分页拉取评论树 |
GET /api/comment?type=recent&count=N |
最近评论(侧边栏、控制台) |
GET /api/comment?type=count |
评论数统计 |
POST /api/comment |
发表评论 |
PUT /api/comment/{objectId} |
点赞等更新 |
POST /api/upload |
评论图片批量上传至 OSS |
缓存策略(最近评论为例):
- 先查 Redis(
comment:recent:{count}) - 未命中再查 MySQL,结果写回 Redis
- 发表/点赞评论时失效相关缓存,保证数据一致
自研能力还包括:评论 Markdown 渲染、QQ 邮箱自动头像、IP 归属地展示、评论禁言、回复邮件通知等。
3.2 友链申请
| 接口 | 说明 |
|---|---|
GET /api/flink/ping |
检测站点是否可达 |
POST /api/flink/email/send-code |
邮箱验证码 |
POST /api/flink/email/verify |
校验邮箱 |
POST /api/flink/apply |
提交友链,写入 link.yml 并邮件通知 |
3.3 留言板悄悄话
通过 POST /api/guestbook/mail 将留言内容邮件发送给博主(与公开评论区独立)。
3.4 其他 API
GET /api/qq/info:根据 QQ 号解析昵称与头像(评论框快捷填写)GET /api/article:Waline 兼容的阅读数(按需)POST /api/comment/cache/refresh:清理评论 Redis 缓存(运维)
跨域已配置 blog.mosicong.top 及本地开发域名,便于静态站与 API 分离部署。
四、前端核心库(主题内置)
与 AnZhiYu 主题一同打包的前端依赖,负责阅读体验:
- Lozad:图片懒加载
- Fancybox:图片灯箱
- Swiper:首页轮播
- Prism.js:代码高亮
- PJAX:无刷新切页
- @waline/client:评论 UI(对接自研 API)
五、内容与资源
Markdown + Front-matter
|
支持代码块、表格、任务列表、公式(KaTeX)等标准 Markdown 扩展。
阿里云 OSS
- 文章封面、图床、评论上传图片 均走 OSS(广州节点 + CDN)
- 减轻源站带宽压力,全国访问更稳定
六、部署与联调建议
| 环境 | 静态前端 | 后端 API |
|---|---|---|
| 本地开发 | hexo server 本地预览 |
本地启动 Java 后端服务 |
| 生产 | 静态资源 + CDN | 独立 API 域名,或 Nginx 反代到同域 /api |
生产环境请将 _config.anzhiyu.yml 中 waline.serverURL 配置为可公网访问的 API 根地址(推荐与博客同域,由网关将 /api 转发至后端,避免跨域与混合内容问题)。
本地联调最小清单:
- 启动 MySQL、Redis
- 启动 Java 后端服务
hexo g后预览静态站- 打开文章页与首页,确认评论区、侧边栏「最新评论」正常
七、其他服务
| 服务 | 用途 |
|---|---|
| 51la(可选) | 站点访问统计 |
| QQ SMTP | 邮件通知通道 |
| uapis.cn 等 | QQ 资料、友链 Ping 检测等辅助接口 |
结语
葱葱小窝从「漂亮主题 + 静态页」演进为 静态内容 + 自研 API 的完整方案:Hexo 保证写作与发布效率,Spring Boot 承接评论与互动,Redis 与 MySQL 兼顾性能与可靠,OSS 统一托管媒体资源。
后续若继续迭代,可能会在现有架构上扩展搜索、统计看板或更多互动模块,但分层思路会保持不变:能静态化的尽量静态化,必须动态的交给自研后端。
致谢
感谢 安知鱼 开源的 Hexo 主题,让静态层拥有极佳的阅读体验;Waline 客户端协议则为自研后端提供了清晰的前端对接标准。
相关链接
