Ubuntu 开发者门户迁移到 DjangoCMS 的原因

尚无读者喜欢此文。
Chat

Opensource.com

Canonical 多年来使用过各种内容管理系统,包括 DrupalZope,我们的大量网站都在 WordPress 上运行;事实上,现在仍然有很多网站是这样。我们的开发者门户就是这些标准的 WordPress 实例之一,对于一个流量不大的简单网站来说,它已经足够好用了,但我们开始觉得它不够用了。Ubuntu 手机 项目及其配套的应用程序开发 SDK 的发布意味着这个网站将开始受到更多关注——来自一个非常不同的受众——而且它需要做的事情也比现在多得多。

过去,在 WordPress 之上构建新功能对我们来说一直很困难,所以我们主要坚持使用 vanilla 安装提供的功能。这种方法已经无法满足需求了;我们有太多想做的事情,但根本做不到。当我们想添加 API 文档时,我们最终构建了一个基于 Django 的全新站点来完成这项工作,并且完全绕过了 WordPress 站点。

此外,我们对网站的可用性有了全新的要求。我们知道如何实现高可用性 (HA),但这意味着要从单个服务器实例迁移到云端,特别是迁移到我们的私有 OpenStack 云。为了有效地为中国用户服务,我们还必须在该国境内提供本地缓存服务器。这两者都将需要对支持该网站的基础设施进行彻底的改变。

最后,在所有众多新的技术要求中,还有一个社会要求。我们将在中国与魅族合作发布第二款手机,他们希望拥有针对和支持中国用户的应用程序。为了实现这一目标,我们将与中国移动合作举办一个应用程序开发者大赛和一系列研讨会。这意味着我们必须使整个网站除了英语之外,还要提供中文版本,这是 WordPress 无法开箱即用的功能。因此,我们开始寻找替代方案。

CMS 选项

在开源内容管理方面有很多选择,我们研究了我们能找到的尽可能多的选项。每种方案都有其优点和缺点,并且在简单性和功能之间有所取舍。我们考虑了从静态网站生成器到从头开始编写新程序,然后再回到原点。虽然没有完美的解决方案,但我们发现 DjangoCMS 在众多方案中脱颖而出。

WordPress 是我们进行功能比较的基准,而 DjangoCMS 提供了几乎所有相同的功能。DjangoCMS 提供了页面内容和导航的轻松管理、用户和组管理、WYSIWYG 编辑器(当使用 djangocms_text_ckeditor 时)以及博客系统(通过与 Zinnia 配对)。它还提供了标准 WordPress 没有的功能。首先是国际化支持,DjangoCMS 为页面内容和导航提供了开箱即用的支持。使用 Django 也意味着我们可以使用我们首选的数据库 PostgreSQL,而不是 MySQL。DjangoCMS 甚至提供了更广泛的权限和访问控制系统,允许不同的组管理网站的不同部分。

决定采用基于 Django 的方案对我们来说尤其有利,因为 Canonical 在使用 Django 和 Python 方面积累了大量的知识和经验,远远超过我们在 WordPress 和 PHP 方面的经验。我们甚至有用于 Django 模板系统的现有 Web 主题,以及 django_openid_auth,它允许我们使用 Ubuntu SSO 进行用户和组身份验证。我们的系统管理员也非常熟悉将基于 Django 的网站部署到OpenStack。

虽然 DjangoCMS 有很多优点,但它并非开箱即用的完美解决方案,我们必须进行更改才能使其按照我们需要的方式工作。例如,默认的文本插件会清理您输入的内容,因此如果您尝试添加 WYSIWYG 支持之外的原始 HTML,它会将您的标签 < > 转换为 &lt; &gt;。值得庆幸的是,DjangoCMS 支持添加自定义插件,并且创建一个 RawHTML 插件类型以在我们需要时使用它并没有花费太多精力。CMS 还要求我们为编辑器级别的用户设置一些额外的权限,这些权限在他们从 Ubuntu SSO 登录时未设置,因此我们必须向 django_openid_auth 添加一些回调来授予这些权限。

我们尚未克服的一个问题是图片插件缺少调整大小的选项,但这到目前为止只造成了轻微的不便。基于 Django 管理界面构建的管理界面在可用性方面也还有很多不足之处,特别是对于那些习惯了 WordPress 更完善的管理页面的人来说。但是内联页面编辑功能意味着我们不必经常进入管理界面。

事实证明,使用 DjangoCMS 正确完成高可用性比我们预期的要容易得多。我们知道我们将在 OpenStack 云上运行它的多个实例,因此我们需要它们都提供相同版本的媒体文件。默认情况下,Django 将静态文件和上传的媒体都存储在本地文件系统中,但这将意味着为页面上传的图像仅存在于其中一个前端实例上。幸运的是,Django 具有可配置的文件存储后端,并且使用 django-swiftstorage 作为后端让我们使用 Swift,OpenStack 的分布式对象存储服务(类似于 Amazon 的 S3),用于静态文件和上传的文件。最棒的是,DjangoCMS 插件和 Zinnia 博客引擎都可以与它一起使用,就像魔法一样。

