PrestashopLe job de dév

Migrer Prestashop 1.7 – Local vers un hébergeur

Voici l’article pour installer Prestashop 1.7 en local, l’étape suivante est de le mettre en ligne sur un hébergeur. Voici comment migrer Prestashop 1.7 vers un hébergement et mettre votre boutique en ligne.

Prestashop 1.7 a été mis en place sur votre ordinateur « en local », maintenant qu’il est à jour, vous devez le mettre en production, donc de transférer votre boutique vers votre hébergeur pour la mettre en ligne.

Voici le processus de migration :

  1. Exporter la base de données locale
  2. Compresser tous les fichiers qui composent votre boutique
  3. Créer une nouvelle base de données chez votre hébergeur
  4. Importer les données locales de la base
  5. Transférer votre fichier zip et le décompresser chez votre hébergeur
  6. Modifier l’URL de votre boutique dans votre base de données en production
  7. Modifier les informations de connexion à la base dans les paramètres de Prestashop

Prérequis pour Migrer Prestashop

Avant de commencer, veuillez bien garder en tête l’article pourinstaller Prestashop 1.7 en local que j’avais déjà réalisé ici.

Configuration locale

Ma configuration reprend à l’identique ce qui est déjà existant dans ce tutoriel, à savoir :

  1. Une installation de MAMP équipée d’Apache, MySQL, PHPMyAdmin et PHP
  2. Une installation de locale Prestashop

En plus de ça, je vous conseille de disposer d’une application de FTP pour gérer les transferts de fichiers. Dans ce tutoriel j’utiliserai FileZilla qui est la référence gratuite. Sur Mac j’utilise l’excellent outil Transmit qui est payant.

Notez également que j’utiliserai certaines fonctionnalités intégrées du FTP de mon hébergeur et que de, pour ce tutoriel, je migrerai ma boutique vers un hébergement o2switch

Configuration chez l’hébergeur

Veillez à bien contrôler, dans votre hébergement, quelle version de PHP est utilisée.

Post Prestashop Migration1
Vérifiez que votre version de PHP soit compatible avec votre version de Prestashop

Attention, modifier la version de PHP peut empêcher votre site de fonctionner correctement (si vous avez déjà un site vitrine par exemple). Soyez prudents, vérifier l’ensemble de vos sites sur cet hebergeur et revenez en arriere en cas de probleme. Vous pouvez également créer une « Lune » chez o2switch qui vous permettra d’isoler cette boutique sous Prestashop 1.7 !

Préparation en local

Export de la base de données

Pour commencer, il faudra exporter le contenu de votre base de données depuis votre base de données locale vers la base de votre hébergeur.

Commencez par accéder à PHPMyAdmin depuis votre poste local. Si comme moi vous utilisez MAMP, rendez-vous sur la page de démarrage de celui-ci.

Là choisissez Tools > PHPMyAdmin.

Entrez vos données de connexion pour accéder à vos bases de données. Sur la gauche, cliquez sur la base de données de votre boutique Prestashop que vous souhaitez exporter.

Là cliquez sur l’onglet Exporter.

Dans les options d’export, vous pouvez choisir Rapide pour faire un export direct de toutes les données ou, si vous désirez plus de contrôle, cliquer sur Personnaliser.

Si vous choisissez de personnaliser l’export, vous aurez par exemple la possibilité de choisir un autre type de fichier que SQL pour la sortie ou de le compresser pour minimiser sa taille.

Une fois votre choix effectué cliquez sur Exécuter pour lancer l’opération. Un fichier [nom de votre base].sql devrait se télécharger, cela peut prendre un certain temps, soyez patient.

Une fois votre fichier correctement téléchargé, l’export de la base de données de votre boutique a été réalisé !

Export des fichiers

Une boutique Prestashop est constituée de centaines de fichiers par défaut. Et après mise en place d’un thème, d’un catalogue de produits, etc. vous pouvez vous retrouver avec une boutique plutôt importante en termes de nombre de fichiers et de poids.

21’145 fichiers, 4’576 dossiers, un total de 228 Mo rien que pour une simple installation

Vous pourriez exporter votre boutique directement chez votre hébergeur sans aucune action préliminaire.

Mais sachez que si vous tentez de charger le dossier de votre boutique tel quel par FTP, chaque fichier nécessitera une transaction avec le serveur FTP ce qui ralentira considérablement le transfert. Et quand je dis considérablement, c’est un euphémisme !

Autre problème sur lequel je me suis cassé les dents lors de ce genre d’export : il arrive fréquemment que certains fichiers ou dossiers retournent des erreurs et empêchent le transfert de l’intégralité de votre boutique.

