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. 登录页面
  1. 数据大盘
  1. 文章管理
  1. 内容编辑
  1. 多语言支持

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

前台基本功能分析

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

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

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

  1. 首页
  1. 列表页
  1. 详情页
  1. 评论和点赞

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

技术实现细节

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

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

数据统计功能实现

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

基本使用如下:

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

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

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

国际化方案

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

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

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

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

github地址:

simpleCMS一款简洁轻量的开源博客系统​github.com

最后

觉得有用 ?喜欢就收藏,顺便点个吧,你的支持是我最大的鼓励!微信搜 “趣谈前端”,发现更多有趣的H5游戏, webpack,node,gulp,css3,javascript,nodeJS,canvas数据可视化等前端知识和实战.

建立ssr服务器_如何从零打造一款轻量且天然支持SSR的个人博客系统?相关推荐

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

    2年前笔者开发了一款基于 nodejs 的全栈开源 cms 系统 XPCMS, 主要是为了解决技术开发者搭建自身内容平台的局限以及降低使用成本, 虽然1.0版本已经完成, 但是从整体部署和二次开发的便 ...

  2. java周边商户计算性能差_【美团外卖商家版电脑版和BLOG4J高性能的java/jsp版博客系统哪个好用】美团外卖商家版电脑版和BLOG4J高性能的java/jsp版博客系统对比-ZOL下载...

    BLOG4J 是一套基于 JAVA / JSP 技术的博客系统,是CMS4J兄弟产品之一,通过BLOG4J可以帮助门户网.企业快速的搭建自己的博客系统,并能够在BLOG4J基础之上进行扩展.订制.BL ...

  3. 如何在云服务器上搭建一个自己的博客系统(完整流程梳理)

    文章目录 前言 一.项目下载 1.下载地址: 1.下载及导入本地. 二.搭建前的准备工作. 1.Mysql建库,执行数据库建表,生成数据脚本 2.将博客项目打成jar包. 3.创建项目目录及上传项目配 ...

  4. 如何从零打造爆款小程序

    上线半年覆盖了250多个公众号,积累4000多万粉丝(所有公众号粉丝数和),具体的数据由于涉及到商业竞争,不便于透漏.今天即速学院特邀京东小程序负责人Kosan老师,给我们分享下如何在半年时间内,从零 ...

  5. 基于Spring Boot技术栈博客系统企业级前后端实战之课程导论(零)

    零.说明(必读) 一.课程概述 1.1 名称 1.2 功能 1.3 技术点 1.4 目标 二.核心功能 2.1 用户管理 2.2 安全设置 2.3 博客管理 2.4 评论管理 2.5 点赞管理 2.6 ...

  6. Ubuntu服务器上搭建solo个人博客系统

    最近想要尝试一下搭建一个个人博客来记录自己的学习和生活,因此选择了基于java的solo博客系统来尝试搭建一下,主要的步骤有: 购买服务器 购买域名及备案 安装博客程序 通过github登录博客后台设 ...

  7. 免费打造个人博客系统

    自媒体越来越受重视,写作能力也变得更加重要,但万事开头难,第一步:构建一个人文章发布平台,都难道不少人,今天介绍一种免费搭建个人博客系统的方法,不仅能成为自己写作平台,还可以将文章轻松发布到其他公共平 ...

  8. python 博客程序_项目1——博客系统 - Python测试和开发 - OSCHINA - 中文开源技术交流社区...

    一.绪言 今天又来更新博文了,学习Java也已经有一段时间了,经过这段时间的学习,我对Java有了更深一层的理解.从刚开始的HelloWorld到了现在的小型网页项目,这中间也经历了很多.话不多说,下 ...

  9. java 博客系统_讲解开源项目:5分钟搭建私人Java博客系统

    本文适合刚学习完 Java 语言基础的人群,跟着本文可了解和运行 Tale 项目.示例均在 Windows 操作系统下演示 本文作者:HelloGitHub-秦人 HelloGitHub 推出的< ...

最新文章

  1. python软件怎么使用-Python快速入门—如何选择使用包管理工具?
  2. Canvas绘图在微信小程序中的应用:生成个性化海报
  3. python秒杀神器苏宁_Python爬虫——实战三:爬取苏宁易购的商品价格
  4. urllib2 python3错误?用from urllib import request来代替!
  5. EntityFramework 启用迁移 Enable-Migrations 报异常 No context type was found in the assembly
  6. 左神算法:用一个栈实现另一个栈的排序(Java版)
  7. apache ignite_使用Spring Data的Apache Ignite
  8. python中接口测试垃圾数据如何清理_巧用PyUnit中unittest特性解决接口测试产生脏数据问题...
  9. 吴恩达斯坦福大学机器学习 CS229 课程学习笔记(一)
  10. Juniper大中国区于肇烈
  11. esp32找不到com端口_玩转GPIO之ESP32点灯大法(MicroPython版)
  12. Python-----包和日志的使用
  13. 服务器上读取文件,服务器上读取文件
  14. java对某个字段排序_Java8对List集合对象某个字段进行排序
  15. Total Control通过定义配置文件,预加载脚本教程
  16. 系统测试缺陷检出密度越大越好吗?
  17. 解决windows server 2003安装dhcp服务器的问题
  18. png转pdf, pdf转png
  19. Dockers 安装
  20. wifi连接速率 linux,Deepin linux 操作系统提高 WiFi 速度

热门文章

  1. Flink JDBC Connector:Flink 与数据库集成最佳实践
  2. Python Flask实现修改和删除数据
  3. 【CCF】201803-2 碰撞的小球
  4. 目录服务软件 AD和LDAP 的理解
  5. 手机访问内网IIS服务器网页的方法
  6. Ext Designer Preview生成代码在html上显示步骤
  7. EXT学习经验分享:深刻理解EXT与服务器端的交互
  8. 漫谈CMS:ZOOMLA、NETCMS、风讯、动易异同
  9. jQuery模板和数据绑定
  10. 提取网页的table时,遇到table中的两行(tr)中间有空行(或无空行)的正则表达式我的处理