The Joomla! Community Magazine™

Issue 2014 April > French

Migration complexe d’un site Joomla! 1.5 avec un minimum d’indisponibilité

Written by | Monday, 31 March 2014 20:00 | Published in 2014 April
Joomla! 1.5 n'est plus supporté par le Projet Joomla! depuis un certain temps déjà. Vous pouvez toujours continuer à utiliser un site en Joomla! 1.5, mais plus aucune mises à jour (y compris de sécurité) ne seront publiées. En outre, les versions Joomla! 2 comme Joomla! 3, bénéficient de nombreuses nouvelles fonctionnalités et améliorations. Vous constaterez, une fois que vous aurez commencé à utiliser Joomla! 2 ou Joomla! 3, la gestion d'un site Joomla! 1.5 semble vraiment démodée et vous remarquez combien Joomla! s’est effectivement amélioré.

Vous devriez vraiment migrer vos sites sous Joomla! 1.5 vers une des versions actuellement supportées par le projet Joomla!. Il existe encore malheureusement de trop nombreux sites Joomla! 1.5, et ce pour de multiples raisons. Un manque de temps, de budget, de motivation, on remet à plus tard, etc.

Parfois, la raison peut être la complexité d’une migration. Récemment, un site complexe fonctionnant sous Joomla 1.5 devait être migré. Ce fut un véritable défi et je tiens à partager ici les compétences acquises afin de vous aider à migrer tous les types de sites Web Joomla! que vous pourriez encore posséder.

Le site Joomla!,Exact Pays Bas

Exact est un important fournisseur mondial de logiciels d’entreprise et fournit une offre PGI (Progiciel de Gestion Intégré) complète pour les petites et moyennes entreprises. Exact fournit des solutions spécifiques à l’industrie et des solutions de cloud pour des sociétés industrielles, des sociétés de distribution et de logistique, de services aux professionnels et de comptabilité. Exact utilise Joomla! sur un grand nombre de leurs sites depuis déjà des années. Le site web d'Exact Pays Bas était propulsé par Joomla! 1.5 et avait besoin d’être migré.

Ce site web est l’un des plus gros sites Joomla! des Pays Bas et constitue le principal outil de marketing, de communication et de vente d’Exact. Pour Exact, bénéficier d’un site stable et disponible sans interruption pour ses visiteurs est une priorité. C’est par exemple pour cette raison que l'environnement d'hébergement est entièrement redondant.

De nombreux éditeurs de contenu travaillent quotidiennement sur le site, qui est donc en perpétuel évolution. Le site web utilise plusieurs extensions (personnalisées) et contient un nombre important d’éléments de menu, d’articles et de modules.

Des exigences importantes quant à la migration

Dans le cadre de la migration, des exigences contraignantes ont été émises : migrer le site Web en moins d’un jour et demi, avec une indisponibilité maximale autorisée de 2 heures, et ce pendant la nuit. Le résultat attendu était un site web avec à l’identique, que ce soit au niveau de la mise en page, des fonctionnalités, des URL, des menus, des articles, etc., mais propulsé par Joomla! 2.5. En bref : le visiteur ne devait pas s’apercevoir ou expérimenter de différences entre les versions Joomla! 1.5 et Joomla! 2.5 du site.

Mais comment procéder pour atteindre ces objectifs ? Une migration "traditionnelle" de Joomla! (faire une copie du site, le migrer, corriger les paramètres et le mettre en ligne) n'était pas une option envisageable pour Exact. Cela aurait pris trop de temps et la copie du site web en cours de migration aurait été obsolète en quelques heures.

Une migration traditionnelle de Joomla!

Afin d’obtenir un bon aperçu de la migration à venir, nous avons opéré une première migration traditionnelle. Pour migrer les données du Core de Joomla!, j’ai choisi d’utiliser l’extension SP Upgrade. Cette extension payante a été installée sur une nouvelle installation de Joomla! 2.5 sans les données d’exemple. Les 1 500 articles, les 650 éléments de menu et les 950 modules ont été importés via cette extension.

