从零打造一款轻量且天然支持SSR的CMS系统——simpleCMS

简介: 2年前笔者开发了一款基于 nodejs 的全栈开源 cms 系统 XPCMS, 主要是为了解决技术开发者搭建自身内容平台的局限以及降低使用成本, 虽然1.0版本已经完成, 但是从整体部署和二次开发的便捷度上还是存在很多缺点, 更加适合有一定技术能力的开发者来使用.为了解决 XPCMS 的不足, 去年笔者和朋友特地开发了一款轻量便捷的内容管理系统——simpleCMS, 目前已在 github 上开源, 且能同时适配PC端和移动端.

网络异常,图片无法展示
|


2年前笔者开发了一款基于 nodejs 的全栈开源 cms 系统 XPCMS, 主要是为了解决技术开发者搭建自身内容平台的局限以及降低使用成本, 虽然1.0版本已经完成, 但是从整体部署和二次开发的便捷度上还是存在很多缺点, 更加适合有一定技术能力的开发者来使用.

为了解决 XPCMS 的不足, 去年笔者和朋友特地开发了一款轻量便捷的内容管理系统——simpleCMS, 目前已在 github 上开源, 且能同时适配PC端和移动端.


目前市面上已经有很多成熟的 cms 系统, 比如 worldPress, 博客系统 hexo, 对于技术开发者来说使用和部署很简单, 但是定制和自定义扩展方面, 却需要一定的技术门槛和开发成本.


基于以上一些痛点和局限, 我们开发了一款简单易用, 且天然支持服务端渲染(SSR)的全栈 cms 系统, 方便大家轻松定制自己的博客网站. 笔者接下来就来带大家一起分析 simpleCMS 的功能和技术实现.


技术架构和实现方案



为了降低大家的使用和部署成本, 我们采用了如下技术实现:


  • 服务层: koa2 + nodejs + jsonSchema(当然其中还使用了很多nodejs中间件)
  • 前台页面: pug(结合nodejs实现前后端同构, 且天然的ssr)
  • 后台管理: umi3.0 + react + antd + axios + typescript(当然还用了很多前端插件, 比如富文本, md编辑器)
  • 系统/服务器相关: linux / pm2 / nginx


基本架构模式如下图所示:



网络异常,图片无法展示
|


系统页面架构图:


网络异常,图片无法展示
|


功能分析



接下来笔者就来介绍 simpleCMS 的功能点. 我们先来分析一下后台管理系统.


后台管理系统功能分析



后台管理系统是动态博客系统必备的模块, 它能很方便的管理我们的网站数据. 这里笔者先来带大家看一下后台管理系统的基本模块:


  • 登录页面
  • 数据大盘
  • 内容管理
  • 页面配置
  • 广告配置
  • 用户信息管理
  • 多语言支持


以上是 cms 管理系统必备的模块, 这里我们基本上采用react hooks 来写, 具体页面如下:


  1. 登录页面


网络异常,图片无法展示
|


2. 数据大盘


网络异常,图片无法展示
|


3. 文章管理


网络异常,图片无法展示
|


4. 内容编辑


网络异常,图片无法展示
|


5. 多语言支持


网络异常,图片无法展示
|


其他页面就不一一展示了, 感兴趣的朋友可以体验一下. 主要技术采用 umi + antd + react + typescript 实现, 感兴趣可以在 github 上参考学习.


前台基本功能分析



前台主要是我们的博客网站, 这里采用 pug 这个模版引擎来实现, 交互功能使用大家最熟悉的jquery.前台基本模块有:


  • 博客首页
  • 文章列表页
  • 文章详情页


对应的交互功能有点赞, 评论, 文章搜索功能等, 基本页面如下:


  1. 首页


网络异常,图片无法展示
|


2. 列表页


网络异常,图片无法展示
|


3. 详情页


网络异常,图片无法展示
|


4. 评论和点赞


网络异常,图片无法展示
|


由于pug模版引擎适合做一些展示型的网站, 所以非常适合用在cms系统中, 我们也可以使用ejs等模版引擎.


技术实现细节



由于整个cms 系统是一个完整的技术闭环, 数据流转都是相关的, 这里笔者主要总结一下实现一个cms的技术细节.


  • 数据统计功能实现 —— 采用nodejs定时任务(node-schedule)
  • 富文本和md编辑器实现
  • 后台多语言实现方案
  • 内容管理流程设计
  • pug 模版和数据交互
  • jsonSchema 数据结构设计
  • 手写简单加密解密算法
  • 跨域解决方案以及用户权限设计
  • pm2管理node进程以及做负载均衡
  • 多进程场景下的并发锁设计


数据统计功能实现



数据统计主要是统计网站的pv, 单篇文章阅读量和点赞量, 为了更好的进行分析我们需要对单日的数据进行统计和存库, 具体实现就是利用定时任务在一天结束前进行数据的统计, 这里我们用 node-schedule来实现, 具体使用方式笔者也在之前的文章中做了介绍, 感兴趣可以参考一下.


网络异常,图片无法展示
|


基本使用如下:


letschedule=require('node-schedule');
lettestJob=schedule.scheduleJob('42 * * * *', function(){
console.log('将在未来的每个时刻的42分时执行此代码, 比如22:42, 23:42');
});

