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 可以作为替代实现添加。

在标准的 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 名开发人员的坚实核心。凭借这种支持和专业精神,您知道它的未来将一如既往地光明。

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