当前位置:

推荐ChestnutCMS:前后端分离的内容管理系统,基于Spring Boot 3 + Vue 2技术栈,集成多种高级功能

  • 作者:
    gitasp
  • 日期:
    2025/01/15
  • 所属分类:
    开源推荐

<span style="text-wrap-mode: wrap;">ChestnutCMS是什么?</span>

ChestnutCMS是前后端分离的内容管理系统。技术栈:SpringBoot3 + VUE2 + MybatisPlus + Freemarker + ES + Redis + MySQL,项目基于RuoYi-Vue重构,集成SaToken用户权限,xxl-job任务调度。支持站群管理、多平台静态化、元数据模型扩展、轻松组织文章、音视频、图集等各种复杂内容形态、支持多语言、全文检索。

本地开发环境搭建

开发环境

JDK 17Mysql 8.0.32 (支持8.x+)Redis 7.2.4(支持5.x+)Maven 3.8.7(支持3.8+)Node 16.20.2(支持14+ - 16+)

基础环境请参考相关官方文档安装

下载代码

您可通过一下两种方式下载代码

前往 Gitee 下载页面https://gitee.com/liweiyi/ChestnutCMS下载解压到工作目录

前往 GitHub 下载页面https://github.com/liweiyi/ChestnutCMS下载解压到工作目录

后端运行

我们将项目代码下载到目录:E:/dev/workspace/ChestnutCMS,下面所有&nbsp;{ProjectDir}&nbsp;均指此目录。

导入 IDEA 项目

打开 IDEA 开发工具,在左上角菜单栏选择 File -&gt; Open,然后选择项目目录&nbsp;{ProjectDir}&nbsp;,然后点击 OK 按钮即可。

IDEA 会自动加载Maven依赖包,初次加载会比较慢(根据自身网络情况而定,您可以设置MAVEN的国内镜像仓库加快下载速度)

导入数据库(以MySQL为例)

数据库文件所在目录:{ProjectDir}/chestnut-admin/src/main/resources/db/migration/mysql

// 创建数据库create database `chestnut_cms` charset utf8mb4;

您可以通过一下两种方式初始化数据库

使用flyway初始化数据库

项目可以使用flyway管理数据库版本,默认关闭,在&nbsp;{ProjectDir}/chestnut-admin/src/main/resources/application-dev.yml&nbsp;设置&nbsp;spring.flyway.enabled = true&nbsp;开启flyway初始化数据库,开启flyway后启动应用即可由flyway自动初始化数据库,后续的版本更新的sql也会在重启应用时自动更新。

手动导入数据库

将&nbsp;{ProjectDir}/chestnut-admin/src/main/resources/db/migration/mysql&nbsp;目录下的所有sql文件按版本顺序依次导入,后续版本更新按版本顺序依次导入即可。

修改配置

打开配置文件:{ProjectDir}/chestnut-admin/src/main/resources/application-dev.yml

找到xxl.job.enable配置修改为false(需要安装XXL-JOB服务)

找到spring.data.redis.host配置,确保redis访问地址和端口与本地Redis环境配置一致,如果Redis没有设置访问密码,请注释掉或删掉spring.data.redis.password配置(注:修改为空字符串是不行的)

找到spring.datasource.dynamic.datasource.master配置,确保数据库访问地址和用户名密码与本地安装的MySQL配置一致

运行项目

打开文件:{ProjectDir}/chestnut-admin/src/main/java/com/chestnut/ChestnutApplication.java

右键选择&nbsp;Run &#39;ChestnutApplication.main()&#39;,当控制台显示如下图所示信息时系统启动成功。

<img data-cke-saved-src="https://www.1000mz.com/docs/dev/1.jpg" src="/data/upload/article/20250115/1736950760817662.jpg" alt="启动信息" width="993" height="333" align="" border="0"/>

前端运行

使用 VSCode 打开{ProjectDir}/chestnut-ui目录,打开命令行,执行以下命令:

# 进入项目目录cd {ProjectDir}/chestnut-ui# 安装依赖npm install# 建议不要直接使用 cnpm 安装依赖,会有各种诡异的 bug。可以通过如下操作解决 npm 下载速度慢的问题npm install --registry=https://registry.npmmirror.com# 启动服务npm run dev

浏览器访问&nbsp;http://localhost:80&nbsp;,默认账号:admin / admin

网站静态资源

网站静态资源默认路径是当前项目应用同级的wwwroot_release目录。例如:项目目录为E:/dev/workspace/ChestnutCMS,那么网站静态资源目录应为:D:/dev/workspace/wwwroot_release。

此路径可通过application-xx.yml文件修改, 配置chestnut.cms.resourceRoot,如下所示:

chestnut: cms: resourceRoot: E:/dev/workspace/wwwroot_release/

网站静态资源目录示例:(以演示站为例,演示站并没有swikoon_h5.此处仅示例目录结构)

# 应用目录ChestnutCMS |--chestnut-admin|--chestnut-cms|--chestnut-common|--......

# 网站静态资源目录wwwroot_rlease |--swikoon # 站点动态资源目录,一般用来保存用户上传的资源文件|----resources # 素材库资源目录,保存IResourceType实现相关类型文件,目前默认四种类型:图片、视频、音频、文件|------image # 图片素材目录|------video # 视频素材目录|------audio # 音频素材目录|------file # 其他文件素材目录|--swikoon_pc # 发布通道目录,pc为后台发布通道编码,固定格式:站点目录_发布通道编码|----img # 网站图片|----js # 网站js|----css # 网站css|----template # 网站模板固定目录|------index.template.html # 模板文件|--swikoon_h5 # 发布通道目录,h5为后台发布通道编码,固定格式:站点目录_发布通道编码|----img # 网站图片|----js # 网站js|----css # 网站css|----template # 网站模板固定目录|------index.template.html # 模板文件

导入站点主题包

主题包上传在QQ群共享,文件名&nbsp;企业演示站主题.zip。

后台新建站点(新建站点!!!主题包不能导入已存在数据的站点中!!!)

编辑站点页面点击&nbsp;导入主题&nbsp;按钮,上传群共享下载的主题包文件。

<span style="background-color: rgb(255, 255, 255); color: rgb(64, 72, 91); font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Helvetica, Arial, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Liberation Sans&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Hiragino Sans GB&quot;, &quot;Wenquanyi Micro Hei&quot;, &quot;WenQuanYi Zen Hei&quot;, &quot;ST Heiti&quot;, SimHei, SimSun, &quot;WenQuanYi Zen Hei Sharp&quot;, sans-serif; font-size: 1.25em;">开发环境</span>

OpenJDK 17

Maven 3.8+

MySQL 8.0+

Redis 5.x+

NodeJS 16.20.2

<span style="background-color: rgb(255, 255, 255); color: rgb(64, 72, 91); font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Helvetica, Arial, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Liberation Sans&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Hiragino Sans GB&quot;, &quot;Wenquanyi Micro Hei&quot;, &quot;WenQuanYi Zen Hei&quot;, &quot;ST Heiti&quot;, SimHei, SimSun, &quot;WenQuanYi Zen Hei Sharp&quot;, sans-serif; font-size: 1.25em;">主要技术框架</span>

技术框架版本应用说明
Spring Boot3.1.7基础开发框架
Spring Boot Admin3.1.7监控框架
Mybatis Plus3.5.5ORM框架
Flyway9.22.3数据库版本管理
Yitter1.0.6雪花ID
Redisson3.25.2分布式锁
FreeMarker2.3.32模板引擎
Sa-Token1.37.0权限认证
Xxl-Job2.4.0任务调度
Lombok1.18.26你懂的