富文本和md编辑器方案实现



这里我们用的富文本组件是braft,  功能和可扩展性基本满足业务需求, md编辑器是程序员写博客的基本方式, 这里主要采用了for-editor, 其次就是对其进行了二次封装来实现支持剪切板功能.


国际化方案



多语言主要使用的react-intl, 由于umi 对其有很好的集成, 所以说我们只需要搭建基本的多语言规则即可. 比如在项目目录里建立locales文件夹, 然后存放zh(中文)/en(英文)文件即可, 基本的代码如下:


// locales/en/userexportdefault {
simpleCMS_DESC: 'Easy to use CMS system, help everyone to have their own website blog.',
CopyrightText: 'SimpleCMS r&d team',
}
// locales/zh/userexportdefault {
simpleCMS_DESC: '简单易用的cms系统, 助力每个人都能拥有自己的网站博客。',
CopyrightText: 'SimpleCMS 研发团队'}

如果对多语言实现方案感兴趣的, 可以参考simpleCMS源码.


后期会继续写对应的文章来介绍具体的实现方案, 感兴趣可以持续关注和交流.

github地址: 传送门


simpleCMS开发伙伴





目录
相关文章
|
2月前
|
自然语言处理 运维 开发工具
深入探讨了 NeoVim 相较于传统 Vim 的优势,包括更好的扩展性、现代化的界面和用户体验、多语言编程支持、强大的异步处理能力、更好的协作支持、持续的更新和改进、活跃的社区以及与现代开发工具的集成
本文深入探讨了 NeoVim 相较于传统 Vim 的优势,包括更好的扩展性、现代化的界面和用户体验、多语言编程支持、强大的异步处理能力、更好的协作支持、持续的更新和改进、活跃的社区以及与现代开发工具的集成。通过命令对比,展示了两者在启动、配置、模式切换、移动编辑、搜索替换、插件管理、文件操作、窗口缓冲区管理和高级功能等方面的差异。总结部分强调了 NeoVim 在多个方面的显著优势,解释了为什么越来越多的运维人员选择 NeoVim。
81 3
|
3月前
|
前端开发 搜索推荐 数据库
用CMS搭建网站有什么优势
随着互联网的飞速发展,网站已经成为企业展示自身形象、推广产品以及与客户互动的关键工具、扩大市场影响力、加强客户服务、提高运营效率,并适应市场变化。通过网站,企业能够展示自身形象、产品和服务,吸引更多客户,并提供便捷的服务和沟通渠道,从而提高整体竞争力和业务效无论是大型企业、中小型公司,还是个人博主、内容创作者,几乎每个人都需要一个网站来传达信息。建立和管理网站的复杂性却让许多人望而却步。非常幸运的是:现在建站公司开发一些成熟的建站系统帮协助用户完成这个网站搭建的工作,CMS(内容管理系统)的出现,彻底改变了网站建站的高门槛工作。
|
NoSQL MongoDB Redis
一日一技:如何实现一个轻量插件系统
一日一技:如何实现一个轻量插件系统
139 0
一日一技:如何实现一个轻量插件系统
|
NoSQL JavaScript 应用服务中间件
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
567 0
|
安全 Java Linux
轻量级服务器使用体验
本文我主要介绍了飞天加速计划·高校学生在家实践的我作为新手使用阿里云服务器的操作和感想,以及我对此学到的东西和对未来的一些想法。
|
运维 监控 数据可视化
一款轻量高效的开源运维监控系统——WGCLOUD
WGCLOUD设计思想为新一代极简运维监控系统,提倡快速部署,降低运维学习难度,全自动化运行,无模板和脚本。
一款轻量高效的开源运维监控系统——WGCLOUD
|
NoSQL Redis 数据库
阿里云Redis LUA脚本功能上线——轻量嵌入,极速扩展,业务轻松跨平台
阿里云Redis云数据库,全面支持LUA脚本功能,助力企业轻松迁移自建Redis数据库的业务逻辑,实现业务的跨平台复用,快速驱动业务上云。
8485 0
|
存储 监控 C#
C#轻量级高性能日志组件EasyLogger(六)
一、课程介绍 本次分享课程属于《C#高级编程实战技能开发宝典课程系列》中的第六部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集、整理和完善此系列课程! 一、本高级系列课程适合人群如下 1、有一定的NET开发基础。
3187 0
|
JavaScript 前端开发 HTML5
Pagekit – 现代化技术构建的轻量的 CMS 系统
  Pagekit 是一个模块化,轻量的 CMS 系统,基于现代化的技术,如 Symfony 组件和 Doctrine。它提供了一个很好的平台,用于主题和延伸开发。Pagekit 为您提供了工具来创造美丽的网站,不管它是一个简单的博客,企业网站或 Web 服务。
995 0
|
JavaScript 前端开发 开发框架
Furatto – 轻量,友好的响应式前端开发框架
  Furatto 是一个基于 Bootstrap & Foundation 的前端开发框架,用于快速开发网站。这个框架采用流行的扁平化设计和响应式设计。除了布局和网格之外,所有的主要元素都有预定义的样式,例如按,表格,表单等,而且还有各种各样的 JavaScript 组件,像模态弹窗,工具提示等等。
786 0

热门文章

最新文章

下一篇
开通oss服务