具有最小停机时间的复杂 Joomla! 1.5 迁移
Joomla 1.5 项目已经不支持很长时间了。您仍然可以使用 Joomla 1.5,但(安全)更新将不再发布。此外,Joomla 2 和 Joomla 3 都有很多新功能和改进。也许您已经注意到了:一旦您使用 Joomla 2 或 Joomla 3,管理 Joomla 1.5 网站真的感觉过时了,您会注意到 Joomla 实际上改进了多少。
您真的应该将 Joomla 1.5 网站迁移到 Joomla 项目当前支持版本的 Joomla。不幸的是,由于各种原因,仍然有许多 Joomla 1.5 网站存在。没有时间、没有预算、没有动力、推迟等。
有时是因为迁移的复杂性。最近,一个具有复杂条件的 Joomla 1.5 网站需要进行迁移。这是一个巨大的挑战,我想分享获得的知识,以帮助您迁移您可能拥有的任何复杂的 Joomla 网站。
Joomla 网站Exact荷兰
Exact 是领先的全球商业软件供应商,为小型和中型企业提供完整的 ERP 产品。Exact 为制造、批发和分销、专业服务和会计等特定行业开发行业特定的本地和云解决方案。Exact 已经使用 Joomla 为他们的许多网站开发了几年。Exact 荷兰网站由 Joomla 1.5 提供,需要迁移。
该网站是荷兰最大的 Joomla 网站之一,也是 Exact 的主要营销、沟通和销售工具。对于稳定的网站始终对访客开放,Exact 非常重视这一点。因此,托管环境完全冗余,例如。
许多内容编辑每天都在网站上工作,网站处于不断变化的状态。该网站使用多个(自定义)扩展,并包含大量菜单项、文章和模块。
对迁移的严格要求
对于迁移,提出了严格的要求:在1.5天内完成网站迁移,晚上最多允许停机两小时。预期结果是具有相同布局、功能、URL、菜单、文章等,但由Joomla 2.5驱动的网站。简而言之:访客不应在网站Joomla 1.5版和Joomla 2.5版之间看到或体验到差异。
但是如何实现这一点?对于Exact来说,“典型”的Joomla迁移(制作副本,迁移,修正设置,上线)不是一个选项。这会花费太长时间,且迁移过程中的网站副本几小时内就会过时。
典型的Joomla迁移
为了获得对迁移的良好概述,项目从典型的迁移开始。为了迁移Joomla核心数据,我更喜欢使用扩展程序SP Upgrade。这个付费扩展程序安装在一个没有示例数据的全新Joomla 2.5安装中。所有1500篇文章、650个菜单项和950个模块都通过此扩展程序导入。
网站使用几个第三方扩展程序,幸运的是,所有这些扩展程序都提供Joomla 2.5版本。这些扩展程序通过将数据库表复制到Joomla 2.5数据库中进行了迁移,这也可以使用SP Upgrade完成,然后安装扩展程序。扩展程序将检测过时的数据库结构并在需要时进行更新。对于模板,已经提供了Joomla 2.5版本。
新功能,新设置
到目前为止,所有步骤都是典型Joomla迁移的一部分。现在网站数据已迁移,但当你检查网站时,你会发现它看起来还没有达到预期。这通常是由于与旧版本Joomla相比,Joomla中的设置不同或新增造成的。一个典型的例子是Joomla菜单模块。在Joomla 1.5中,你配置为显示0到3级,在Joomla 2.5中,你需要配置1到4级才能达到相同的输出。Joomla 2.5中不再存在0级。
通常,你需要检查所有这些设置,并在必要时进行调整。根据网站的大小,这可能需要几个小时甚至几天。一旦检查并调整完毕,网站就准备好上线了。这对于Exact来说是迁移的主要问题,调整所有设置需要花费太多时间,且不可预测。
自定义迁移脚本
尽管如此,必须明确哪些数据和设置调整是必需的,以确保Joomla 2.5版本与Joomla 1.5版本相同。而不是通过Joomla界面进行更改,而是在数据库中直接进行更改,同时跟踪这些更改。
所有这些更改都已纳入一个自定义脚本中,该脚本由一系列SQL查询组成。收集所有这些必要的调整需要时间,但一旦脚本完成,SQL查询将在几秒钟内执行。
菜单级别更改
让我们创建一个简单的自定义迁移脚本,并以模块级别设置调整为例。创建一个名为“migrate.php”的文件,并将其放置在网站的根目录中。在该文件中添加以下代码。该代码将更改ID为233、294和357的模块。这些模块的参数在一个循环中被修改,然后保存到数据库中。ID为233的模块的“startLevel”从“2”更改为“3”。作为额外示例,为ID为294的模块添加了“menutype”,并将ID为357的面包屑模块的“您在这里”文本设置为“隐藏”。
define('_JEXEC', 1); // Connect with Joomla define('JPATH_BASE', __DIR__); require_once JPATH_BASE . '/includes/defines.php'; require_once JPATH_BASE . '/includes/framework.php'; // Database connection $db = JFactory::getDBO(); /** * Module changes */ // Get the modules that need changes $query = $db->getQuery(true); $query->select('*') ->from('#__modules') ->where('id IN (233,294,357)'); $db->setQuery($query); $modules = $db->loadObjectList('id'); foreach($modules as $module) { $module->params = json_decode($module->params); } // Change startLevel if ($modules[233]->params->startLevel == 2) { $modules[233]->params->startLevel = 3; echo('Module [233]: startLevel: 3
'); } // Set menutype if (empty($modules[294]->params->menutype)) { $modules[294]->params->menutype = 'mainmenu'; echo('Module [294]: menutype: mainmenu
'); } // Hide breadcrumb "You are here" if (!$modules[357]->params->showHere) { $modules[357]->params->showHere = 0; echo('Module [357]: showHere: 0
'); } // Save new module params foreach($modules as $id=>$module) { $params = json_encode($module->params); $mod = new JObject(); $mod->id = $id; $mod->params = $params; $result = $db->updateObject('#__modules', $mod, 'id'); }
完整脚本作为Gist:https://gist.github.com/sanderpotjer/9311435
特定扩展程序的更改
与这类似的调整可以在数据库的任何地方进行。对于ZOO扩展,所有项目都需要调整访问设置。由于迁移,项目不再可见,这显然不是我们的意图。您可以将以下代码添加到迁移脚本中,以确保ZOO项目的访问权限在数据库中得到纠正。
/** * Component changes */ // ZOO access fixes $query = $db->getQuery(true); $fields = array('access=1'); $conditions = array('access=0'); $query->update($db->quoteName('#__zoo_item'))->set($fields)->where($conditions); $db->setQuery($query); $result = $db->query(); echo('ZOO: Access set to 1
');
完整脚本作为Gist:https://gist.github.com/sanderpotjer/9311435
大幅减少迁移时间
您可能想象得到,用于精确迁移的脚本最终会变得很大,但上面的内容为您展示了自定义迁移脚本的强大功能:您在Joomla后端通常执行的所有迁移操作,只需几秒钟就能完成,而不是几个小时或几天。这极大地减少了迁移所需的时间,这对于Exact荷兰网站的迁移来说是非常有用的。
迁移脚本的另一个优点是,您可以在达到预期结果之前反复测试和改进迁移。
Joomla 2.5基础
除了数据库更改外,通常还需要更改服务器文件,如模板覆盖。这也是在测试过程中完成的,并最终产生了包含最终Joomla 2.5版本网站所需所有文件的Joomla 2.5基础安装。
为了对自定义迁移脚本进行彻底测试,每次都使用Joomla 2.5基础安装的全新副本。这样,迁移准备就绪,并且消除了最终迁移期间出现的意外惊喜。
重大迁移日
经过几周的准备,我们终于迎来了最终的迁移日。进行了几次最后的测试迁移,并将Joomla 2.5基础安装准备在域名的子文件夹中。一切准备就绪,开始网站最终的迁移,我们使用了以下步骤
- 备份Joomla 1.5网站
- 关闭Exact.nl(Joomla 1.5)网站
- 通过SP升级迁移Joomla核心数据(±1分钟)
- 将扩展表复制到Joomla 2.5数据库(±1分钟)
- Joomla 2.5网站中的操作(±2分钟)
- 安装第三方扩展
- 执行第三方扩展的升级脚本
- 通过Joomla Smart Search启动内容索引
- 使用ACL Manager解决资产问题
- 执行自定义迁移脚本(±0.5分钟)
- 将Joomla 1.5网站文件移动到存档文件夹(±0.5分钟)
- 将Joomla 2.5网站文件移动到网站根目录(±0.5分钟)
- 更改configuration.php中的/tmp/和/log/路径,并从服务器删除自定义迁移脚本(±0.5分钟)
- 重新上线Exact.nl(Joomla 2.5)网站
六分钟内完成Joomla迁移
如您所见,Exact荷兰网站仅关闭了六分钟。在这段时间内,整个网站及其所有数据已从Joomla 1.5迁移到Joomla 2.5。
访客没有察觉到任何差异,在停机前几分钟提交的表单已处理并成功迁移。当天在Joomla 1.5网站上更改内容的编辑人员在登录后看到了更新的Joomla管理员界面,但发现所有更改都回到了迁移的网站上。没有数据丢失。
需要庆祝这次非常短时间的成功迁移。为此,我们享用了唯一的、新鲜出炉的Joomla Stroopwafels!
一些迁移的经验教训
- 清理:确保网站完全清理,删除不再使用的文章、类别、模块和菜单,并在迁移之前清空回收站。
- 备份,并测试备份:始终备份网站,并测试是否能够正确恢复备份。
- 测试,测试,测试,再测试:我相信您不喜欢在迁移过程中出现惊喜。了解预期的结果,在迁移实时网站之前,总是测试迁移。
- 紧急回滚:确保您在迁移过程中任何时刻都能随时恢复网站的旧版本。
- 不要拖延:现在就迁移您不支持的Joomla网站。Joomla 2.5和Joomla 3.2是目前Joomla项目支持的两个版本。它们安全、稳定,并且拥有大量优秀的新功能和改进。
在Joomla社区杂志上发表的一些文章代表了作者对特定主题的个人观点或经验,可能并不与Joomla项目的官方立场一致。
通过接受,您将访问https://magazine.joomla.net.cn/之外的第三方外部服务
评论