Le site utilise plusieurs extensions tierces ; par chance, toutes bénéficiaient d’une version fonctionnant sous Joomla! 2.5. Ces extensions ont été migrées en copiant les tables de base de données vers la base de données Joomla! 2.5, procédure qui peut être réalisée avec SP Upgrade, puis nous avons installé les extensions. Les extensions vont alors détecter les structures de bases de données obsolètes et les mettre à jour si nécessaire. En ce qui concerne le template, une version pour Joomla! 2.5 était déjà disponible.

Nouvelles fonctionnalités, nouveaux paramètres

Jusqu’ici, toutes les étapes sont traditionnelles d'une migration Joomla!. Les données du site web sont désormais migrées, mais si vous vérifiez et visualisez le site, vous remarquerez qu’il ne s’affiche pas comme il le devrait. Cela est souvent dû à de nouveaux ou différents paramétrages de Joomla!, par rapport à ses versions précédentes. Un exemple typique est le module de menu de Joomla!. Dans Joomla! 1.5, vous pouvez configurer l'affichage des Niveaux de 0 à 3 ; dans Joomla! 2.5 et afin d'obtenir un rendu identique, il vous faudra configurer les Niveaux de 1 à 4. Le Niveau 0 n’existant plus dans Joomla! 2.5.

Un script de migration personnalisé

Il a ainsi fallu vérifier quelles données et quels ajustements de paramètre étaient nécessaires afin de s’assurer que la version Joomla! 2.5 soit identique à la version 1.5. Au lieu d’opérer toutes les modifications en passant par l'interface Joomla!, les changements ont été opérés directement dans la base de données, tout en conservant une trace de ces modifications.
Tous ces changements ont été incorporés dans un script personnalisé composé d’un ensemble de requêtes SQL. La collecte de tous ces ajustements nécessaires prend du temps, mais une fois que le script est terminé, les requêtes SQL sont exécutées en quelques secondes.

La modification des niveaux de menu

Créons un simple script personnalisé de migration et concentrons nous à titre d’exemple sur l'ajustement des paramètres de niveaux de module. Créez un fichier nommé "migrate.php" et placez-le à la racine du site web. Ajoutez dans ce fichier le code ci-dessous. Le code modifiera les modules dont les ID sont 233, 294 et 357. Les paramètres de ces modules sont modifiés dans une boucle, puis sauvegardés dans la base de données. Le "startLevel" (niveau de départ) du module dont l’ID est 233 est modifiée de "2" en "3". Comme exemples supplémentaires, le "menutype" (type de menu) est ajouté au module dont l’ID est 294 et le texte "You are Here", qui est paramétré sur "Caché" est ajouté au module de breadcrumbs (fil de navigation) dont l’ID est 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'); }

Retrouvez le script complet sur : https://gist.github.com/sanderpotjer/9311435

Modifications spécifiques de certaines extensions

Des ajustements identiques peuvent être opérés n’importe où dans la base de données. En ce qui concerne l’extension ZOO, tous les éléments nécessitaient des ajustements au niveau du paramètre d’accès. Du fait de la migration, les éléments n’étaient plus visibles, ce qui n’était bien entendu pas notre intention. Vous pouvez ajouter le code suivant au script de migration afin de vous assurer que l’accès aux éléments ZOO dans la base de données soit correct.

