lowcode-cms开源社区源码设计分享

简介: lowcode-cms开源社区源码设计分享

image.png

开源背景

lowcode可视化社区 是我之前在设计研发 Dooring低代码 平台时开发的一个面向低代码内容分享的知识社区, 内容端采用 SSR 技术来渲染页面, 对 SEO 更加友好, 同时后端服务采用 Nodejs 来实现, 内容端和服务端同端, 也就是传说中的内容服务“同构”. 管理端采用前端最最流行的 React hooks 来实现, 无论是技术人员还是非技术人员, 通过简单的操作就可以轻松部署一套专属自己的 CMS 系统.

本着满满的开源精神, 我对这套 CMS 系统进行了开源, 让更多技术小白或者非技术人员, 可以轻松部署自己的网站.

接下来我会从技术的角度, 分享一下我开源的 lowcode-cms 系统的技术实现, 以及如何本地运行 + 部署这套开箱即用的 CMS 系统.

系统设计架构

image.png

接下来我会具体和大家介绍一下管理端, 内容端, 服务端的技术架构.

内容端架构设计

内容端主要用来展现个人或者企业的内容信息, 相当于一个门户站, 这里为了更好的 SEO, 我采用了模版引擎来渲染 html, 也就是koa-views + pug 模式, 具体界面如下:

image.png

当然这只是首页模块, 还有诸如行业产品, 最佳实践, 视频, 手记等, 这里就不一一介绍了, 大家如果会编程的话, 也可以自定义自己的模块页面. 我们接下来看看具体的技术实现.

image.png

大家可以在github中server的views目录下看到每个渲染层的具体实现, 这里和大家分享一下 lowcode-cms 搭建的ssr模式.

1. 配置pug支持

import koa from "koa";
import views from "koa-views";
// ... (此处省略服务端自治的部分代码)
// 挂载路由
glob.sync(`${config.routerPath}/*.js`).forEach((item) => {
  require(item).default(router, config.API_VERSION_PATH);
});
//使用模版引擎
app.use(views(resolve(__dirname, "./views"), { extension: "pug" }));
app.use(router.routes()).use(router.allowedMethods());

2. ssr路由数据直出

这块主要是基于用户发起的请求, 在服务端格式化好数据供 pug 消费:

/**
 * 文章路由
 * @param {*} router
 * @param {*} apiPath
 */
const pageRenderRouter = (router) => {
  // api路径
  const api = {
    // 渲染首页
    index: "/",
    // 最佳实践列表
    bestPractice: "/best-practice",
    product: "/product",
    video: "/video",
    note: "/note",
    login: "/login",
    // 其他渲染路由...
  };
  // 内容端导航配置
  const nav = [
    {
      id: "0",
      title: "最佳实践",
      link: "/best-practice"
    },
    {
      id: "1",
      title: "行业产品",
      link: "/product"
    },
    {
      id: "3",
      title: "视频",
      link: "/video"
    },
    {
      id: "4",
      title: "手记",
      link: "/note"
    },
    {
      id: "5",
      title: "关于",
      link: "/about"
    },
  ]
  const copyright = "版权所有 @lowcode可视化社区"
  // 登录
  router.get(api.login, async (ctx) => {
    await ctx.render("login", {
      url: api.login,
      title: "登录",
      description: "新用户?",
      href: "去注册",
      firstInput: "邮箱",
      twoInput: "密码",
      btnText: "登录",
      logoText: "Dooring低代码社区",
    });
  });
  // 渲染首页
  router.get(api.index, async (ctx) => {
    const filePath = `${config.publicPath}/db/homeConfig.json`;
    const articlesPath = `${config.publicPath}/db/article_index.json`;
    const productsPath = `${config.publicPath}/db/product_index.json`;
    const videosPath = `${config.publicPath}/db/video_index.json`;
    const homeConfig = RF(filePath);
    const articles = RF(articlesPath);
    const products = RF(productsPath);
    const videos = RF(videosPath);
    await ctx.render("index", {
      nav,
      articles: articles.filter(v => v.review === 1).slice(0, 6),
      products: products.filter(v => v.review === 1).slice(0, 6),
      videos: videos.filter(v => v.review === 1).slice(0, 6),
      copyright,
      ...homeConfig
    });
    // 统计访问量
    const viewPath = `${config.publicPath}/db/views.json`;
    const views = RF(viewPath);
    WF(viewPath, {...views, home: views.home + 1});
  });
  // 渲染文章详情页
  router.get(api.articleDetail, async (ctx) => {
    const id = ctx.query.fid;
    const articlePath = `${config.publicPath}/db/articles/${id}.json`;
    const commentPath = `${config.publicPath}/db/comments/${id}.json`;
    const article = RF(articlePath) || {};
    const comments = RF(commentPath) || {};
    comments.views = comments.views + 1;
    await ctx.render("article_detail", {
      nav,
      viewTitle: article.title,
      topImg: article.img,
      authorInfo: { name: article.author, date: formatTime(article.ct, "-") },
      cate: article.cate,
      val:  article.type ? marked(article.val) : article.val,
      commentInfoList: comments.comments || [],
      flover: comments.flover,
      views: comments.views || 0,
      copyright,
    });
    WF(commentPath, comments);
  });
  // 其他页面渲染服务逻辑...
  });
};
export default pageRenderRouter;