<span style="background-color: rgb(255, 255, 255); color: rgb(64, 72, 91); font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Helvetica, Arial, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Liberation Sans&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Hiragino Sans GB&quot;, &quot;Wenquanyi Micro Hei&quot;, &quot;WenQuanYi Zen Hei&quot;, &quot;ST Heiti&quot;, SimHei, SimSun, &quot;WenQuanYi Zen Hei Sharp&quot;, sans-serif; font-size: 1.25em;"></span>

<span style="background-color: rgb(255, 255, 255); color: rgb(64, 72, 91); font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Helvetica, Arial, &quot;Apple Color Emoji&quot;, &quot;Segoe UI Emoji&quot;, &quot;Segoe UI Symbol&quot;, &quot;Liberation Sans&quot;, &quot;PingFang SC&quot;, &quot;Microsoft YaHei&quot;, &quot;Hiragino Sans GB&quot;, &quot;Wenquanyi Micro Hei&quot;, &quot;WenQuanYi Zen Hei&quot;, &quot;ST Heiti&quot;, SimHei, SimSun, &quot;WenQuanYi Zen Hei Sharp&quot;, sans-serif; font-size: 1.25em;">功能模块</span>

模块简介
站点管理多站点,支持图片水印、标题查重、扩展模型等扩展配置
栏目管理普通栏目+链接栏目,扩展配置优先级高于站点扩展配置
内容管理内容类型:文章+图片集+音视频集,页面部件:动态自定义区块+广告,内容回收站
资源管理图片、音视频等各类静态资源管理,支持OSS/COS/MinIO对象存储
发布通道支持多通道不同类型静态文件发布,可同时发布到PC、H5,html、json等
模板管理静态化模板,支持在线编辑
模板指令FreeMarker自定义标签、模板函数及动态模板的参数及用法说明
文件管理当前站点资源目录及发布通道静态化目录管理,支持文本在线编辑
扩展模型站点、栏目及内容的动态模型扩展,系统默认数据表保存,支持自定义
词汇管理热词、TAG词、敏感词、易错词
内容索引默认支持ElasticSearch+IK创建内容索引,支持标题内容全文检索
检索词库自定义检索词库,支持扩展词和停用词动态扩展
检索日志用户搜索的日志记录
友链管理友情链接
广告管理广告基于页面部件扩展的简单广告功能,支持权重及定时上下线,广告点击/展现统计
评论管理基础功能模块
调查问卷基础功能模块,默认支持文字类型单选、多选、输入、图片、富文本
自定义表单基于元数据模块扩展,支持模板标签
会员管理支持自定义会员等级,等级经验值来源动态配置
访问统计对接百度统计API
用户管理后台用户管理,支持用户独立权限配置
机构管理多级系统组织机构(公司、部门、小组)
角色管理支持按角色分配菜单权限、站点和栏目相关操作权限配置
岗位管理配置系统用户所属担任职务
菜单管理配置系统菜单,操作权限,按钮权限标识等
字典管理对系统中经常使用的一些固定的数据进行维护,代码层面定义
参数管理对系统动态配置常用参数,代码层面定义
通知公告系统通知公告信息发布维护
安全配置密码强度、密码过期、首次登陆强制修改、登陆异常策略配置
国际化为菜单等动态数据国际化配置提供基础支持,可覆盖后台代码配置
安全配置密码强度、密码过期、首次登陆强制修改、登陆异常策略配置
系统日志统一日志管理,支持扩展
操作日志系统操作日志扩展,记录操作参数、异常信息及请求耗时
登录日志系统登录日志扩展,记录用户登录日志,包含登录异常
在线用户当前系统中活跃用户状态监控,支持踢下线
任务调度基于XXL-JOB的分布式任务调度
定时任务基于Spring的TaskScheduler实现的单机定时任务
异步任务异步任务状态查看,支持手动结束
服务监控监视当前系统CPU、内存、磁盘、堆栈等相关信息
缓存监控对系统的缓存信息查询,命令统计等
GroovyScript支持Groovy脚本在线执行

前台演示图:

<img src="/data/upload/article/20250115/1736950593861194.png" title="1736950593861194.png" alt="QQ_1736950589056.png"/>