Et bon courage pour aller retrouver les fichiers manquants lors d’un transfert problématique !

C’est pourquoi je vous conseil de commencer par compresser votre boutique Prestashop, c’est à dire la transformer en un fichier zip, avant de la transférer.

Cette action aura deux effets : transformer un dossier composé de centaines de fichiers en un seul fichier transférable facilement et réduire la taille du transfert.

Une fois la compression effectuée, connectez-vous à votre FTP avec votre application FTP ou en utilisant directement le gestionnaire de FTP mis à disposition par votre hébergeur.

Rendez-vous dans le dossier où vous souhaitez installer votre boutique et transférez votre fichier ZIP à cet endroit.

Préparation chez l’hébergeur

Importer la base de données locale

Création de la base de données

Connectez-vous à votre hébergeur et rendez-vous dans l’hébergement du site où vous allez installer votre boutique.

Dans les options de votre hébergement, vous devriez trouver la gestion de vos bases de données. Le but est de créer votre propre base pour votre boutique Prestashop.

Chez Infomaniak, cliquer sur Ajouter. Dans la nouvelle fenêtre donner un nom à cette base de données, dans mon cas je l’appellerai demo_prestashop.

Certains hébergeurs ne vous permettront pas de choisir le nom, vous pourrez simplement donner une description. Chez Infomaniak chaque base de données est préfixé par l’identifiant de votre hébergement.

Cet identifiant est également utilisé pour les utilisateurs de votre base de données. Si vous n’avez encore aucun utilisateur vous pouvez cliquer sur Créer un utilisateur associé et là, créer également un utilisateur qui sera administrateur de votre nouvelle base de données.

Conservez bien le nom de votre base de données, le nom de votre utilisateur et votre mot de passe pour plus tard.

Importation des données

Une fois la base créée et associée à votre utilisateur, rendez-vous dans le gestionnaire de base de données. En général les hébergeurs utilisent également PHPMyAdmin.

Dans Infomaniak, cliquez simplement sur Connexion à PHPMyAdmin. Là entrez vos informations de connexion tel que créés tout à l’heure.

Une fois dans la console d’administration, cliquez sur la base créée pour votre boutique sur la gauche et allez dans le menu Importer.

Là faites Choisir pour récupérer le fichier SQL à importer. Souvenez-vous, nous avons exporté la base de données locale tout à l’heure. Il suffit d’aller récupérer ce fichier SQL.

L’opération peut prendre un certain temps en fonction de la taille de votre base de données, soyez patient ! Une fois l’opération terminée, votre base en locale a bien été migrée sur votre hébergement.

Modifier l’URL de votre boutique en ligne

URL principale

Prestashop conserve dans la base de données les informations de votre base de données locale, définie lors de l’installation.

La plupart des réglages peuvent être conservés sans problème, cependant pour que votre boutique fonctionne il est impératif de modifier l’URL de votre boutique.

Par défaut, lors d’une installation locale, cette URL est localhost. Pour la modifier, cliquez sur votre base de données dans la barre de gauche et dans la liste des tables, recherchez la table ps_shop_url. Faites Enter pour lancer la recherche.

Une fois la table trouvée, cliquez sur celle-ci pour en voir le contenu. Vous ne devriez trouver qu’un seul enregistrement renseignant 3 informations importantes :

  • domain : Le nom de domaine HTTP de votre boutique
  • domain_ssl : Le nom de domaine HTTPS de votre boutique
  • physical_uri : Le chemin vers votre boutique depuis le nom de domaine

Dans mon cas, ma boutique se trouvera à l’adresse :

https://demo.ndd.fr/shop/

Donc les champs deviendront :

  • domain : lab.ndd.fr
  • domain_ssl : lab.ndd.fr
  • physical_uri : /shop/

Il n’y aura pas de distinction de domaine entre la version HTTP et HTTPS et le chemin vers ma boutique sera dans le sous-dossier /shop/. Si votre boutique est à la racine, entrez simplement / mais il est important de bien saisir le slash final !

URL de la boutique et SSL

Si vous recherchez la table ps_configuration dans la liste de table, vous verrez qu’elle se compose de plusieurs centaines d’enregistrements qui gèrent la configuration principale de votre boutique.