3. 模版消费

这里给大家参考一个我写的 pug 页面的例子:

image.png

大家感兴趣的可以参考一下具体的实现:

github.com/MrXujiang/l…

服务端架构设计

image.png

服务端本质上主要实现两块能力:

  • 内容端页面渲染(SSR)
  • 后台API和三方接口服务对接

服务端我参考了通用后端服务的 MVC 模式, 基于 koa2 搭建了一个简易的服务端 MVC 模型, 如下是一个服务端的代码目录:

image.png

主要实现的核心模块有:

  • 静态资源服务器
  • 微信分享, CDN上传等第三方服务模块
  • api路由
  • 中间件模块
  • 资源上传模块
  • 用户权限模块
  • ssr服务模块

如果搭建感兴趣可以参考 github 中具体的实现代码:

github.com/MrXujiang/l…

管理端系统架构设计

image.png

管理端采用的是 umi + react + antd4.0 实现的, 当然封装了很多成熟的插件模块, 比如说 富文本编辑器, md编辑器, 文件上传模块等, 大家可以在学习源码的过程中受益非浅.

image.png

上图就是编辑模块, 我封装了实时预览 md富文本的模块, 大家可以拿来即用.

本地运行

1. 目录介绍
  • server 基于nodejs的服务端, 启动后可直接访问3000 端口, 也就是内容SSR端
  • admin CMS的管理后台, 集成了用户管理, 内容审核, 内容发布, 数据统计等模块

开箱即用~~

2. 本地启动
  1. server端
# 进入server目录
cd server
# 安装依赖
yarn
# 服务端启动
yarn start

注: 如果是window系统, 可以执行 yarn start:win

  1. 管理端
# 进入admin目录
cd admin
# 安装依赖
yarn
# 启动
yarn start

初始化账号: super_123, 密码: zxzk_123

  1. 内容端

访问3000端口即可.

部署发布

推荐使用 pm2 来管理 Node 服务进程, 只需要把 server 端上传到服务器, 安装对应依赖, 用 pm2 启动即可:

pm2 start server/dist

有关 pm2 相关问题可以在我往期的文章中学习参考.

如何参与贡献和问题反馈

如果大家有好的建议或者想法, 可以在 github 上提 pr 或者 issue 来共建, 或者在《趣谈前端》公众号中和我反馈.

github: github.com/MrXujiang/l…