建站流程

创建站点

进入&nbsp;内容管理 &gt; 站点管理&nbsp;菜单,点击&nbsp;新建&nbsp;按钮,填写网站基础信息后点击&nbsp;确定&nbsp;按钮完成站点创建。

字段说明:

站点目录:站点文件保存目录,此目录基于chestnut.cms.resourceRoot配置目录创建。

例如:chestnut.cms.resourceRoot=D:/chestnut/wwwroot_release/,那么此站点创建时会创建目录:D:/chestnut/wwwroot_release/demo/

资源域名:此域名用来独立配置访问站点上传的资源文件(图片、视频等)。

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site1.png" src="/data/upload/article/20250115/1736950835812242.png" alt="输入图片说明" width="2560" height="1307" align="" border="0"/>

切换站点

右上角切换到我们新建的站点,双击我们刚才创建的演示站或选中点击确定切换站点

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site2.png" src="/data/upload/article/20250115/1736950835324734.png" alt="输入图片说明" width="2560" height="1307" align="" border="0"/>

创建发布通道

进入&nbsp;内容管理 &gt; 发布通道&nbsp;菜单,点击&nbsp;新建&nbsp;按钮,创建发布通道。(必须切换站点后创建)

说明:发布通道就是网站静态文件生成的目录,可以创建多个不同的发布通道来应对不同端展示效果的要求。比如PC桌面一套模板、移动手机端一套模板、移动平板电脑一套模板,也可以创建一套json格式的静态文件提供给原生APP端调用获取内容数据。

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site3.png" src="/data/upload/article/20250115/1736950835516538.png" alt="输入图片说明" width="2560" height="1307" align="" border="0"/>

发布通道目录结构

在创建发布通道时,系统会在&nbsp;chestnut.cms.resourceRoot&nbsp;配置的目录下创建站点发布通道目录,用来存放发布通道模板和相关静态资源文件,我们进入&nbsp;内容管理 &gt; 文件管理&nbsp;菜单,查看站点相关文件信息,如下图所示:

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site4.png" src="/data/upload/article/20250115/1736950836831825.png" alt="输入图片说明" width="2560" height="1307" align="" border="0"/>

目前站点相关有2个顶级目录:

demo是站点资源目录,这下面主要保存站点上上传的文件。

demo_pc就是我们创建的发布通道目录,在发布通道目录下已存在了一些系统默认创建的目录。

template&nbsp;目录是存放页面模板的固定目录,所有发布通道的页面模板都必须放在此目录下,创建发布通道时系统会在此目录下创建默认首页模板&nbsp;index.template.html;

include&nbsp;目录是存放模板生成的静态文件的固定目录;

其余目录没有硬性要求,一般我们把做好的静态页面文件放在html目录下,对应的js、css、图片文件放在对应目录下。

资源文件目录结构

我们尝试在&nbsp;内容管理 &gt; 资源管理&nbsp;菜单下上传一个图片。如下图:

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site5.png" src="/data/upload/article/20250115/1736950836100946.png" alt="输入图片说明" width="2560" height="1251" align="" border="0"/>

然后我们回到&nbsp;内容管理 &gt; 文件管理&nbsp;菜单查看一下文件目录结构,可以看到在&nbsp;demo&nbsp;目录下多出了&nbsp;resources/image/2023/07/16/&nbsp;目录,这个目录下就是我们刚才上传的图片。

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site6.png" src="/data/upload/article/20250115/1736950836394986.png" alt="输入图片说明" width="2560" height="1251" align="" border="0"/>

设置站点发布通道属性

配置访问域名

进入&nbsp;内容管理 &gt; 站点管理&nbsp;菜单,编辑我们刚才创建的演示站,可以看到在发布通道属性配置部分显示了&nbsp;PC桌面&nbsp;的配置信息,我们给发布通道设置一个URL,这个就是发布通道的访问域名(模板中通过&nbsp;${Prefix}&nbsp;获取)。

