Dream Blog是一个基于 Rust (actix-web) + Vue 的前后端分离博客系统,自用博客,长期维护中。
本项目是从原 Java 版本的 Nblog 移植而来的 Rust 实现版本,旨在学习和实践 Rust 开发 Web 应用。
项目状态:开发阶段
- 核心框架:actix-web - 高性能的 Rust Web 框架
- ORM 框架:sea-orm - 异步 ORM 框架
- 数据库:MySQL
- NoSQL 缓存:Redis
- 认证与授权:actix-jwt-session
- Markdown 解析:comrak - CommonMark 规范解析器
- 日志系统:tracing + tracing-subscriber(stdout + 滚动文件,可用
RUST_LOG环境变量控制级别与模块过滤) - 序列化/反序列化:serde, serde_json
- UserAgent 解析:user-agent-parser
核心框架:Vue 3.x、Vue Router、Vuex、Vite
前端项目基于 Vite 构建(blog-cms、blog-view 分别为 vite.config.js / vite.config.mjs)
JS 依赖及参考的 css:axios、dayjs、nprogress、v-viewer、prismjs、APlayer、MetingJS、lodash、md-editor-v3、echarts、tocbot、iCSS
后台写文章、写动态、关于页和友链页的 Markdown 编辑器使用 md-editor-v3,对应依赖位于 blog-cms/package.json,并在 blog-cms/src/main.js 中引入编辑器样式。
当前未使用 mavonEditor。mavonEditor 更偏 Vue 2 生态,老项目迁移成本低;本项目后台基于 Vue 3 + Vite,md-editor-v3 对 Vue 3 支持更直接,组件按需引入更清晰,也更适合当前的前端构建方式。
编辑器能力主要用于 Markdown 写作、预览、图片上传和内容回显。后端会统一处理 Markdown 渲染、安全 HTML 过滤、文章描述兜底提取和 SEO 元信息生成,避免编辑器与前台展示逻辑强耦合。
后台基于 vue-admin-template 二次修改后的 my-vue-admin-template 模板进行开发
UI 框架为 Element Plus
Semantic UI:主要使用,页面布局样式,适合前台界面的开发,语义化的 CSS
Element Plus:部分使用,一些小组件,弥补了 Semantic UI 的不足
文章排版:基于 typo.css 修改
git clone项目- 创建 MySQL 数据库
blog_api,并执行sql文件初始化表数据 - 安装 Redis 并启动
- 修改后端配置文件
blog-api/config/app_config.yaml(推荐:复制blog-api/config/app_config.local.yaml.example为blog-api/config/app_config.local.yaml填入本地私密信息)确认 MySQL、Redis 等配置 - (可选)日志级别过滤:设置
RUST_LOG环境变量(如RUST_LOG=info,blog_api=debug),日志默认输出到 stdout 与logs/blog-api.log(按天滚动) cargo run启动后端服务- 分别在
blog-cms和blog-view目录下执行npm install安装依赖 - 分别在
blog-cms和blog-view目录下执行npm run serve启动前后台页面 - (可选)后台“定时任务”中开启
local / stats.aggregate_visit,用于定期聚合 PV/UV 与城市访客统计
前台 blog-view 构建后会输出带 hash 的静态资源。Nginx 可参考 blog-view/deploy/nginx-cache.conf 配置缓存策略:/assets 使用长期 immutable 缓存,index.html 不缓存,普通图片、字体和脚本资源使用较长缓存。
部署时需要确保后端接口、前台站点地址、GitHub/又拍云/腾讯云图床配置、Redis、MySQL 等配置项已按实际环境填写。私密配置建议写入 blog-api/config/app_config.local.yaml,不要提交真实密钥。
标识说明:[x] 已完成,[~] 持续优化中,[ ] 未开发或待补齐。
- 后端基础能力
- Actix Web HTTP 服务与统一响应结构
- SeaORM 数据库连接、实体模型与业务服务分层
- MySQL 数据持久化
- Redis 缓存接入
- JWT / httpOnly Cookie 登录认证
- 博主身份评论、密码保护文章访问控制
- Markdown 渲染、安全 HTML 过滤与文章描述兜底提取
- 统一错误处理、访问日志、操作日志、异常日志、登录日志
- 定时任务与访问统计聚合
- Sitemap 与 SEO 基础元信息
- 前台页面
blog-view- 首页、文章详情、分类、标签、归档、动态、友链、关于页
- 评论列表、评论提交、表情渲染、评论回复
- 文章目录、代码高亮、图片懒加载、图片预览
- 私密文章密码弹窗
- APlayer / MetingJS 音乐播放器按需加载
- SEO 标题、描述、关键词、Open Graph 信息更新
- 前台首屏资源按需加载、Element Plus 分包、静态资源缓存配置
- 后台页面
blog-cms- 登录、Dashboard
- 文章发布、编辑、列表管理
- 动态发布、编辑、列表管理
- 分类、标签、评论管理
- 站点设置、友链管理、关于页管理
- GitHub、又拍云、腾讯云图床配置与文件管理
- 账户修改、定时任务、任务日志
- 登录日志、操作日志、异常日志、访问日志
- 访客统计
- [~] 缓存策略:Redis 缓存已接入,缓存 Key、过期策略和主动失效策略持续整理中
- [~] 前端性能:首屏资源、Semantic UI 样式体积、Element Plus 分包、首页头图加载策略持续优化
- [~] 图床管理:GitHub 目录展示、空目录提示、错误诊断已优化,后续继续增强交互体验
- [~] 日志体系:stdout、滚动文件、请求链路信息已接入,后续可继续补充结构化检索与告警
- 插件化主题配置
- 多用户与细粒度 RBAC 权限
- 文章全文搜索引擎接入
- 评论审核工作流与垃圾评论拦截
- 后台批量导入/导出文章
- 自动化端到端测试与性能基准报告
- 更完整的部署脚本、Docker Compose 和 CI/CD 流程
- 在前台访问
/login路径登录后,可以以博主身份(带有博主标识)回复评论,且不需要填写昵称和邮箱即可提交 - 在 Markdown 中加入
<meting-js server="netease" type="song" id="歌曲id" theme="#25CCF7"></meting-js>(注意以正文形式添加,而不是代码片段)可以在文章中添加 APlayer 音乐播放器,netease为网易云音乐,其它配置及具体用法参考 MetingJS - 提供了两种隐藏文字效果:在 Markdown 中使用
@@包住文字,文字会被渲染成"黑幕"效果,鼠标悬浮在上面时才会显示;使用%%包住文字,文字会被"蓝色覆盖层"遮盖,只有鼠标选中状态才会反色显示。例如:@@隐藏文字@@,%%隐藏文字%%
感谢 Nblog 项目中的前端页面
感谢 grtblog 项目的UI参考
感谢 JetBrains 提供的 Open Source License
感谢上面提到的每个开源项目