目录
相关文章
|
存储 人工智能 搜索推荐
SuperAGI 一个开发优先的开源自主人工智能代理框架
供应、生成和部署自主人工智能代理
|
开发框架 前端开发 Java
GitHub首次开源标星20k+项目:Guns-现代化主流Java应用开发框架
Guns是一个现代化的Java应用开发框架,基于主流技术Spring Boot2 + Vue3,Guns的核心理念是提高开发人员开发效率,降低企业信息化系统的开发成本
|
2月前
|
Java 开发工具 Maven
开发工具,能力强的伙伴可以直接参考官方文档
该教程详细介绍了如何使用Gluon将JavaFX项目编译成exe文件,涵盖开发工具配置、环境搭建及异常处理。开发工具包括Idea 2023.3、Gluon插件、Git和Maven等。环境搭建需安装VS 2022 Community、JDK 11或17+及GraalVM CE Gluon 22.1.0.1-Final,并配置相应环境变量。通过拉取示例项目、修改`pom.xml`并执行`build.bat`完成编译。教程还提供了异常处理及将编译动作绑定到Maven生命周期的方法。
51 0
|
3月前
|
IDE 前端开发 数据库
OpenSumi开源问题之OpenSumi的定义如何解决
OpenSumi开源问题之OpenSumi的定义如何解决
|
3月前
|
存储 缓存 JavaScript
提升Blazor应用性能的探索之旅:深入解析关键技巧与最佳实践
【8月更文挑战第31天】在开发现代Web应用时,性能与用户体验至关重要。Blazor作为一款使用.NET构建交互式Web UI的框架,提供了诸多便利。为了充分发挥其潜力并优化体验,掌握一些性能提升技巧十分必要。本文将分享几个实用的Blazor性能优化方法,包括减少不必要的服务器端调用、使用懒加载以及优化DOM操作。通过这些技巧,可以显著提升应用性能,为用户提供更流畅的体验。以下是具体方法及示例代码。
55 0
|
6月前
|
前端开发 JavaScript
开源! 基于lowcode行业的开源CMS系统,轻松帮助企业和个人搭建知识管理系统
开源! 基于lowcode行业的开源CMS系统,轻松帮助企业和个人搭建知识管理系统
78 2
|
Kubernetes Cloud Native Dubbo
Higress 开源后,我们整理了开发者最关心的 15 个问题
云原生网关 Higress 开源后,引起了开发者们的热烈讨论,我们整理了大家在 GitHub、钉群、微信群讨论的问题,并将回答汇总如下,方便各位更准确的读懂 Higress,也非常欢迎您和我们一起共建、定义 Higress。
338 6
Higress 开源后,我们整理了开发者最关心的 15 个问题
|
设计模式 架构师 Java
程序员必修课:阿里性能优化全解终开源!设计+代码+JVM三飞
性能优化可以说是我们程序员的必修课,如果你想要跳出CRUD的苦海,成为一个更“高级”的程序员的话,性能优化这一关你是无论无何都要去面对的。为了提升系统性能,开发人员可以从系统的各个角度和层次对系统进行优化。除了最常见的代码优化外,在软件架构上、JVM虚拟机层、数据库以及操作系统层面都可以通过各种手段进行调优,从而在整体上提升系统的性能。
|
Kubernetes Cloud Native 安全
Higress 开源后,我们整理了开发者最关心的15个问题
云原生架构下,网关承载着流量管理、服务调用、安全管理等多重职能,在稳定性、性能、安全性、易用性上存在着更高的要求。在 CNCF Landscpae 编排和管理的 API Gateway 领域中,已经有不少开源的网关选择,开发者们也有着不小的选型诉求。
Higress 开源后,我们整理了开发者最关心的15个问题
|
JavaScript 数据可视化 IDE
QCAD v3.23.0.3源码分析(一)准备工作,去商业插件
QCAD v3.23.0.3源码分析(一)准备工作,去商业插件
575 0