/**
 * 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 
');

Retrouvez le script complet sur : https://gist.github.com/sanderpotjer/9311435

Réduire considérablement le délai de migration

Vous imaginez aisément que le script utilisé pour la migration d’Extract est bien plus complexe, mais les éléments ci-dessus vous donnent une bonne idée de la puissance d’un script personnalisé de migration : toutes les actions d’une migration que vous auriez normalement effectuées dans le Backend de Joomla! sont réalisées en seulement quelques secondes, au lieu de plusieurs heures, voire jours. Cela permet de réduire considérablement le temps nécessaire à une migration, ce qui était un impératif dans le cadre de la migration du site d’Exact Pays Bas.

Un autre avantage du script de migration est que vous pouvez tester, améliorer sans cesse la migration jusqu’à ce que le résultat escompté soit atteint.

La base Joomla! 2.5

En plus des changements dans la base de données, il est souvent nécessaire de modifier des fichiers serveur, comme les substitutions de template. Cela a également été réalisé lors du processus de test et résulte en une installation d'un Joomla! 2.5 standard incluant tous les fichiers nécessaires à la version finale du site web.

Afin de tester à plusieurs reprises le script personnalisé de migration, nous avons utilisé à chaque fois une nouvelle installation d'un Joomla! 2.5. Ainsi, une migration bien préparée permettra d'éviter toute mauvaise surprise lors de la migration finale.

Le Jour de la migration

Après des semaines de préparation, nous étions enfin prêts pour le grand jour. De nombreux et ultimes tests de migration ont été effectués et l’installation de base d'une base Joomla! 2.5 était prête dans un sous-dossier du domaine. Tout était prêt pour la migration finale du site web.
Nous avons alors suivi les étapes suivantes :

  1. Sauvegarde du site en Joomla! 1.5
  2. Mise hors ligne du site Exact.nl (Joomla! 1.5)
  3. Migration des données du Core Joomla! avec SP Upgrade (+/- 1 minute)
  4. Copie des tables des extensions vers la base de données Joomla! 2.5 (+/- 1 minute)
  5. Actions dans le site Joomla! 2.5 (+/- 2 minutes)
    • Installation des extensions tierces
    • Exécution des scripts de mise à jour des extensions tierces
    • Lancement de l’indexation du contenu avec Joomla! Smart Search
    • Résolution des problèmes d’asset avec ACL Manager
  6. Exécution du script personnalisé de migration (+/- 0,5 minute)
  7. Déplacement des fichiers du site en Joomla! 1.5 vers un dossier d’archives (+/- 0,5 minute)
  8. Déplacement des fichiers du site en Joomla! 2.5 vers la racine du site (+/- 0,5 minute)
  9. Modification des chemins /tmp/ en /log/ dans le fichier configuration.php, et suppression sur le serveur du script personnalisé de migration (+/- 0,5 minute)
  10. Remise en ligne du site Exact.nl (Joomla! 2.5)

Migration du site effectuée avec succès en 6 minutes

Et voilà, comme vous pouvez le constater, le site web d’Exact Pays Bas n’est resté indisponible que 6 minutes. Pendant ce laps de temps, l’intégralité du site et ses données ont été migrées de Joomla! 1.5 vers Joomla! 2.5.

Les visiteurs n’ont remarqué aucune différence, les soumissions de formulaires envoyés avant la mise hors-ligne ont été traitées et migrées avec succès. Les éditeurs de contenu qui avaient effectué, plus tôt le même jour, des modifications dans le site en 1.5, ont pu découvrir une nouvelle interface d’administration Joomla! après s’être connecté. En revanche, ils ont pu retrouver toutes leurs modifications dans le site migré. Aucune donnée n’a été perdue.

Le succès de cette migration, avec une mise hors-ligne minimale se devait d’être fêté. Et c'est alors que nous avons dégusté la seule et l’unique........ Joomla gaufre hollandaise !

joomla-stroopwafels

Quelques conseils de migration

  1. Nettoyage : assurez-vous que le site soit complètement propre. Supprimez tous les articles, catégories, modules et menus obsolètes et vider la poubelle avant la migration.
  2. Faites une sauvegarde et testez-la : il est impératif de faire une sauvegarde et de la tester pour vous assurer qu’elle fonctionne correctement.
  3. Testez, testez, testez et testez : je suis sûr que vous ne souhaitez pas rencontrer de surprises lors de la migration. Sachez à quoi vous attendre, testez toujours une migration avant de la migrer sur le site distant.
  4. Prévoyez une solution de secours : assurez-vous que vous pouvez remettre en ligne l’ancienne version du site à tout moment au cours de la migration.
  5. N’attendez pas : migrez maintenant vos anciens sites Joomla!. Joomla! 2.5 et Joomla! 3.2 sont les aujourd'hui les uniques versions supportées par le projet Joomla!. Ces versions sont sûres, stables et bénéficient de nombreuses nouvelles fonctionnalités et améliorations.
Read 4394 times
Tagged under French
Sandra Thevenet

Sandra Thevenet

Of course, I am passionate about the web, and even more about Joomla! and especially its fabulous Community of people with whom it is so easy to share.
Some call me the CSS fanatic and I must confess, it is truly a passion for me.
From my little island, I try to contribute and participate to the Joomla! project.

----

Vous êtres francophone et vous souhaitez écrire ou traduire un article sur notre CMS préféré ? Contactez-moi par mail : sandra.thevenet@community.joomla.org

 

Language Switcher

Current Articles