Dans ces enregistrements, 4 sont importants dans notre cas :

  • PS_SSL_ENABLED : Indique si SSL est activé, donc si on accèdera à votre boutique en HTTPS ou non
  • PS_SSL_ENABLED_EVERYWHERE : Flag supplémentaire permettant de forcer l’utilisation de SSL partout dans la boutique
  • PS_SHOP_DOMAIN : Identique à la colonne domain de la table ps_shop_url
  • PS_SHOP_DOMAIN_SSL : Identique à la colonne domain_ssl de la table ps_shop_url

Les 2 premiers enregistrements doivent être passées de 1 à 0 pour activer SSL si vous travaillez sur un hébergement en HTTPS, sinon vous pouvez les laisser à zéro sans autre.

Pour les 2 derniers enregistrements, selon certaines il n’est pas indispensable de les changer, Prestashop s’en occupant par la suite, mais je préfère le faire dès le départ pour éviter tout problème d’accès.

Décompresser votre boutique sur le FTP

Certains outils de FTP vous permettront peut-être de décompresser un fichier ZIP, mais pas FileZilla. Pas d’inquiétude, le gestionnaire de FTP d’Infomaniak propose cette option.

Accédez à vos réglages FTP dans l’hébergement Web de votre site et cliquez sur Connexion au FTP Manager.

Là entrez vos informations de connexion pour ouvrir une session et accéder aux fichiers présents sur votre hébergement.

Rendez-vous dans le dossier où se trouve votre fichier compressé et cliquez simplement sur ce dernier, là l’outil de décompression s’exécutera et vous demandera où vous souhaitez extraire vos données.

Souvenez-vous, si vous avez compressé votre dossier shop en local par exemple et que vous choisissez, comme dans cet exemple, de l’extraire à la racine de votre site, le dossier shop sera créé à nouveau. Votre boutique se trouvera alors dans ce sous-dossier et pas à la racine.

Vous pourrez, après avoir extrait vos fichiers, vous rendre dans le dossier shop et déplacer l’intégralité de son contenu à la racine si vous le désirez. Ce genre d’action ne prend qu’une seconde.

Modifier les paramètres de connexion de votre boutique

Maintenant si vous tentez d’accéder à votre boutique Prestashop vous devriez tomber sur une erreur 500. Si vous aviez le Mode Debug activé lors du transfert, l’erreur devrait être bien plus claire.

En gros, les paramètres de Prestashop sont toujours configurés pour fonctionner avec votre base de données locale et non avec la base de données crée chez votre hébergeur.

Pour modifier ces réglages, accédez à votre boutique par FTP et allez ouvrir le fichier [votre-boutique]/app/config/parameters.php. Il devrait ressembler à quelque chose de ce genre.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php return array (
  'parameters' =>
  array (
    'database_host' => '127.0.0.1',
    'database_port' => '',
    'database_name' => 'demo_shop',
    'database_user' => 'shop_admin',
    'database_password' => '******',
    'database_prefix' => 'ps_',
    'database_engine' => 'InnoDB',
    'mailer_transport' => 'smtp',
    'mailer_host' => '127.0.0.1',
    'mailer_user' => NULL,
    'mailer_password' => NULL,
    'secret' => 'y2I4Ig25CtK9uIcW596bK49c74uFmOeJbnVGoWX6AnudtuW2e4JZnNHS',
    'ps_caching' => 'CacheMemcache',
    'ps_cache_enable' => false,
    'ps_creation_date' => '2019-05-21',
    'locale' => 'fr-FR',
    'cookie_key' => 'renHkCaFZkM4V1QcnUZdkWfdVSpGo95IkevMEJVtA01Ix73WamoULVnN',
    'cookie_iv' => '12hqypXk',
    'new_cookie_key' => 'def00000fb0e609cfbe92d6745108ce0d351259eb5c614aedc08d9268da8bf6ea25a7578f0c8cbc59bd0de8c3f6ac714f812c41725ab06a470a72fe5fe321d6def907a91',
  ),
);
 

Voici les informations importantes que vous devrez changer, tel que je devrais les entrer avec ma configuration (le mot de passe étant masqué volontairement) :

1
2
3
4
'database_host' => 'demo.myd.o2switch.com',
'database_name' => 'demo_demo_prestashop',
'database_user' => 'demo_demo',
'database_password' => '******', 

Pas de soucis pour database_name, database_user et database_password, reprenez simplement ce que vous avez utilisé lors de la création de votre base de données tout à l’heure.

Pour l’hôte, en règle générale il ne s’agit pas de 127.0.0.1 ou de lolcalhost (du moins pas pour un hébergement mutualisé). Chez Infomaniak, en vous rendant dans la page de gestion de vos bases de données, l’hôte vous sera donné dans l’en-tête.

