Conférence Développeurs Magento
27 novembre 2013 • mageconf.org
Par Sébastien Lepers (SeL) http://meliweb.fr
Montée de version de Magento : la préparation, les étapes, les
pièges à éviter
Montée de version : le contexte
»S E-commerce : suivre (ou devancer) les tendances
●Version vieillissante
●Nouvelles fonctionnalités / améliorations
»G Nécessité technique
●Correction de bugs
●Compatibilité avec d'autres bibliothèques / extensions
»!Risques commerciaux
Historique des versions de Magento
1.01.0 1.11.1 1.21.2 1.31.3 1.41.4 1.51.5 1.61.6 1.71.7 1.81.8
1.101.10 1.111.11 1.111.11 1.101.10
20082008 20112011 2013201320092009 20102010 20122012 20142014
1.121.12 1.131.13 1.71.7 1.81.81.91.9
1.61.6
RIPRIP
CECE EEEE
PEPE 1.61.6 1.71.7 1.81.81.91.9
=> Possibilités multiples de changement de version / édition
Anticipation
» Version source / Version cible ?
» Édition ?
» Principales différences & impacts ?
» Versions des modules communautaires utilisés ?
» Qualité du code spécifique ?
» Niveau de respect des bonnes pratiques ?
o
N
La préparation : organisation
» Versionning de sources (Git-+)
●Création d'une branche pour la migration
» Récupération des archives de sources de Magento et des modules communautaires
●Downloader
La préparation : analyse de l'existant
» Code source modifié ?
●app/code/core
●app/code/community
●lib
●js
» Comparaison avec les sources de la version d'origine
La préparation : fusion des sources
»Remplacement des sources Magento (core/libs/...)
»! Attention à l'utilisation du glisser/déposer
●Risque de laisser des surcharges obsolètes
»g Étape par étape
»Recommandé pour les répertoires sans code spécifique :
●Suppression du répertoire
●Copie du répertoire de la nouvelle version
Peut-être supprimé dans la plupart des cas
Suppression / remplacement par la nouvelle version Fusion existant <> nouvelle version
Mise à niveau Légende :
|-- app
| |-- .htaccess
| |-- Mage.php
| |-- code
| | |-- community
| | | |-- Find
| | | `-- Phoenix
| | |-- core
| | | |-- Mage
| | | `-- Zend
| | `-- local
| |-- design
| | |-- adminhtml
| | | |-- default
| | | `-- mydesign Dans le cas d'un design de BO spécifique
| | |-- frontend
| | | |-- base
| | | `-- mydesign
| | `-- install
| |-- etc
| | `-- modules
| `-- locale
| |-- en_US
| `-- fr_FR
|-- downloader
|-- errors
| |-- mydesign/* Dans le cas d'un design spécifique au projet
| `-- default/*
| |-- 404.php
| |-- 503.php
| |-- default
| |-- design.xml
| |-- local.xml
| |-- local.xml.sample
| |-- processor.php
| `-- report.php
Supprimer les fichiers de déclaration des modules supprimés dans la nouvelle version
Remplacer par la version correspondante du module de traduction FR communautaire
Peut-être supprimé dans la plupart des cas
Suppression / remplacement par la nouvelle version Fusion existant <> nouvelle version
Mise à niveau Légende :
|-- includes
|-- js
| |-- calendar
| |-- extjs
| |-- flash
| |-- jscolor
| |-- lib
| |-- mage
| |-- prototype
| |-- scriptaculous
| |-- tiny_mce
| |-- varien
| `-- [...]
|-- lib
| |-- 3Dsecure
| |-- flex
| |-- googlecheckout
| |-- LinLibertineFont
| |-- Mage
| |-- PEAR
| |-- phpseclib
| |-- Varien
| |-- Zend
| `-- [...]
|-- media
|-- pkginfo
|-- shell
|-- skin
| |-- adminhtml
| | |-- mydesign/* Dans le cas d'un design de BO spécifique
| | `-- default
| |-- frontend
| | |-- base
| | |-- mydesign/*
| | `-- default
| `-- install
`-- var
|-- backups |-- cache |-- locks |-- log |-- report `-- session .htaccess index.php cron.php cron.sh get.php
Toute autre bibliothèque JS d'une version spécifique de Magento
Toute autre bibliothèque PHP d'une version spécifique de Magento
La préparation : modules communautaires
» Mise à jour des sources des modules complémentaires
●Module de paiement
●Module de livraison
●Traduction
●...
» Mêmes recommandations que pour la fusion des sources Magento
» Vérifier si les sources du module n'ont pas été modifiées lors des développements (mauvaise pratique très courante)
La préparation : thèmes
» Fusion entre les templates / layouts
» Nouvelle version du Thème de base vs Thème spécifique
●Mise à jour des appels à des méthodes/blocks/models obsolètes
●Améliorations
●Nouvelles fonctionnalités dans des templates existants dans la version antérieure
» Thèmes :
●Frontend
●Adminhtml (peu courant)
●Errors (souvent oublié...)
La préparation : BDD
»Toutes les données sont-elles indispensables ?
»Par exemple, les tables :
●report_compared_product_index ?
●report_viewed_product_index ?
●log_* ?
»Les vider avant la migration peut faire gagner en stabilité et en temps d'exécution des scripts d'upgrade
●Alternative à la suppression des données : dump avant migration + import après.
»BDD volumineuse et temps d'upgrade longs ?
Testez Magento-Upgrade-Replay : http://goo.gl/dhnwVq
La préparation : mise en maintenance
< v 1.4
●.htaccess : filtrage sur IP lors de la migration
●Préparation d'une page de maintenance statique (HTML/CSS)
>= v 1.4
●Utilisation du fichier maintenance.flag :
○ errors/default/503.phtml
La préparation
» CE1.8 ou EE1.13 : upgrade spécifique : http://goo.gl/C1p7kI
Répétition générale
» Copie de la BDD de prod
» T Mesure du temps d'exécution des scripts d'upgrade
» ! Volume de données
●Catalogue
●Clients
●Commandes
» Anticipation des problèmes
» Préparer le rollback en cas de gros problème -
Le jour J
»Tout est prêt ?
●Équipe au taquet
●Client et internautes prévenus d'une coupure de quelques minutes / heures...
»Go !
Le jour J : H0
»Copie de toutes les sources de la nouvelle version sur le serveur (dossier séparé : 'monsite.new')
»Copie des médias
»Copie du fichier app/etc/local.xml
●modification temporaire du nœud XML :
<initStatements>SET NAMES utf8; SET FOREIGN_KEY_CHECKS=0; SET UNIQUE_CHECKS=0;</initStatements>
»Préparation du .htaccess pour restreindre l'accès
Site accessible par tous
Le jour J : H + 30min
»Mise du site en maintenance (.htaccess)
»Sauvegarde de la base de données
»Copie de cette sauvegarde en lieu sûr e
»Vider les tables :
●report_compared_product_index ?
●report_viewed_product_index ?
●log_* ?
»Renommage de l'ancien répertoire racine du projet Magento :
●par ex : monsite -> monsite.back
»Renommage du nouveau répertoire avec le nom de l'ancien répertoire :
●par ex : monsite.new -> monsite
Site complètement inaccessible
Le jour J : H + 1
»Vider les dossiers :
●var/cache/
●var/full_page_cache/
»Exécuter le premier appel à l'application, de préférence en ligne de commande :
$ nohup php index.php > var/log/upgrade.log &
R
... Patienter jusqu'à la fin de l'exécution des scripts d'upgrade :●Quelques minutes ou quelques heures en fonction de la volumétrie de la BDD (et de l'écart de versions)
Site complètement inaccessible
Le jour J : H + 2
»Modification du fichier app/etc/local.xml
●Remettre le nœud XML initStatements à sa valeur d'origine :
<initStatements>SET NAMES utf8;</initStatements>
»Ouverture de l'accès au site pour l'équipe interne
»Contrôle général du site
»Tout est OK ? 8 Ouverture au public !
–Modification du htaccess ou suppression du fichier maintenance.flag
»! Suppression des fichiers de log, archives de livraison, données sensibles ...
Site publiquement inaccessibleSite accessible par tous
En cas de problème
»Malgré tout le soin apporté, ça a foiré ?
»Remise en place du dossier initial :
●par ex : monsite -> monsite.bad
●et : monsite.back -> monsite
»Import de la base de données dans son état initial
»Réouverture du site dans son état initial
»Analyse des problèmes rencontrés (logs, ...)
»Déterminer la cause
»Revoir la préparation de la migration
Conclusions
»! Adapter la méthodologie proposée aux spécificités de votre projet (hébergement, cache, ...)
»Importance du respect des bonnes pratiques :
●Ne pas toucher au core
●Ne pas toucher aux sources des modules communautaires !
●Limiter l'utilisation des rewrites
●Limiter la duplication de templates
●Réserver l'utilisation des surcharges dans app/code/local/Mage aux corrections de bugs du core
»Magento 2 simplifiera ce process douloureux
●Un unique répertoire pour toutes les ressources d'un module (PHP, layout, templates, CSS, images, ...)
»Possibilité d'améliorer :
●Contrôler les violations de contraintes de clés étrangères
Des questions ?
Merci !
Présentation à retrouver sur : http://meliweb.fr/mageconf-montee-version.pdf