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 配对)的轻松管理。它还提供了 stock 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 和其他几个数据存储同时进行。我们使用 Plone 用于在 5 个国家/地区和 3 种语言中运营的国际自由/开源软件 (FOSS) 门户。

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

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

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

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.