Conférence Développeurs Magento. 27 novembre 2013 mageconf.org

Texte intégral

(1)

Conférence Développeurs Magento

27 novembre 2013 • mageconf.org

(2)

Par Sébastien Lepers (SeL) http://meliweb.fr

Montée de version de Magento : la préparation, les étapes, les

pièges à éviter

(3)

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

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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

(11)

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)

(12)

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é...)

(13)

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

(14)

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

(15)

La préparation

» CE1.8 ou EE1.13 : upgrade spécifique : http://goo.gl/C1p7kI

(16)

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 -

(17)

Le jour J

»Tout est prêt ?

Équipe au taquet

Client et internautes prévenus d'une coupure de quelques minutes / heures...

»Go !

(18)

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

(19)

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

(20)

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

(21)

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

(22)

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

(23)

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

(24)

Des questions ?

(25)

Merci !

Présentation à retrouver sur : http://meliweb.fr/mageconf-montee-version.pdf

Figure

Updating...

Sujets connexes :