当前位置: 首页> 开源推荐> 正文

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

ChestnutCMS是什么?

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,下面所有 {ProjectDir} 均指此目录。

导入 IDEA 项目

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

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

导入数据库(以MySQL为例)

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

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

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

使用flyway初始化数据库

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

手动导入数据库

将 {ProjectDir}/chestnut-admin/src/main/resources/db/migration/mysql 目录下的所有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

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

启动信息

前端运行

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

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

浏览器访问 http://localhost:80 ,默认账号: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群共享,文件名 企业演示站主题.zip。

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

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

开发环境

OpenJDK 17

Maven 3.8+

MySQL 8.0+

Redis 5.x+

NodeJS 16.20.2

主要技术框架

技术框架版本应用说明
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你懂的

功能模块

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

前台演示图:

QQ_1736950589056.png

建站流程

创建站点

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

字段说明:

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

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

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

输入图片说明

切换站点

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

输入图片说明

创建发布通道

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

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

输入图片说明

发布通道目录结构

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

输入图片说明

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

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

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

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

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

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

资源文件目录结构

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

输入图片说明

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

输入图片说明

设置站点发布通道属性

配置访问域名

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

参数说明:

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

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

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

输入图片说明

预览站点

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

输入图片说明

发布站点

本地测试域名映射

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

输入图片说明

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

输入图片说明

配置 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; } }

发布站点

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

输入图片说明

浏览站点首页

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

输入图片说明

系统预览

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

账号:demo / a123456

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

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

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

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

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

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

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

最新文章