参数说明:

URL:发布通道对应的访问域名

静态文件类型:发布通道中内容/栏目/站点生成的静态文件后缀名,默认:shtml

首页模板:发布通道对应的首页模板,首页会根据此模板生成对应的静态页面在发布通道目录下。默认:index.template.html

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site7.png" src="/data/upload/article/20250115/1736950837647708.png" alt="输入图片说明" width="2560" height="1307" align="" border="0"/>

预览站点

设置好发布通道的域名URL后,点击&nbsp;保存&nbsp;按钮保存站点信息。然后点击&nbsp;预览&nbsp;按钮查看站点预览效果。

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site8.png" src="/data/upload/article/20250115/1736950837531315.png" alt="输入图片说明" width="1374" height="391" align="" border="0"/>

发布站点

本地测试域名映射

由于我们是本地测试,未解析域名,我们将站点发布通道的域名在hosts文件中配置一下映射关系,方便我们本地调试。 以windows系统为例,打开文件&nbsp;C:\Windows\System32\drivers\etc\hosts,添加下图所示红框部分: 其中&nbsp;www.demo.com&nbsp;是 PC桌面 发布通道的访问域名,static.demo.com 是站点资源文件访问域名。

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site9.png" src="/data/upload/article/20250115/1736950837892345.png" alt="输入图片说明" width="699" height="593" align="" border="0"/>

配置完成后,我们打开cms命令窗口,ping一下&nbsp;www.demo.com&nbsp;和 static.demo.com,可以看到 ping 的地址已经是 127.0.0.1.

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site10.png" src="/data/upload/article/20250115/1736950837594133.png" alt="输入图片说明" width="993" height="519" align="" border="0"/>

配置 nginx

nginx安装请参考官方文档。nginx.conf配置文件添加如下Server配置,修改完成后重启nginx。

server { listen 80; server_name www.demo.com; # PC站配置www.demo.com域名访问demo_pc目录 location / { ssi on; ssi_silent_errors on; ssi_types text/shtml; root D:/dev/wwwroot_release/demo_pc; index index.shtml index.html index.htm; } location ~ ^/(images|img|fonts|assets|js|css)/ { root D:/dev/wwwroot_release/demo_pc; expires 1d; } } server { listen 80; server_name static.swikoon.com; # 后台上传的资源文件访问统一代理到demo目录 location ~ ^/(resources)/ { root D:/dev/wwwroot_release/demo; expires 1d; } }

发布站点

在站点编辑页面点击&nbsp;发布首页&nbsp;按钮,提示发布成功后,我们到文件管理菜单查看发布通道目录,可以看到在发布通道目录&nbsp;demo_pc&nbsp;下已经生成了首页静态文件&nbsp;index.shtml

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site11.png" src="/data/upload/article/20250115/1736950838545386.png" alt="输入图片说明" width="2560" height="1251" align="" border="0"/>

浏览站点首页

发布完成后,我们打开浏览器,访问&nbsp;http://www.demo.com/

<img data-cke-saved-src="https://www.1000mz.com/docs/guide/site12.png" src="/data/upload/article/20250115/1736950838404041.png" alt="输入图片说明" width="1161" height="203" align="" border="0"/>

系统预览

后台预览地址:http://admin.1000mz.com

账号:demo / a123456

企业站演示地址:http://swikoon.1000mz.com

资讯站演示地址:http://news.1000mz.com(会员演示账号:xxx333@126.com / a123456)

图片站演示地址:PC端:http://tpz.1000mz.com&nbsp;移动端:http://mtpz.1000mz.com

游戏站演示地址:PC端:http://game.1000mz.com&nbsp;移动端:http://mgame.1000mz.com

影视站演示地址:PC端:http://movie.1000mz.com&nbsp;移动端:http://movie.1000mz.com

码云地址:https://gitee.com/liweiyi/ChestnutCMS

官网地址:https://www.1000mz.com

源码下载月排行
软件下载月排行
文章浏览月排行