Migration de Contao 3 à Contao 4

par

Comme décrit dans l’article sur la vie d’une application, il arrive le moment où un système doit évoluer vers une nouvelle version majeure.
Le problème étant que bien souvent, les changements sont tels qu’il est improbable de conserver les mêmes logiques. Les extensions et données alors présentes doivent donc être migrées !

Cela demande du temps, de l’attention, et un certain nombre de précautions pour ne pas tout envoyer dans le mur.

Contao ne faisant pas exception à cette règle, et la date de maintenance de sa version 3 étant officiellement expirée, voyons quelle est la procédure pour migrer vers Contao 4 en toute sécurité !

Backend Contao 3
Backend Contao 4

Pourquoi migrer ?

Si les deux screenshots mettent en évidence une amélioration drastique du backend, d’autres évolutions techniques justifient le passage à Contao 4.

Explorateur de fichiers
C’est le point noir de Contao 3, la gestion des fichiers est plutôt capricieuse, et dès que l’on a une structure un peu grande, on se perd facilement dans l’arborescence.
Dans Contao 4, non seulement on peut envoyer des fichiers directement dans les dossiers via drag n drop, mais on peut également rechercher un fichier existant.
La liste des images se charge également d’afficher la partie importante d’une image lorsqu’elle est définie.

 

Sécurité & Rapidité
Depuis le passage à Contao 4, l’équipe a décidé d’utiliser le framework Symfony pour permettre au CMS d’évoluer plus rapidement, sans avoir à réinventer la roue.
Non seulement le CMS se sécurise un peu plus, grâce à la communauté Symfony, et il devient également bien plus rapide, profitant d’un système de cache plus élaboré.

 

Gestionnaire d’extensions
Une des modifications les plus importantes est la séparation de la gestion des contenus de celle des extensions. Contao 4 passe uniquement par Composer et Packagist (Contao 3 disposait de son propre gestionnaire d’extensions), ce qui a facilité le développement et le déploiement d’extensions par la communauté.

 

Ce sont 3 des nombreuses améliorations notables que nous valent le passage de Contao 3 à Contao 4. Il y en a plein d’autres, améliorations ou évolutions, que l’on peut trouver sur le site officiel : https://contao.org/en/news.html

Pré-requis

En plus du système existant, vous avez besoin d’un endroit où héberger la nouvelle version de votre système. Autant les hébergeurs sont configurables pour disposer de deux dossiers, autant vous allez avoir besoin d’une seconde base de données.

Niveau contraintes techniques, on est sur la même lignée que Contao 3, il est toutefois recommandé d’utiliser la version 7 de PHP et la version la plus à jour de MySQL 5.

Si votre hébergement est restreint, il est recommandé de faire votre migration en local, avec une solution comme Wamp ou Xamp. Ainsi, vous simulerez grossièrement le comportement de votre serveur sans avoir à acheter d’autres services chez votre hébergeur.

Évidemment, vous devez faire des backups. Plutôt deux fois qu’une. Sauvegardez bien la structure des fichiers et la base de données. Une extension existe, qui fonctionne sous Contao 3 et 4 pour la base de données :
Contao 3 : https://legacy-packages-via.contao-community-alliance.org/packages/contao-legacy/backupdb
Contao 4 : https://packagist.org/packages/do-while/contao-backupdb-bundle

Pour vous aider dans la migration, préparez une feuille de route avec toutes les vérifications à effectuer avant et après vos travaux. Cela dépend beaucoup de votre projet, vous pouvez faire des captures d’écran, des exports de données et vérifier si tout est en ordre une fois la migration effectuée.

Enfin, évitez de faire évoluer vos modules pendant une migration. Les évolutions de fonctionnalités viendront après, une migration ne consiste qu’à passer d’un système à un autre, avec un fonctionnement le plus identique possible.

La procédure

Premièrement, vous devez préparer la nouvelle version. Le plus commun est de créer un sous-domaine temporaire pour cela, comme v2.domain.com ou bien dev.domain.com. Comme si cela était un nouveau site. Vous pouvez consulter notre article sur la gestion de plusieurs sites sur un hébergement à l'adresse suivante : https://www.webexmachina.fr/article/2018/02/gerer-multisites-hebergement-ovh.html