Il vous suffira de le reprendre dans ce fichier de configuration.

Une fois les modifications appliquées et enregistrez, actualisez la page de votre shop. L’erreur concernant votre base de données devrait avoir disparue… mais il y a de grande chance que la page reste introuvable !

Restaurer l’accès à votre boutique

Il est possible (voir même normal) que vous ne puissiez pas accéder à votre boutique immédiatement après cette modification. Voici deux erreurs que vous pourriez rencontrer.

ERR_TOO_MANY_REDIRECTS

Si la page vous renvoit cette erreur, cela signifie que la configuration définie dans votre table ps_shop_url créé une boucle de redirection infinie. C’est à dire qu’à chaque nouvel accès à votre boutique, celle-ci redirige vers une page incorrecte qui tente elle-même de rediriger vers cette même page et ainsi de suite.

Cette erreur m’est arrivée à plusieurs reprise, vérifiez bien les informations saisies dans cette table. Je répète les points importants :

  • domain et domain_ssl sont en générale similaires et représentent votre nom de domaine, sans http ni https en préfixe et sans / en fin de chaîne
  • physical_uri doit représenter l’accès à votre boutique à partir du nom de domaine. Si vous êtes à la racine, un simple / suffit, sinon, il faut entrer le slash de départ et de fin, sans le nom de domaine, par exemple /shop/

Si tout vous semble correct, n’hésitez pas à aller vérifier également dans la table ps_configuration que le SSL soit activé ou désactivé en fonction de votre utilisation.

Objet non trouvé ou Erreur 404

Si l’une de ces deux erreurs arrivent, une simple suppression du fichier .htaccess à la racine de votre boutique devrait vous permettre de les régler. Si l’erreur ERR_TOO_MANY_REDIRECTS persiste également, tentez la chose suivante.

Accédez à votre boutique par FTP et à la racine de celle-ci, supprimez le fichier .htaccess. Celui-ci est généré par Prestashop et s’occupe de toutes les redirections de votre boutique (utilisation des permaliens, restriction d’accès aux pages admin, etc.).

Une fois le fichier supprimé, si l’accès à votre boutique ne fonctionne toujours pas, accédez au back office de celle-ci. Pour se faire tapez simplement le chemin vers le dossier d’administration tel qu’il existe dans votre boutique, par exemple /admin123xyz.

Vous devriez pouvoir accéder à votre back office. Là le but sera de recréer un .htaccess propre. Pour se faire, rendez-vous dans Paramètres de la boutique > Trafic et SEO.

Dans cette fenêtre, allez sous Configuration des URL et désactivez le mode de réécriture d’URL. Et cliquez sur Enregistrer.

Puis activez ce mode à nouveau pour forcer la réécriture des fichiers .htaccess.

Une fois cette action réalisée, votre boutique devrait être accessible !

Conclusion

Ça y est, vous avez mis votre boutique en ligne et tout fonctionne.

Si ce n’est pas le cas, n’hésitez pas à me contacter pour me détailler votre problème.

Grâce à ce tutoriel, vous allez pouvoir mettre votre boutique en production sur votre hébergeur.

Problémes possibles:

En règle générale les droits hérités par le dossier parent chez l’hébergeur doit faire l’affaire, par défaut c’est du 775 : propriétaire lire, écrire, exécuter; groupe lire, écrire, exécuter; autre lire, exécuter.

En cas de problème, retomber sur ces droits là et ça devrait fonctionner.

Soucis pour accéder à la vitrine avec une page blanche lors de l’accès à la partie « admin ».

La solution consiste à activer le mode « debug » en modifiant la ligne 29 du fichier « config\defines.inc.php » :
« define(‘_PS_MODE_DEV_’, false); » par « define(‘_PS_MODE_DEV_’, true); »

Il suffit ainsi de modifier le booléen « false » par « true » puis de sauvegarder le fichier et recharger la page d’administration. Elle s’affiche correctement.

En désactivant le mode « debug », le problème persiste. La page blanche réapparait.

Il faut donc supprimé les dossiers « prod » et « dev » présents dans le dossier « var\cache\ ».

La partie administration s’affiche de nouveau, le mode « debug » étant désactivé.

Pour info, et éviter de s’arracher les cheveux si il vous en reste, une manipulation supplémentaire est à faire sur la base de donné avec une version 1.7.7.x :

J’ai été confronté à un souci (et ne suis pas le seul) et il me semble utile de le signaler.
Plus d’accès aux anciennes commandes après l’importation de la BDD. En cliquant sur une commande, on tombe sur une page d’erreur.

