ennraven
V2EX  ›  程序员

CMS 开发框架准备开源,想征求一下大家的意见

By ennraven at 2022 年 12 月 5 日 · 5260 次点击

大家好,

我们公司( The Plant )打算开源一个 CMS 的开发框架 QOR5。在正式开源之前,希望能听取一下大家的意见🙏

QOR5 经过多年迭代,经历了

  1. QOR1 (Ruby on Rails 2010)
  2. QOR2 (Ruby on Rails 2012)
  3. QOR3 (Go 2014 —— 已开源 5.1k stars)
  4. QOR5 (Go 2021)

每个大版本都有很多进步。开源的目的一是回馈社区,二是汲取社区的力量,把项目做的更好。

下面的一些问题希望大家有空讲讲

  • 你 /公司现在用什么 CMS 系统?商用 SaaS/自研 /开源?
  • 你 /公司平时用什么框架来开发 CMS ?有什么优缺点?
  • 在开发 CMS 的时候,有什么经常遇到的问题?
  • 你 /公司是否尝试过使用新的框架来开发?如果有,为什么?

文档地址 文档内多数示例代码可直接运行。 demo 网站稍后更新

目前我们总结的 QOR5 的特色:

在 Admin 界面开发方面

速度

QOR5 Admin 集成了 Vuetify , 大量预置组件可以直接使用,无需重复开发。管理界面可由后端独立完成,基本无需前端参与。

我们以前做项目时,复杂一些的管理页面都是后端工程师提供好前端所需的数据,前端在数据的基础上构建出页面,这需要两个团队的密切配合。在去年冬天开发的一个中型项目中,我们使用了 QOR5 ,3 个后端开发人员就做完了之前需要 3 后端 + 2 前端的工作,而且这个项目的管理界面比一般的 CMS 要更复杂,因为它不是一个支撑管理某些前台业务的后端管理系统,而是一个没有前端,核心是数据筛选和自动匹配的数据处理系统,加上客户之前习惯使用 Excel 来进行工作,为了照顾他们的习惯,做出来的 list 页面比较接近 Excel 。但即便这样,我们的 3 个后端开发人员也足以在 QOR5 的帮助下,高效地完成了项目。

img

灵活

在使用预置组件快速构建系统的前提下,提供了友好的扩展接口及开放性,程序员完全有自由来实现各种需求

界面可见的位置基本都可以通过相关函数进行配置,无论是处理逻辑还是显示逻辑都可自定义。所有默认的 CRUD 行为都可以自定义. 预置的组件不满足需求的时候,开发一个新的也完全没问题。

健壮

系统完全由 Go 开发(htmlgo),继承了编译语言的优势,减少了 runtime error 。

与 Go 原生的 tmpl 相比,纯用 Go 写的模板文件大幅度地减少了模板里可能出现的 runtime error. 很多错误都会在写代码的时候被发现,程序健壮性大大提高。且避免了难用的 tmpl 语法,直接用 Go 的语法写模板。

内置了丰富的组件,大多数情况下不需要自己再写 JavaScript ,也减少了 JavaScript 的 runtime error 出现的概率。

img

方便部署

整个 App 编译成一个可执行文件,不必考虑是否二进制化模板文件,或者需要向服务器上同步模板文件。

部署过用原生 Go 模板的项目的同学应该有经验,模板的处理是个麻烦。要么使用 bindata 之类的工具编译模板,但这导致每次模板的更改都需要重新编译,而且在多人协作的环境中,Git 合并时经常因为编译的二进制文件导致冲突。 另一个解决方案是在部署的时候同步上传模板文件,但这要去协调 App 和模板间的路径、缓存问题等等,给 SRE 团队造成了很多不便。使用 QOR5 之后,这些令人头疼的问题就都解决了,因为所有的模板文件都是用 Go 写的,直接一键编译部署就可以。

在资源方面

持续更新的文档

QOR5 文档里的示例代码是可以直接执行的, 这保证了文档必须与最新的代码一致,否则编译无法通过。这会半强制地帮助我们持续更新文档,减少文档过期情况的出现。

新手友好

开源之后我们会推出完整的视频教程,不仅仅是介绍如何使用 QOR5 ,并且还能让初接触编程的同学,完整地学习体验一次,如何从头开发到最终部署上线一个 EC 网站。

我们计划增加 4 个预置模板,CMS, EC Shopping, EC Restaurant 和 Blog. 花一分钟安装就能工作,无论是学习还是作为种子项目都会很方便。

代码通俗易懂

我们有 12 年的框架开发经验, 从 rails 时代过来,深刻体会过项目大了之后找一个函数定义都找不到的痛苦。所以在设计 QOR5 时,严格遵循了 less magic code 的原则,尽最大可能去避免使用各种 hook 之类的隐式调用, 绝大多数逻辑都是显式调用,也就是说跟着函数的调用流程,你可以弄清楚绝大部分的功能是如何运行起来的。

持续更新与安全性

QOR5 是我们对技术的理解和实践的产物,目前用于公司的重大项目中,会持续的更新和维护。正式开源会采用社区维护的 roadmap

安全性上,我们使用 OWASP 验证安全性,至少要通过 L2 的标准

会有专人负责维护社区,解答问题。

不知大家对于使用这样一个框架,有什么需求和意见 欢迎留言.