1. Installer le Contao 4
Installez Contao 4 via le Contao Manager à l’endroit souhaité, jusqu’à l’installation de la base de données.

 

2. Appliquer l’ancienne base de données
Ensuite, accédez à l’interface de gestion de la base de données (PHPMyAdmin bien souvent) et supprimez toutes les tables si elles ont été créées auparavant.
Importez la base Contao 3 du site en production dans la base utilisée par le Contao 4.

Contao a cet avantage de ne pas disposer d’un script de migration mais d’un calculateur de différence de données. Cela permet de voir toutes les différences entre votre base Contao 3 et celle de Contao 4 et de les appliquer petit à petit.

Dans un Contao basique, où vous n’utilisez que les modules natifs et les données les plus communes, vous pouvez appliquer la modification des données en ayant peu voire pas du tout de différences.

Dans le cas où vous avez des différences plus subtiles, elles se traiteront au cas par cas, lors de l’import des modules à l’étape 4.

 

3. Import des fichiers et des modèles
Contao 4 fonctionne comme la version 3 pour les templates et les fichiers. Vous devez importer tous les éléments dans les dossiers /files et /templates dans le Contao 4, à la racine.

Comme la base de données a déjà été importée, vous conserverez le lien entre tous les fichiers et les éléments de contenus qui les utilisent.
De même, toutes les présentations de page et modules utilisant des templates devraient être reliés de la même façon.

 

4. Import des modules
Dans Contao 3, les modules sont stockés dans system/modules. Contao 4 conserve une rétro-compatibilité avec ce système en permettant aux modules V3 de fonctionner comme en V4.
Pour en savoir plus sur ce fonctionnement, voir l’article à ce sujet : https://www.webexmachina.fr/article/2018/06/comment-developper-une-extension-contao-structure-backend.html

Il y aura toutefois probablement des ajustements à effectuer. Une grande majorité des fonctions devraient fonctionner exactement de la même façon, en renvoyant une potentielle alerte de dépréciation.
Dans le cas où des choses ne fonctionnent pas, il n’y a pas de secrets. Soit cela vient d’une extension tierce et elle dispose d’une alternative ou d’une mise à jour pour Contao 4, soit c’est un module spécifique et vous devez corriger les erreurs écrites dans les logs (dans le dossier /var/logs).

Comme les développeurs ont bien conscience que mettre à jour ses développements prend du temps, ils envoient des alertes de dépréciation, sous forme d’erreurs “non-bloquantes” lorsqu’une fonction obsolète est appelée.

Cela permet d’avertir les utilisateurs de cette fonction que cette dernière sera bientôt supprimée et qu’il faut mettre à jour les portions de code l’utilisant.

N’oubliez pas d’appliquer les modifications de bases de données à l’étape 2 dès que vous avez corrigé ou mis à jour la structure.

La transition avec Contao 5

Contao 4 est un assez grand tournant dans l’histoire du CMS. En effet, plutôt que d’utiliser leur propre framework, l’équipe a décidé de travailler avec le framework Symfony, pour se concentrer sur les spécificités du CMS plutôt que sur des éléments existant déjà ailleurs.

La version 4 est clairement une version de transition. Elle est rétro-compatible avec le système de Contao 3, ça ne sera pas le cas pour la version 5.

Contao dispose d’un plan de publication des versions, disponibles sur le site officiel : https://contao.org/en/release-plan.html

Cela permet aux développeurs d’anticiper les mises à jour importantes et d’adapter leurs travaux et projets en conséquences.

L’objectif de la version 4 est donc de laisser le temps à tout le monde de passer son Contao 3 en futur Contao 5. Les modules, développés sous la nomenclature Symfony, se montrent certes plus stricts, mais beaucoup plus pérennes et maintenables. De plus, en réduisant les spécificités dues au CMS, Contao ouvre ses portes à une communauté plus grande.

Une migration majeure est toujours laborieuse. Il faut faire attention à tout, suivre une feuille de route, et c’est parfois difficile d’obtenir un résultat similaire, en fonction de la spécificité de votre projet.

La migration vers Contao 4 est toutefois plutôt simple à appréhender. Les outils à disposition permettent de monitorer l’avancée des travaux pas à pas et de ne pas faire d’erreurs. Et la rétro-compatibilité permet ensuite de prendre son temps pour mettre à jour les spécificités de son propre système.