En cause, certains champs se remplissent en NULL alors qu’ils devraient être vides lors de l’import SQL ( https://github.com/PrestaShop/PrestaShop/issues/22215 ).

Les requêtes à lancer pour corriger :
Penser à modifier l’entête des tables suivant ce que vous avez configuré en installant votre boutique (ici « ps_ »)
Pensez à changer les dates, si besoin, sur les requetes sur le champ « available » des tables « ps_product » et « ps_product_shop »

UPDATE ps_address SET phone = '' WHERE phone IS NULL;
UPDATE ps_address SET phone_mobile = '' WHERE phone_mobile IS NULL;
UPDATE ps_address SET dni = '' WHERE dni IS NULL;
UPDATE ps_address SET other = '' WHERE other IS NULL;
UPDATE ps_address SET address2 = '' WHERE address2 IS NULL;
UPDATE ps_address SET company = '' WHERE company IS NULL;
UPDATE ps_address SET vat_number = '' WHERE vat_number IS NULL;
UPDATE ps_order_detail SET id_order_invoice = '0' WHERE id_order_invoice IS NULL;
UPDATE ps_order_detail SET product_reference = '' WHERE product_reference IS NULL;
UPDATE ps_order_detail SET product_supplier_reference = '' WHERE product_supplier_reference IS NULL;
UPDATE ps_order_detail SET product_isbn = '' WHERE product_isbn IS NULL;
UPDATE ps_order_detail SET product_upc = '' WHERE product_upc IS NULL;
UPDATE ps_order_detail SET product_mpn = '' WHERE product_mpn IS NULL;
UPDATE ps_order_detail SET download_hash = '' WHERE download_hash IS NULL;
UPDATE ps_orders SET gift_message = '' WHERE gift_message IS NULL;
UPDATE ps_order_payment SET transaction_id = '' WHERE transaction_id IS NULL;
UPDATE ps_order_payment SET card_number = '' WHERE card_number IS NULL;
UPDATE ps_order_payment SET card_brand = '' WHERE card_brand IS NULL;
UPDATE ps_order_payment SET card_expiration = '' WHERE card_expiration IS NULL;
UPDATE ps_order_payment SET card_holder = '' WHERE card_holder IS NULL;
UPDATE ps_order_carrier SET tracking_number = '' WHERE tracking_number IS NULL;
UPDATE ps_order_carrier SET id_order_invoice = '0' WHERE id_order_invoice IS NULL;
UPDATE ps_order_carrier SET weight = '0' WHERE weight IS NULL;
UPDATE ps_product SET isbn = '' WHERE isbn IS NULL;
UPDATE ps_product SET upc = '' WHERE upc IS NULL;
UPDATE ps_product SET mpn = '' WHERE mpn IS NULL;
UPDATE ps_product SET unity = '' WHERE unity IS NULL;
UPDATE ps_product SET supplier_reference = '' WHERE supplier_reference IS NULL;
UPDATE ps_product SET location = '' WHERE location IS NULL;
UPDATE ps_product SET redirect_type = '301-category' WHERE redirect_type = '';
UPDATE ps_product SET available_date = '2021-12-01' WHERE available_date IS NULL;
UPDATE ps_product SET cache_default_attribute = '0' WHERE cache_default_attribute IS NULL;
UPDATE ps_product_shop SET unity = '' WHERE unity IS NULL;
UPDATE ps_product_shop SET redirect_type = '301-product' WHERE redirect_type = '';
UPDATE ps_product_shop SET available_date = '2021-12-01' WHERE available_date IS NULL;
UPDATE ps_product_shop SET cache_default_attribute = '0' WHERE cache_default_attribute IS NULL;

Si ça peut aider, je vous conseille d’essayer de vider le dossier cache se trouvant dans l’installation de Prestashop sous /var/cache et d’essayer de supprimer le fichier .htaccess à la racine du dossier admin. Et éventuellement à la racine de l’installation de Prestashop, pour annuler la réécriture des liens. Ensuite si vous avez à vous rendre dans le back-office, essayez d’aller dans Trafic et SEO et de désactiver, puis réactiver la réécriture des URLs.

– concernant le poids exagéré du Presta, il y avait ~37 Go dans /img/tmp que j’ai supprimé (il se reconstruira)

– pour la DB, j’ai vidé la table « ps_layered_filter_block » (1,3 Go), et pour éviter une reprise de poids, j’ai désactivé le cache du module « Navigation à facettes » (NDD/modules/ps_facetedsearch/ps_facetedsearch-clear-cache.php?token=…)

Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop Migrer Prestashop