使用最小停机时间迁移 Joomla! 1.5 网站
Joomla! 1.5 已经有一段时间不再由 Joomla! 项目支持。您仍然可以继续使用基于 Joomla! 1.5 的网站,但不会再发布任何更新(包括安全更新)。此外,Joomla! 2 以及 Joomla! 3 等版本拥有许多新功能和改进。一旦您开始使用 Joomla! 2 或 Joomla! 3,您会发现管理 Joomla! 1.5 网站显得非常过时,并且您会注意到 Joomla! 的实际改进。
您应该真正地将您的 Joomla! 1.5 网站迁移到 Joomla! 项目目前支持的任何版本。不幸的是,仍然有太多的 Joomla! 1.5 网站,原因多种多样。缺乏时间、预算、动力,推迟等。
有时,原因可能是迁移的复杂性。最近,一个运行在 Joomla 1.5 上的复杂网站需要进行迁移。这是一个真正的挑战,我想要在这里分享获得的知识和技能,以便帮助您迁移您可能还拥有的所有类型 Joomla! 网站。
Joomla! 网站,Exact Pays Bas
Exact 是一家全球重要的企业软件供应商,为中小企业提供完整的 PGI(集成管理软件)解决方案。Exact 为特定行业提供解决方案,并为工业、分销和物流公司、专业服务和会计公司提供云解决方案。Exact 已经使用 Joomla! 多年,在许多网站上。荷兰 Exact 网站是由 Joomla! 1.5 驱动的,需要迁移。
这是荷兰最大的 Joomla! 网站之一,是 Exact 的主要营销、沟通和销售工具。对于 Exact 来说,为其访客提供一个稳定且不间断的网站是一个重点。例如,这就是为什么其托管环境是完全冗余的原因。
许多内容编辑每天都在网站上工作,因此该网站始终处于不断演变之中。该网站使用多个(定制)扩展,并包含大量菜单项、文章和模块。
关于迁移的重要要求
在迁移过程中,提出了强制性要求:在一天半内迁移网站,最大可用性中断时间为2小时,且在夜间进行。预期的结果是,网站在布局、功能、URL、菜单、文章等方面保持不变,但由Joomla! 2.5驱动。简而言之:访客不应察觉或体验Joomla! 1.5和Joomla! 2.5版本的差异。
但如何实现这些目标?对于Exact来说,传统的Joomla!迁移(复制网站,迁移,调整参数并上线)不是一个可行的选择。这将花费太多时间,而迁移过程中的网站副本会在几小时内变得过时。
传统的Joomla!迁移
为了更好地了解即将到来的迁移,我们进行了第一次传统迁移。为了迁移Joomla!核心数据,我选择使用SP升级扩展。这个付费扩展安装在一个没有示例数据的新Joomla! 2.5安装上。1,500篇文章、650个菜单项和950个模块通过这个扩展导入。
该网站使用了多个第三方扩展;幸运的是,所有扩展都有适用于Joomla! 2.5的版本。这些扩展通过将数据库表复制到Joomla! 2.5数据库中迁移,该过程可以用SP升级完成,然后我们安装了这些扩展。扩展将检测过时的数据库结构并在必要时更新它们。至于模板,已经有一个适用于Joomla! 2.5的版本。
新功能,新参数
到目前为止,所有步骤都是Joomla!迁移的传统步骤。网站数据现在已迁移,但如果您检查和查看网站,您会发现它没有像预期的那样显示。这通常是由于与之前版本相比,Joomla!的新或不同的参数设置。一个典型的例子是Joomla!的菜单模块。在Joomla! 1.5中,您可以配置从0到3级的显示;在Joomla! 2.5中,为了获得相同的显示效果,您需要配置1到4级。Joomla! 2.5中不再存在0级。
自定义迁移脚本
因此,需要检查哪些数据和参数调整是必要的,以确保Joomla! 2.5版本与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'); }
完整的脚本可以在以下地址找到: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
');
完整的脚本可以在以下地址找到:https://gist.github.com/sanderpotjer/9311435
大幅减少迁移时间
您很容易想象用于Extract迁移的脚本更为复杂,但上述内容为您展示了一个自定义迁移脚本的力量:通常在Joomla!后端执行的所有迁移操作,只需几秒钟即可完成,而不是几个小时甚至几天。这大大减少了迁移所需的时间,这在荷兰Exact网站的迁移过程中是必需的。
迁移脚本的另一个优点是您可以不断测试和改进迁移,直到达到预期的结果。
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)
网站迁移成功,耗时 6 分钟
看吧,正如您所看到的,Exact 荷兰的网站仅在 6 分钟内不可用。在这段时间内,整个网站及其数据已从 Joomla! 1.5 迁移到 Joomla! 2.5。
访客没有发现任何差异,之前下线前发送的表单提交已经处理并成功迁移。那些在当天早些时候对 1.5 网站进行修改的内容编辑员,在登录后可以体验到新的 Joomla! 管理界面。相反,他们可以在迁移后的网站上找到所有修改。没有任何数据丢失。
这次迁移的成功,最小化停机时间,值得我们庆祝。那时,我们品尝了唯一的荷兰式 Joomla 麦芽饼!
迁移建议
- 清理:确保网站完全干净。删除所有过时的文章、分类、模块和菜单,并在迁移前清空回收站。
- 备份并测试:进行备份并测试以确保其正确运行至关重要。
- 测试,测试,测试,再测试:我确信您不希望在迁移过程中遇到任何意外。了解您所期待的内容,在将迁移应用到远程网站之前,始终测试迁移。
- 准备备用方案:确保您可以在迁移过程中随时恢复旧网站的版本。
- 不要等待:现在迁移您的旧 Joomla! 网站。Joomla! 2.5 和 Joomla! 3.2 是目前唯一由 Joomla! 项目支持的版本。这些版本安全稳定,并提供了许多新功能和改进。
《Joomla 社区杂志》上发布的一些文章代表作者对特定主题的个人观点或经验,可能不代表 Joomla 项目官方立场
通过接受,您将访问 https://magazine.joomla.net.cn/ 外部第三方提供的服务
评论