现有的功能模块

  • Page Builder: 拖拽式页面构建模块。配置好预置组件之后,可以让用户自己而不是程序员创建新的页面。

img

  • Publishing System: 内容发布模块。支持页面版本,工作流,定时发布等功能,也是构建纯静态前台网站的核心。

  • Authentication: 登录模块。 支持第三方和基础邮箱密码登录。

  • Permission: 权限模块。粒度比较细,可以指定到某条记录对某些用户是否可以访问的程度。

  • ActivityLog: 操作日志模块。 详细记录系统内每个用户的所有操作。

  • Microsite: 支持用户自己挂载 HTML 静态小网站到主站上。

  • Note: 消息通知模块。支持站内信和通知功能。

  • MediaLibrary: 媒体文件管理模块。 主要用于管理上传的图片和视频文件。与表单中的图片选择器联动。

  • RichEditor: 富文本编辑器。

  • SEO: SEO 信息管理模块。

  • Exchange: 信息交互模块。主要用于导入和导出数据的功能。

  • Worker: 后台任务模块。主要用于异步任务,即需要比较长的时间在后台执行的任务的管理。

  • I18n: 国际化模块。

  • L10n: 本地化模块。

声明:本文中所链接的 GitHub 仓库(除 QOR3 外)目前均未正式开源,没有 license 。

25 条回复  •  2023-02-15 22:21:57 +08:00
jsthon
   1
jsthon  
   2022 年 12 月 5 日
支持 QOR5 !
hefish
   2
hefish  
   2022 年 12 月 5 日
感觉东西是个好东西。
但我还是觉着改模板,不重编译的好一些。
eslizn
   3
eslizn  
   2022 年 12 月 5 日
gorm 升级下吧
tommyzhang
   4
tommyzhang  
   2022 年 12 月 5 日
Ruby on Rails 版本的可以开源吗
kran
   5
kran  
   2022 年 12 月 5 日 via Android
喜欢研究 CMS ,看介绍是好东西
lower
   6
lower  
   2022 年 12 月 5 日
有数据采集功能模块么?自动采集别的网站的内容
feiyang221
   7
feiyang221  
   2022 年 12 月 5 日 via Android
收藏ᥬ🌝᭄,感觉好厉害的样子
v2wtf
   8
v2wtf  
   2022 年 12 月 5 日
Vuetify 好评
meshell
   9
meshell  
   2022 年 12 月 5 日
支持插件功能不?
Lemonadeccc
   10
Lemonadeccc  
   2022 年 12 月 6 日   ❤️ 1
过几天试一下,马克
ennraven
   11
ennraven  
OP
   2022 年 12 月 6 日
@hefish hi

> 改模板,不重编译的好一些

能详细说一下吗 不是很明白
ennraven
   12
ennraven  
OP
   2022 年 12 月 6 日
@eslizn QOR3 里用的还是 GORM1, QOR5 都已经是 GORM2 了。 当时柱子做 GORM1 的时候 我们还是同事呢 哈哈哈 QOR3 的核心也是他写的
ennraven
   13
ennraven  
OP
   2022 年 12 月 6 日
@tommyzhang 那个是基于 rails 3.x 版本的 现在开源已经没意义了 我们也不维护了。。
ennraven
   14
ennraven  
OP
   2022 年 12 月 6 日
@kran 哈哈哈 demo 网站很快就会上线 现在也可以到 https://docs.qor5.com/basics/listing.html 里直接点击最下面示例代码的 "check the demo" 看看效果。
ennraven
   15
ennraven  
OP
   2022 年 12 月 6 日
@lower 是指 API 还是爬虫?
ennraven
   16
ennraven  
OP
   2022 年 12 月 6 日
@feiyang221 哈哈哈 给个 star 吗 :troll:
ennraven
   17
ennraven  
OP
   2022 年 12 月 6 日
@v2wtf 是啊 用起来很方便 省太多时间了
ennraven
   18
ennraven  
OP
   2022 年 12 月 6 日
@meshell 能具体说说吗
hefish
   19
hefish  
   2022 年 12 月 6 日   ❤️ 1
@ennraven 可能是我理解错了。这项目应该是满足我的喜好的。
eslizn
   20
eslizn  
   2022 年 12 月 6 日
@ennraven 我看那个 qor5 的仓库还是 1 ,那就建议:
1.保留后端渲染能力
2.embed 替换 bindata
ennraven
   21
ennraven  
OP
   2022 年 12 月 7 日
@eslizn oh. sorry. 确实是在建模板的时候引入了 gorm1. 已经在改了。

保留后端渲染能力具体是指?

目前我们是不需要用 bindata 的,因为模板也是 Go 写的,直接一起编译了。不知你说的 embed 是不是这个意思
feiyang221
   22
feiyang221  
   2022 年 12 月 7 日
有用户群之类的吗?
ennraven
   23
ennraven  
OP
   2022 年 12 月 7 日
@feiyang221 打算弄的 现在还没建 ..
go233
   24
go233  
   2022 年 12 月 29 日 via Android
ror 的可以开源吗?像学学思路
mawka
   25
mawka  
   2023 年 2 月 15 日 via Android
最大能带动多少数据量
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
© 2026 V2EX · 64ms · 3.9.8.5