在我们将所有部件组合在一起,调整配置并进行了一些代码更改之后,DjangoCMS 成为了我们之前 WordPress 系统的直接替代品。部署和迁移过程没有出现任何重大问题,我们很快就能够将目光转向使用新的自定义代码扩展网站的功能。我们已经添加了一个 Web 应用程序生成器表单,它可以为 Ubuntu 手机构建现成的应用程序包。最近,我们将单独的 API 文档网站合并回主站点,这使它们再次集中在一个地方,并且顺便说一句,通过利用 Swift 存储上传嵌入式图像,使 API 文档更加有用。

事实证明,DjangoCMS 恰好在简单性、灵活性和强大功能之间取得了平衡。DjangoCMS 是开源的、高度可配置的,并且构建在设计良好的平台之上,这使得我们很容易采用和扩展它。DjangoCMS 可以在本地运行以进行开发,在传统的服务器实例上运行,也可以使用 OpenStack 和 Juju 进行大规模部署。最棒的是,整个网站,包括特定于 developer.ubuntu.com 的部分,都是开源的,并且可供社区贡献。

开放
CMS

本文是 The Open CMS column 专栏的一部分,由 Robin Muilwijk 协调。分享您使用开源内容管理系统 (CMS) 和平台(如 Drupal、Joomla、Plone、WordPress 等)的故事。

User profile image.
经验丰富的社区经理、开发布道者和技术倡导者,在软件开发方面拥有深厚的技术背景

9 条评论

> 我们尚未克服的一个问题是图片插件缺少调整大小的选项

如果这是一个严重的问题,请查看这个特殊的 DjangoCMS 插件 http://djangocms-cascade.readthedocs.org/en/latest/bootstrap3/image-picture.html

此插件根据当前列宽自动调整图像大小。目前,这是为 Bootstrap3 实现的,因此它可能不是一个选项,因为您使用 YUI 作为 CSS 框架。但是 YUI 可以作为替代实现添加。

感谢您的建议。但我不太懂 CSS,所以我不知道我是否能够让它与 YUI 一起工作

回复 ,作者:Jacob Rief (未验证)

在标准 djangocms-picture 插件上,我提交了一个拉取请求,以允许为图片分配一个可选的类。然后您可以使用它在 css 中调整其大小。拉取请求尚未合并,因为上游必须做出决定。但我只是想了解一下,这是否可以解决您的问题。我认为拥有合理的默认值很好,而不是一直推出您自己的插件。您可以在这里找到 PR:https://github.com/divio/djangocms-picture/pull/11

谢谢,我会看一看,看看这是否有助于我们。您是否碰巧知道它将如何与像 Swift 这样的云存储文件后端一起工作?

回复 ,作者:Dries Desmet (未验证)

PostgreSQL 是决定性因素吗?
在我看来,drupal 可以完成您需要的一切,包括您遇到的照片问题,但是,如果我没记错的话,它的 PostgreSQL 集成不如 djangocms 好。
如果 PostgreSQL 不是最大的因素,那么 drupal 对您来说有什么不足之处呢?

Python 是真正的决定性因素,Canonical 在 Python 和 Django 方面积累了多年的经验,包括拥有许多我们在多个站点中使用的库。拥有 PostgreSQL 很好,但它不是决策的主要因素。

回复 ,作者:Dmacleo

如果它是一些基于 python/django 的东西,请不要忽视 http://wagtail.io。

既然您指出 Python 是考虑 Django-CMS 的关键技术因素,那么团队是否曾仔细评估过 Plone CMS/Portal?

我目前为小型办公室网站部署 Django-CMS,但由于 Plone 中完整而全面的工作流程功能、管理控制台和 Zope 应用程序服务器,它允许独立附加存储 PostGreSQL 和其他几个数据存储,我们为在 5 个国家/地区和 3 种语言运营的国际自由/开源软件 (FOSS) 门户网站使用 Plone。

此外,Plone 还有一个软件列表端口,其中包含版本、全文搜索、在线教育/评估和教程端口,以及首屈一指的 Zope AS 安全机制。

虽然我从未使用过 Plone,但我赞同 W. Anderson 在上面的问题。多年来,我一直将 Plone 项目(从浏览其网站多年)视为专业“社区”开源项目的典范——并且具有极高的标准。

如果 Python 是您的菜,那么 Plone 是完美的选择。它似乎是一个超级灵活的 CMS,拥有 340 名开发人员的坚实核心。凭借这种支持和专业精神,您知道它的未来一如既往地光明。

知识共享许可协议本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.