Drupal 迁移属于那种能安稳待在下个季度计划里的项目,直到某个日期让它变得紧迫。眼下正有两个日期在做这件事,而其中只有一个还没到来。

Drupal 7 已于 2025 年 1 月 5 日失去官方支持。任何还在跑它的站点,已经一年多没有任何安全保障了。Drupal 10 将在 2026 年 12 月 9 日走到生命周期终点,正好是 Drupal 12 发布的同一周,此后它不会再收到任何形式的发行版。如果你正处在这两个版本之一,问题已经不是要不要动,而是走哪条路、要花多少钱。

你现在的位置: 从 Drupal 10 到 Drupal 11 是一次真正的升级,同一个站点原地更新,通常两到六周。从 Drupal 7 到 Drupal 11 根本不是升级,而是一次带着内容迁移的重建,通常需要三到六个月。把这两件事混为一谈,是这个领域里最昂贵的错误,因为 Drupal 7 站点常常按升级报价,然后超支到四倍。


两种截然不同的迁移

迁移这个词,罩住了除名字之外几乎毫无共同点的两份工作。

Drupal 10 到 11 是升级。 架构不变。你的实体、字段、视图和配置都会跟着走。工作重心是依赖管理:确认每一个贡献模块都有兼容 Drupal 11 的发行版,把自定义代码中已废弃的接口调用清理干净,再迁到仍受支持的 PHP 版本上。这件事更像细致而不是困难,维护良好的站点两周左右就能收工。

Drupal 7 到 Drupal 11 是重建。 Drupal 8 用 Symfony 组件重写了整个平台,替换了模块接口、主题层和配置系统。除了内容,没有任何东西会自动过来,而内容本身也是通过一套专门搭建的迁移流程过来的,而不是某个升级脚本。你原来的模块已经不存在了,主题必须用 Twig 重写,自定义代码要在另一套架构上重新实现。

第二种情形正是 Drupal 7 站点拖了这么久的原因。诚实的说法是,你不是在升级一个站点,而是在建一个新站点,然后把内容带过去。


每条 Drupal 迁移路径的成本

下面的数字假设英国代理商的费率,以及一个复杂度中等的站点。这里说的复杂度指内容类型、贡献模块和自定义模块的数量,而不是页面数量。

Drupal 10 到 11,维护良好的站点。 两到四周,大约 6,000 至 15,000 英镑。这是幸运的情况:模块都是新的,自定义代码不多,主要工作是测试。

Drupal 10 到 11,长期失修的站点。 四到八周,大约 15,000 至 35,000 英镑。这里的拦路虎是没有 Drupal 11 版本的贡献模块、针对已被移除接口写下的自定义代码,还有同样必须往上挪的 PHP 版本。每一个被弃置的模块都变成一次抉择:找替代品、自己接手维护,或者把它的行为重新实现一遍。

Drupal 7 到 Drupal 11。 三到六个月,常见区间是 40,000 至 120,000 英镑,规模大或改造重的站点还会更高。区间这么宽,是因为它本质上是一笔重建预算。内容迁移本身往往是较小的那一半;主题、定制功能和外部集成才是较大的那一半。

从 Drupal 7 换到别的平台。 有时这才是正确答案。如果当初选择 Drupal 的理由已经不再成立,比如站点如今实际上只是一个带博客的营销站,那么换到更简单的方案,可能比在 Drupal 内部迁移更省钱,往后的运行成本也会下降。我们关于 WordPress 与定制开发 的对比说明了这条界线落在哪里,而 Drupal 网站开发指南 也坦率地写了 Drupal 不适合的场合。


为什么贡献模块决定你的工期

几乎每一份 Drupal 升级估算,都成败于贡献模块的盘点,而这也是最值得先做的一件事。

把站点用到的每一个贡献模块列出来,逐个检查是否存在与目标版本兼容的稳定发行版。你会发现结果落进四类。有些已有兼容版本,什么都不用做。有些有候选版本或问题队列里的补丁,可以通过 Composer 打上。有些已被弃置,你必须找替代品、自己接手这个模块,或者用自定义代码替掉它的功能。还有些已被并入 Drupal 核心,这是整个盘点过程里让人高兴的意外。

这次盘点把一个含糊的项目变成一个可以计数的项目。在它完成之前,任何报价都是猜测;没有做盘点就给固定价的供应商,要么加了很厚的余量,要么正准备接连提出变更请求。

同样的逻辑适用于自定义模块,只是工具不同。Drupal 的废弃检测工具会扫描自定义代码,报告那些已被移除或即将被移除的接口调用,把我们有一些自定义代码这句含糊的话,变成一份带文件名和行号的具体清单。


实际会出什么问题

有几种失败模式,几乎在每一次 Drupal 迁移里都会重演。

环境之间的配置漂移。 如果改动是直接在生产后台里做的,而不是导出到配置文件,那么你的预发布环境就不是忠实副本,测试的价值也比你以为的低。在迁移进行到一半时发现这一点很常见,而且总是要付出时间。

从来没有大家以为的那么规整的内容。 Drupal 7 站点常常以无人记录的方式堆积内容:字段被挪作他用,一个分类词汇表在充当工作流状态,正文字段里粘着带内联样式的 HTML。一次迁移会把这些一次性全翻出来,每一处都需要一个知道内容用途的人来拍板。

