# my-cms **Repository Path**: Chg_Sloly/my-cms ## Basic Information - **Project Name**: my-cms - **Description**: 🚀 全栈 CMS 内容管理系统 | Spring Boot 3 + Vue 3 | AI 写作助手 + RAG 知识库问答 + Elasticsearch 全文搜索 | Docker 一键部署 - **Primary Language**: Java - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-27 - **Last Updated**: 2026-06-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: SpringBoot, Vue, CMS, ElasticSearch, AI ## README # 源点 CMS 🚀 > 从写作到发布,从搜索到 AI 问答——一个全栈 CMS 能做的全部事。

Java 21 Spring Boot 3.5 Vue 3 MySQL 8 Redis 7 ES 7.17 Milvus 3 RabbitMQ 3 Docker MIT

--- ## ✨ 技术亮点 ### 🧠 AI 自然语言操作 CMS(Function Calling) 自研可插拔 **Tool Registry**,注册 10 种 CMS 工具(查文章、搜评论、列分类、统计标签等)。用户用自然语言提问,AI 自动选择合适的工具执行,返回结构化结果。强 Prompt 约束 + 参数校验防止幻觉,SSE 流式输出打字机效果。 ``` 用户:"最近有什么热门文章?" → AI 自动调用 tool_getHotArticles() → 返回 Top 10 列表 用户:"帮我找关于 Spring Boot 的文章" → AI 自动调用 tool_searchArticles("Spring Boot") → 返回搜索结果 ``` ### 📚 RAG 知识库问答(Milvus 向量检索) 文章内容 → DashScope Embedding 文本向量化 → Milvus HNSW 索引。读者提问时,余弦相似度检索最相关的 Top-K 文章片段,拼接为上下文注入 Prompt,由通义千问生成准确回答。**答案可溯源到原文**,不是凭空编造。 ### 🔍 全文搜索(Elasticsearch + IK 中文分词) Docker 部署 ES 7.17 + IK 分词器,支持拼音匹配、模糊搜索、权重排序。**优先走 ES,失败自动降级 MySQL LIKE**,保证搜索永远可用。 ### 🏗️ 全栈 Docker Compose 一键部署 MySQL + Redis + Elasticsearch + Milvus + RabbitMQ + Spring Boot 后端 + Vue 前端,**7 个容器一条命令启动**。开发/生产环境配置分离,环境变量统一管理。 --- ## 🏗️ 架构 ```mermaid graph LR subgraph 前端 A[cms-web
用户端 :5174] B[cms-frontend
管理端 :5173] end subgraph 后端 C[cms-admin
Spring Boot 3
:8888] end subgraph 数据层 D[(MySQL 8.0
:3306)] E[(Redis 7
缓存)] F[(Elasticsearch 7.17
全文搜索)] G[(Milvus 3.0
向量检索)] H[RabbitMQ 3
异步消息] end subgraph 外部服务 I[阿里云 OSS
文件存储] J[通义千问 DashScope
AI 能力] end A -->|REST /api| C B -->|REST /api| C C --> D C --> E C --> F C --> G C --> H C --> I C --> J ``` --- ## 📦 技术栈 | 层 | 技术 | 说明 | |------|------|------| | 后端框架 | Spring Boot 3.5.15 + Java 21 | MyBatis-Plus 3.5 + JWT + Spring Security | | AI | Spring AI Alibaba 1.1.2 + 通义千问 qwen-plus | Chat + Function Calling + Embedding + 情感分析 | | 搜索引擎 | Elasticsearch 7.17(IK 分词) | 优先 ES,失败回退 MySQL LIKE | | 向量数据库 | Milvus 3.0(HNSW 索引) | 语义检索 + 文章相似推荐 | | 消息队列 | RabbitMQ 3 | 异步通知 + 邮件发送 | | 限流 | Bucket4j | 令牌桶算法,基于 IP 的 `@RateLimit` 注解 | | API 文档 | SpringDoc OpenAPI 2.8 | Swagger UI 自动生成 | | 验证码 | Easy-Captcha | 登录/注册图形验证码 | | 存储 | 阿里云 OSS | 图片/封面/附件上传 | | 前端 | Vue 3 + Vite + Element Plus | 用户端(5174)+ 管理端(5173)双项目 | | 状态管理 | Pinia 3 | 用户态/AI 对话/暗色模式 | | Markdown | md-editor-v3 + marked | 双模式编辑器 + 渲染 | | WebSocket | STOMP + SockJS | 实时推送通知 Toast | | 数据库 | MySQL 8.0 + Redis 7 | Docker 化部署 | | 部署 | Docker Compose | 七容器一键编排 | --- ## 📸 界面预览
🤖 AI 助手对话
AI 助手
📝 Markdown 写作 + AI 面板
写作
📖 文章详情 + AI 阅读助手
文章详情
🏠 首页文章列表
首页
📊 管理端仪表盘
仪表盘
🛡️ AI 内容审核
AI 审核
--- ## 🎯 功能清单 ### 🤖 AI 智能 | 功能 | 说明 | |------|------| | **AI 助手对话** | 浮动对话按钮,10 种工具自然语言操作 CMS(查文章/评论/分类/标签/系列/搜索),SSE 流式输出 | | **AI 写作工作台** | 6 合 1:标题建议 / 润色 / 扩写 / 缩写 / 语气调整 / 智能续写 | | **AI 阅读助手** | 选中文字 → 解释术语 / 总结要点,文章详情页侧边面板 | | **AI 代码解释** | 技术文章中代码块旁一键解释 | | **AI 摘要生成** | 发布文章异步生成摘要,列表页优先展示 AI 摘要 | | **AI 内容审核** | 文章/评论提交异步风险审核,管理端 LOW/MEDIUM/HIGH 标签 | | **AI 情感分析** | 评论自动打正面/负面/中性标签,辅助审核排序 | | **AI 智能标签** | 发布文章 AI 分析内容自动推荐标签 | | **AI 文章大纲** | 输入主题 → 一键生成结构化大纲 | | **RAG 知识库问答** | 基于全站文章的 AI 问答(Milvus 向量检索 + 通义千问生成) | | **AI 相关推荐** | 向量语义相似度计算,文章底部智能推荐卡片 | | **对话持久化** | 刷新页面不丢记录(localStorage) | ### ✍️ 写作与发布 - **富文本 + Markdown 双模式编辑器**(Quill + md-editor-v3) - **Markdown 图片粘贴上传**(截图 Ctrl+V → 自动上传 OSS → 插入 `![](url)`) - **文章草稿自动保存**(30s 定时 + 离开页面提醒) - **文章定时发布**(设未来时间,`@Scheduled` 30s 扫描自动发布) - **文章版本历史**(每次保存自动快照,时间线预览 + 一键回滚) ### 👥 社区互动 - **评论系统**(一级评论 + 回复,支持 AI 回复按钮) - **关注系统**(关注作者,新文章通知) - **收藏 + 点赞** - **内容举报**(用户端举报 + 管理端处理) - **WebSocket 实时通知**(点赞/评论/关注即时弹 Toast) - **邮件通知**(RabbitMQ 异步 + HTML 邮件模板,QQ 邮箱) - **阅读历史**(浏览自动记录 + 首页最近阅读 + 个人中心历史 Tab) ### 📰 内容组织 - **多级分类 + 标签系统** - **文章系列/专栏**(创建系列 → 添加文章 → 详情页目录导航) - **全文搜索**(ES IK 分词,拼音 + 模糊 + 权重排序) - **SEO 优化**(动态 title + meta description + Open Graph + sitemap.xml) ### 🛡️ 安全与体验 - **暗色模式**(CSS 变量全站切换) - **验证码**(登录 + 注册 Easy-Captcha) - **接口限流**(8 个 Controller 全覆盖:登录/注册/验证码/评论/举报/关注/文章/AI,基于 IP 令牌桶算法) - **XSS 防护 + JWT 认证 + 角色权限** ### 📊 管理端 文章管理 / 评论审核(AI 风险 + 情感标签)/ 用户管理 / 分类 / 标签 / 系列 / 菜单 / 角色 / 日志 / 公告 / 页面 / 附件 / 通知 / 举报处理 / 仪表盘 / 统计 / 内容分析 / Swagger API 文档 --- ## 🚀 一键启动 ```bash # 1. 克隆 git clone https://gitee.com/Chg_Sloly/my-cms.git cd my-cms # 2. 配置环境变量 cp .env.example .env # 编辑 .env,填入你的 API Key 等信息 # 3. 启动全部服务 docker compose up -d ``` | 服务 | 地址 | |------|------| | 用户端 | http://localhost:5174 | | 管理端 | http://localhost:5173 | | 后端 API | http://localhost:8888 | | Swagger 文档 | http://localhost:8888/swagger-ui.html | | RabbitMQ 管理 | http://localhost:15673 | | Milvus Attu | http://localhost:8000 | ### 首次部署后初始化 ```bash # RAG 知识库索引(把已有文章写入 Milvus) curl http://localhost:8888/public/ai/reindex # ES 搜索索引 curl http://localhost:8888/public/articles/reindex-es ``` ### 本地开发 ```bash # 只启动依赖服务 docker compose up -d mysql redis rabbitmq milvus elasticsearch # IDEA 中 Run CmsAdminApplication # 前端 cd cms-frontend && npm run dev # 管理端 :5173 cd cms-web && npm run dev # 用户端 :5174 ``` --- ## 🔧 环境变量 | 变量 | 说明 | 必填 | |------|------|------| | `Mysql_Password` | MySQL root 密码 | ✅ | | `JWT_SECRET` | JWT 签名密钥(至少 32 字符) | ✅ | | `RabbitMQ_Username` | RabbitMQ 用户名(默认 guest) | ✅ | | `RabbitMQ_Password` | RabbitMQ 密码(默认 guest) | ✅ | | `DASHSCOPE_API_KEY` | 阿里云百炼 API Key(通义千问) | ✅ | | `ALIYUN_OSS_ACCESS_KEY_ID` | 阿里云 OSS AccessKey ID | 如需上传 | | `ALIYUN_OSS_ACCESS_KEY_SECRET` | 阿里云 OSS AccessKey Secret | 如需上传 | | `Mail_send_Username` | QQ 邮箱地址(发验证码/通知) | 如需邮件 | | `Mail_send_Password` | QQ 邮箱 SMTP 授权码 | 如需邮件 | | `MILVUS_HOST` | Milvus 向量数据库地址(默认 localhost) | 可选 | | `MILVUS_PORT` | Milvus 端口(默认 19530) | 可选 | | `ES_HOST` | Elasticsearch 地址(默认 localhost) | 可选 | | `ES_PORT` | Elasticsearch 端口(默认 9200) | 可选 | > 复制 `.env.example` 为 `.env`,填入真实值即可。`.env` 已在 `.gitignore` 中,不会提交。 --- ## 📁 项目结构 ``` my-cms/ ├── cms-admin/ # Spring Boot 3 后端(唯一后端,port 8888) │ ├── pom.xml # Maven 依赖定义 │ ├── Dockerfile # 后端 Docker 镜像 │ └── src/main/java/org/example/cmsadmin/ │ ├── common/ │ │ ├── annotation/ # 自定义注解(@RateLimit 等) │ │ ├── aspect/ # AOP 切面(限流/日志) │ │ ├── config/ # Spring 配置类 │ │ ├── exception/ # 全局异常处理 │ │ ├── handler/ # 处理器 │ │ ├── interceptor/ # 拦截器 │ │ ├── result/ # 统一响应 Result 封装 │ │ └── utils/ # 工具类 │ ├── modules/ │ │ ├── ai/ # AI 服务(写作/审核/摘要/RAG/Tool Registry) │ │ ├── api/ # 公开 API Controller(用户端接口,/public/*) │ │ ├── article/ # 文章模块 │ │ ├── comment/ # 评论模块 │ │ ├── user/ # 用户模块 │ │ ├── series/ # 文章系列/专栏 │ │ ├── tag/ # 标签模块 │ │ ├── category/ # 分类模块 │ │ ├── follow/ # 关注模块 │ │ ├── notification/ # 通知模块 │ │ ├── report/ # 举报模块 │ │ ├── statistics/ # 统计模块 │ │ ├── dashboard/ # 仪表盘 │ │ ├── auth/ # 认证授权 │ │ ├── log/ # 操作日志 │ │ ├── menu/ # 菜单管理 │ │ ├── role/ # 角色权限 │ │ ├── attachment/ # 附件管理 │ │ └── ... # 公告/页面/部门/审计等模块 │ └── resources/ │ ├── sqldate/ # DDL 权威来源(sqldate.md) │ ├── application-dev.yml # 本地开发配置 │ └── application-docker.yml # Docker 环境配置 ├── cms-frontend/ # Vue 3 管理端(port 5173) │ └── src/ │ ├── api/ # API 请求封装 │ ├── components/ # 公共组件 │ ├── views/ # 页面(仪表盘/文章管理/评论审核…) │ ├── router/ # 路由配置 │ ├── stores/ # Pinia 状态管理 │ └── utils/ # 工具函数 ├── cms-web/ # Vue 3 用户端(port 5174) │ └── src/ │ ├── api/ # API 请求封装 │ ├── components/ # 公共组件(Layout/AiAssistant…) │ ├── composables/ # 组合式函数(useDarkMode/useWebSocket…) │ ├── views/ # 页面(首页/文章/写作/搜索/个人中心…) │ ├── router/ # 路由配置 │ ├── stores/ # Pinia 状态管理 │ └── assets/ # 静态资源 ├── docs/ │ └── screenshots/ # 界面截图 ├── docker-compose.yml # 全栈编排(7 容器) ├── milvus-compose.yml # Milvus 独立部署备用 ├── Dockerfile.es # ES + IK 分词镜像 ├── init.sql # Docker 初始化 DDL ├── .env.example # 环境变量模板 ├── CLAUDE.md # 项目开发规范(AI 辅助开发用) ├── CONTRIBUTING.md # 贡献指南 ├── EXTENSION_PLAN.md # 项目扩展计划 └── LICENSE # MIT 开源协议 ``` --- ## 🤝 参与贡献 欢迎提 Issue 和 PR!详见 [CONTRIBUTING.md](./CONTRIBUTING.md) --- ## 📄 许可证 [MIT](./LICENSE) © 2026 Chg_Sloly