Magento : Migration vers le serveur de production

Cet article récapitule les différentes étapes pour migrer un serveur Magento depuis les serveur de développement / Recettes vers le serveur de production.

1/ Sauvegardez la base de données de votre installation de travail.

Pour cela, et à priori avec phpMyAdmin, exportez votre base au format .sql ou mieux, sous forme zippée. Attention, choisissez un format de compression qui sera reconnu par votre serveur de production (zip/gzip en général).


Vue de l’onglet “Exporter” dans phpMyAdmin. La compression Zip est ici sélectionnée et la base est prête à être exportée, il ne reste plus qu’à lancer la procédure en cliquant.

2/ Uploadez sur le serveur de production l’ensemble des fichiers nécessaires

Utilisez votre client FTP pour transférer l’intégralité des fichiers nécessaires.

Cette opération doit être suivie :
1) d’une lecture du message de récap’ de transfert, fourni par le client FTP afin de s’assurer qu’aucun fichier ne manque
2) d’une mise à jour de l’ensemble des droits des fichiers (705 sur l’ensemble, et 777 sur les répertoires var et media)

3/ Une fois le transfert terminé

Rendez-vous sur le serveur de production et supprimez le fichier app/etc/local.xml

Cette étape va nous permettre de forcer la relance du processus d’installation.

4/ “Installation”

Rendez-vous sur le site, vous devriez tomber sur la page d’Installation de Magento. Vous devrez avoir une base de données créée (et vide évidemment) sur le serveur de production. Suivez la procédure.

5/ Mise en place de la base de données

A cette étape, Magento a recréé le fichier app/etc/local.xml que nous avions supprimé.

Désormais, il contient les paramètres de la base de données de votre serveur de production.

A l’aide du phpMyAdmin de votre serveur de production, rendez-vous dans la base de données et videz toutes les tables. Pour cela, en bas de page, sélectionnez l’ensemble des tables listées, et utilisez le menu déroulant d’action (“Vider”).

Vous pouvez maintenant importer la base de donnée exportée à l’étape 1.

6/ Paramétrage de la base de données

Votre base de données contient désormais les informations renseignées lorsque vous travailliez sur le serveur de développement.

Avant de pouvoir continuer, il faut modifier deux paramètres dans la base de données du serveur de production.

Cliquez sur l’icone “SQL” une fois dans votre base de données. Une fenêtre s’ouvre. Entrez la commande suivante :

SELECT * FROM `core_config_data` WHERE `path` LIKE ‘web/%secure/base_url’

Un ou deux résultats vont être retournés. Concrètement, il s’agit là de modifier le paramètre “base url”, c’est à dire l’url de base de votre installation de Magento.

Exemple avec le site www.mondomaine.com
1) base unsecure url

Code :

http://www.mondomaine.com/


2) base secure url

Code :

https://www.mondomaine.com/


Vous devez donc modifier les deux valeurs retournées en fonction de l’url d’accès à votre site sur le serveur de production. N’oubliez pas le “/” à la fin de l’url.

7/ C’est terminé !

Si tout va bien, vous devriez maintenant pouvoir accéder sans souci au site fraichement migré. Veillez cependant à tester de manière intensive l’ensemble des pages fonctionnalités de votre boutique, avant une ouverture publique.

8/ Un souci quelconque ?

– Si vous avez une erreur 500, vérifiez les droits des fichiers sur le serveur conformément aux instructions du point 2/.
– Si vous avez une erreur de réécriture d’url ou si vous ne pouvez tout simplement toujours pas accéder à votre site, il est peut-être nécessaire de modifier le fichier .htaccess situé à la racine de votre nouvelle installation.

9/ Interventions postérieures à la migration

1- Sur les tables Core

Le transfert de la base sur le nouveau serveur génère une erreur d’exécution Notice: Undefined index:  0  in /home/sygma/www/app/code/core/Mage/Core/Model/Mysql4/Config.php on line 92
Pour corriger cette anomalie, il convient d’intervenir dans les 3 tables suivantes et dans cet ordre pour respecter les contrôles de clés étrangères :

core_website

core_store_group

core_store

mysql> select * from core_website;
+————+——-+————–+————+——————+————+
| website_id | code | name | sort_order | default_group_id | is_default |
+————+——-+————–+————+——————+————+
| 2 | admin | Admin | 0 | 0 | 0 |
| 1 | base | Main Website | 0 | 1 | 1 |
+————+——-+————–+————+——————+————+
2 rows in set (0.00 sec)

mysql> update core_website set website_id=0 where website_id=2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from core_store_group;
+———-+————+————+——————+——————+
| group_id | website_id | name | root_category_id | default_store_id |
+———-+————+————+——————+——————+
| 2 | 0 | Default | 0 | 0 |
| 1 | 1 | Main Store | 3 | 1 |
+———-+————+————+——————+——————+
2 rows in set (0.00 sec)

mysql> update core_store_group set group_id=0 where group_id=2;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> select * from core_store;
+———-+———+————+———-+———+————+———–+
| store_id | code | website_id | group_id | name | sort_order | is_active |
+———-+———+————+———-+———+————+———–+
| 4 | admin | 0 | 0 | Admin | 0 | 1 |
| 1 | default | 1 | 1 | English | 0 | 1 |
| 2 | german | 1 | 1 | German | 0 | 1 |
| 3 | french | 1 | 1 | French | 0 | 1 |
+———-+———+————+———-+———+————+———–+
4 rows in set (0.00 sec)

mysql> update core_store set store_id=0 where store_id=4;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

2- Sur la table Customer

Dans certains cas, vous pouvez vous retrouver sans produits affichés sur le Front alors qu’ils sont correctement affectés dans le back…

Comme indiqué dans ce post du forum Magento, vous devez alors intervenir sur la table customer_group en modifiant le champ customer_group_id de l’entrée NOT LOGGED IN en la mettant à la valeur 0

Liens vers les forums ayant aidé à ce tutoriel

– pour l’assistance à la migration : sur le site Fragento

– pour la gestion des erreurs postérieures à l’installation : sur le site de magento, sur un blog de développeur