媒体与文件处理。 Drupal 处理媒体的方式在 Drupal 7 之后有过很大变动。文件、图片样式和嵌入媒体很少能一一对应,媒体库庞大的站点应当为这一项单独列预算,而不是假定它随内容迁移免费附送。

网址与搜索排名的连续性。 这一条伤的是业务而不是进度。如果网址别名变了却没有跳转,你就会丢掉旧站点挣来的排名。每一次迁移都需要一份完整的网址清单、一张跳转对照表,以及上线之后的验证。我们那篇讲如何迁移网站而不损失流量 的指南详细讲了这个过程,它适用于换平台,就像适用于换域名一样。

多语言内容。 如果站点以多种语言运行,那就要预期迁移会明显更久。语言处理在 Drupal 7 之后被重建过,翻译后的内容、翻译后的配置以及按语言划分的网址规则,各自都需要单独照看。


工作该按什么顺序排

顺序比多数团队预想的更重要,排错了就会返工。

先做贡献模块和自定义代码的盘点,在任何估算之前。然后把站点挪到受支持的 PHP 版本,以及当前大版本的最新发行版上,因为这会从真正的升级过程中剔掉一整类噪音。到那时才去尝试跨大版本这一步。

在旧环境旁边搭起新环境,而不是原地升级。这样你才有地方反复演练内容迁移,而你一定会需要,因为迁移在真正跑一次之前,会先被跑很多次。

把内容迁移当作代码来对待。Drupal 的迁移框架允许你把迁移定义写在配置里并反复执行,也就是说你可以清空重来、调整映射、再跑一遍。那些不去修迁移定义、而是在新站点里手工修内容的团队,最后会落到无法重跑的地步,从那以后旧站点上一处小小的内容改动,就变成一次人工对账。

最后,在接近尾声时安排一段内容冻结,并且尽量短。冻结拖得久,编辑就会绕开你,于是恰好产生了你本想避免的那种漂移。


要不要彻底离开 Drupal

这是个合理的问题,它值得一个诚实的答案,而不是一句辩护。

当初选择 Drupal 的理由如果依然成立,就留下来:复杂的内容建模、细粒度权限、多语言要求、繁重的编辑流程,或者无障碍与公共部门方面的义务。Drupal 在这些方面确实很强,而且从现在起的升级路径已经稳定,大版本周期两年一次,可以预期。

当站点已经离那些需求越来越远时,就该考虑换。相当多的 Drupal 7 站点如今实际上只是一个带新闻和联系表单的营销站。把这样的站点放在 Drupal 内部迁移,等于为你早已不用的能力付重建的钱。

这个决定应当取决于内容模型和编辑工作量,而不是你的开发者偏好哪个平台。如果没有人能说清 Drupal 为你做了哪些更简单的平台做不到的事,那本身就是一条信息。


先做盘点,再谈报价

Mecanik 把 Drupal 升级与迁移放在我们的网站开发服务 之下承接。我们从贡献模块和自定义代码的盘点开始,因为正是它把一个没有边界的项目变成一个确定的范围,而且即便你之后把活儿交给别人,这份盘点也值得拥有。

对 Drupal 10 站点来说,明智的做法是现在就规划迈向 Drupal 11 的那一步,而不是等到十一月,那时所有人都在做同一件事。对 Drupal 7 站点来说,安全状况本身已经是充分的理由。如果你的瓶颈是人手而不是能力,我们关于招聘 Drupal 开发者 的指南讲了该看哪些方面。

告诉我们你在哪个版本上,站点大约用了多少贡献模块和自定义模块,我们会告诉你,上面这些路径里你实际面对的是哪一条。


相关文章: 遗留 PHP 现代化:2026 指南Symfony vs Laravel 2026:该选哪个 PHP 框架API 安全:2026 年如何保护一个公开 API英国医疗和医疗保健网站开发 2026


常见问题

Drupal 10 什么时候停止支持? Drupal 10 将在 2026 年 12 月 9 日走到生命周期终点,正好是 Drupal 12 发布的同一周。该日期之后它不会再收到任何发行版,安全修复也包括在内。因此,仍留在这个版本上的站点等于在无支持状态下运行。

一次 Drupal 迁移要花多少钱? 维护良好的站点从 Drupal 10 升级到 11,通常需要 6,000 至 15,000 英镑。如果模块和自定义代码长期失修,费用会升到 15,000 至 35,000 英镑。从 Drupal 7 到 Drupal 11 是带内容迁移的重建,常见区间是 40,000 至 120,000 英镑甚至更高。

为什么从 Drupal 7 到 Drupal 11 贵这么多? 因为那根本不是升级。Drupal 8 用 Symfony 组件重建了整个平台,替换了模块接口、主题层和配置系统。模块必须更换,主题必须用 Twig 重写,自定义代码必须重新实现,内容则通过一套专门搭建的迁移流程带过去。

从 Drupal 10 升级到 11 需要多久? 如果站点的贡献模块都是新的、自定义代码不多,两到四周即可。若必须绕开被弃置的模块或已被移除的接口,则需要四到八周。让估算变得可靠的,是事先完成的贡献模块盘点。

我可以改成从 Drupal 迁到 WordPress 吗? 有时这确实是正确的选择,尤其当一个 Drupal 7 站点已经变成简单的营销站,不再需要复杂内容建模、细粒度权限或多语言能力时。请依据你的内容模型和编辑工作量来决定,而不是依据平台偏好。