Voici mes notes pour configurer rapidement plusieurs magasins à partir d’une installation Magento 1.5.1.0.
Ce tuto se sert d’une installation d’un serveur web dans un environnement de dev sous Ubuntu.
(voir Ubuntu 10.10 – Serveur de développement – Partie 1 et Ubuntu 10.10 – Serveur de développement – Partie 2)
Ajout : la gestion de l’URL Rewriting pour chaque magasins.
Préparation du poste hôte de VirtualBox
Pour commencer, étant donné que je suis dans un environnement de développement et pas sur internet, il faut que j’indique à ma machine (et aussi au serveur) qu’une URL pointe vers une adresse IP (je n’utilise pas de serveur DNS pour mes machines de dev.).
Par défaut, le serveur virtuel installé dans Virtualbox s’appelle monserveur.jbnet.lan, mais je voudrais que la même adresse IP réponde si dans mon navigateur j’utiliser les URL mag1.jbnet.lan et mag2.jbnet.lan.
Sur la machine hôte, il faut modifier le fichier /etc/hosts :
1 |
172.17.207.35 monserveur.jbnet.lan mag1.jbnet.lan mag2.jbnet.lan |
Préparation du serveur dans Virtualbox
Il faut aussi indiquer au serveur que c’est normal de répondre aux 2 noms supplémentaires.
Donc répétons cette dernière opération sur le serveur, modifions le fichier /etc/hosts :
1 |
172.17.207.35 monserveur.jbnet.lan mag1.jbnet.lan mag2.jbnet.lan |
Si je teste mes URL dans mon navigateur, c’est bien le même serveur qui répond.
Préparation de Magento
Avant de configurer les magasins dans Magento, il faut absolument ajouter les catégories articles.
Voici l’arborescence que j’ai utilisé dans ce mémo :
Remarquez que je n’ai pas utilisé la catégorie par défaut (celle qui n’a pas de nom).
J’ai créé une catégorie racine (ex : Mag 1) puis les catégories à utiliser dans le magasin (ex : Catégorie 1 Mag 1)
Configuration des magasins dans Magento
Dans le menu « Système » > « Gestion des magasins », cliquer sur le bouton « Créer un site web »
- Nom : nom du site web en français (ex: Mag 1)
- Code : code du site web sans espace, ni caractères accentués, que de l’alphanumérique. (ex : mag_1)
Noter le code car il sera utilisé par Apache et dans le .htaccess de Magento.
Ensuite, il faut créer un magasin, cliquer sur le bouton « Créer un magasin » :
- Site web : sélectionner le site précédemment créé.
- Nom : nom du magasin en français (ex : Boutique Mag 1)
- Catégorie racine : sélectionner la catégorie racine du magasin. Cette catégorie ne s’affichera pas dans le magasin, seulement ses sous-catégories.
Maintenant, il faut créer la vue, c’est à dire ce que voit le visiteur.
Cliquer sur le bouton « Créer une vue magasin » :
- Magasin : choisir le magasin
- Nom : nom de la vue en français (ex : Vue Boutique Mag 1)
- Code : code de la vue
- Statut : Activé (de préférence 😉 )
- Ordre de tri : rien pour le moment.
Voici le résultat final de ma configuration :
Maintenant, il faut configurer Magento pour utiliser plusieurs URL.
Dans le menu « Système » > « Configuration », sélectionner « Web »
D’abord vérifier au niveau global que la redirection automatique et la réécriture du serveur web sont désactivées.
Enregistrer les modifications.
Par contre, je vais l’activer pour Mag 1 et Mag 2.
Pour cela, utiliser le menu déroulant « Portée de la configuration courante » (en haut, à gauche), et sélectionner « Mag 1 ».
Je décoche « Utiliser la valeur par défaut » et je choisis « Oui ».
Même chose pour Mag 2
Puis, dans le même écran, par défaut, il y a cette configuration :ig
Dans le menu déroulant « Portée de la configuration courante » (en haut, à gauche), sélectionner « Mag 1 ».
Dans les onglets « Non sécurisé » et « Sécurisé », modifier le champ « URL de base » :
URL de base : décocher « Utiliser la valeur par défaut » et saisir l’URL du magasin.
Ex : http://mag1.jbnet.lan/demo/test_mags/
Dans le menu déroulant « Portée de la configuration courante » (en haut, à gauche), sélectionner « Mag 2 ».
Effectuer la même manipulation, mais en utilisant l’autre URL.
Sauvegarder les modifications.
Configuration d’Apache
Si vous utilisez l’URL d’origne du serveur, vous n’avez aucune catégorie qui s’affiche.
Si vous utiliser une des URL configurées plus haut, toujours rien, et c’est normal.
Editer le fichier /etc/apache2/httpd.conf.
Normalement, il est vide (sur mon serveur Ubuntu en tout cas…).
C’est là que le code du magasin intervient !!
Ajouter les lignes suivantes :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# racine <VirtualHost *:80> DocumentRoot "/var/www/" ServerName monserveur.jbnet.lan ErrorLog "/var/log/magento.monserveur-error.log" CustomLog "/var/log/magento.monserveur-access.log" common <Directory "/var/www/"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all < / Directory> < / VirtualHost> # mag1 <VirtualHost *:80> DocumentRoot "/var/www/demo/test_mags/" ServerName mag1.jbnet.lan ErrorLog "/var/log/magento.mag1-error.log" CustomLog "/var/log/magento.mag1-access.log" common <Directory "/var/www/demo/test_mags/"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all < / Directory> < / VirtualHost> # mag2 <VirtualHost *:80> DocumentRoot "/var/www/demo/test_mags/" ServerName mag2.jbnet.lan ErrorLog "/var/log/magento.mag2-error.log" CustomLog "/var/log/magento.mag2-access.log" common <Directory "/var/www/demo/test_mags/"> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all < / Directory> < / VirtualHost> |
Note : enlever les cotes et les espaces sur les balises fermantes de Directory et VirtualHost, sinon la ligne est supprimée dans mon éditeur. Désolé.
Note 2 : le VirtuelHost #racine a pour DocumentRoot « /var/www ». Dans mon envirronnement, je veux garder l’accès à mon serveur pour les autres sites de test.
Relancer Apache :
1 |
/etc/init.d/apache restart |
Si vous avez un seul site web, plusieurs magasins configurés dans Magento, il faut remplacer MAGE_RUN_TYPE « website » par MAGE_RUN_TYPE « store »
Attention !!
J’ai volontairement laissé le DocumentRoot à la racine du site.
Mais dans ma configuration, le site de Magento est dans le répertoire : /var/www/demo/test_mags
Donc il faut penser à modifier le fichier .htaccess de Magento. Rechercher la ligne qui contient « RewriteBase », activez la et modifier en fonction de votre installation. Dans mon cas :
1 |
RewriteBase /demo/test_mag/ |
Option : Configuration du .htaccess de Magento
Si vous ne pouvez pas avoir accès au fichier Apache pour ajouter la configuration des magasins, vous pouvez utiliser le fichier .htaccess de Magento.
Ajouter et modifier ces lignes à la fin du fichier .htaccess :
1 2 3 4 5 6 7 8 9 10 11 12 |
SetEnvIf Host ^monserveur.jbnet.lan MAGE_RUN_CODE=base SetEnvIf Host ^monserveur.jbnet.lan MAGE_RUN_TYPE=website SetEnvIf Host ^mag1.jbnet.lan MAGE_RUN_CODE=mag_1 SetEnvIf Host ^mag1.jbnet.lan MAGE_RUN_TYPE=website SetEnvIf Host ^mag2.jbnet.lan MAGE_RUN_CODE=mag_2 SetEnvIf Host ^mag2.jbnet.lan MAGE_RUN_TYPE=website |
Si vous avez un seul site web, plusieurs magasins configurés dans Magento, il faut remplacer MAGE_RUN_TYPE=website par MAGE_RUN_TYPE=store.
Pour pouvoir utiliser l’URL Rewriting, commenter la ligne RewriteBase et ajouter les lignes suivantes :
1 2 3 4 5 6 7 |
#RewriteBase / SetEnvIf Host ^monserveur.jbnet.lan RewriteBase /demo/test_mags/ SetEnvIf Host ^mag1.jbnet.lan RewriteBase / SetEnvIf Host ^mag2.jbnet.lan RewriteBase / |
Au cas où, supprimer tous les répertoires qui sont dans le répertoire /var/cache.
Fin !
Tester les différentes URL dans le navigateur.
URL d’origine du serveur :
URL de mag 1 :
URL mag 2 :
Bonjour, je me pose une question, après avoir lit cet article. comment les proprios des sites (Mag1,Mag2) vont géré leurs catalogue de produit et leur commandes via la même interface?
Merci.
Bonjour,
Le mémo est basé sur une ancienne version de Magento.
La configuration peut être différente aujourd’hui.
Il est possible de gérer les accès via les profils utilisateurs, mais je n’ai pas vérifié.
Essayez du coté du « Magento User Guide »
http://merch.docs.magento.com/ce/user_guide/Magento_Community_Edition_User_Guide.html
Si je trouve plus d’infos, je reviendrais compléter ma réponse.
Bonjour,
Je trouve l’article très intéressant, car je veux créer un site avec trois volets (résidentiel, commercial et usagé) mais est-ce que je vais pouvoirs créer une interface différente pour chacun d’eux (ex: couleur du header différant pour chacun afin que l’utilisateur comprenne bien qu’il à changer de volet) et aussi as-tu trouver une réponse pour le commentaire de m.mohamed, car je me pose aussi cette question? Merci d’avance!
Bonjour Yohann.L,
Merci pour le message !
Pour répondre à la première question, chaque magasin déclaré dans Magento peut avoir son propre template. Une fois les magasins déclarés, il faut utiliser la liste déroulante « Portée de la configuration courante » dans « Système > Configuration » puis, après avoir sélectionné le magasin, aller dans « Configuration > Désign » et enfin l’onglet « Thèmes ».
Par contre, une gestion des utilisateurs aussi fine que demandée n’est actuellement pas possible nativement en tout cas jq la version 1.9, je n’ai pas encore testé la version 2.
Soit il faut développer un module de gestion ACL spécifique par rapport au besoin, soit utiliser plusieurs instances Magento et voir s’il est possible d’avoir une instance maitre pour la gestion du catalogue.
Bon courage !
Bonjour,
Je travaille pour un groupe et nous sommes en train de faire créer un site click&collect pour 180 magasins.
Pourriez-vous me donner votre avis car nous rencontrons de gros problème de perf.
En effet, l’agence web par laquelle nous passons a créé 180 vue pour les 180 magasins.
Ils ont utilisé le module Aitoc Multi-Location Inventory pour la gestion de stock indépendant de chacun des magasins.
Le problème est que la mise à jour des stocks est une catastrophe, soit le site plante soit ça mets plus de 90s pour mettre à jour le stock d’un produit sur un magasin ..
L’agence me demande de gonfler le serveur mais je pense que c’est plus un problème de config magento .. Notre site est sur AWS avec 3 serveurs dédiés 1 pour le front, 1 pour le back et 1 pour la BDD et le tout est loadballancer et la config est tout de même ultra gonflée..
Avez-vous des retours sur ce module ou avez vous déja était confronté à ce problème de perf ?
D’avance merci pour votre retour.
Ps : l’article est très intéressant 😉
Bonjour,
Effectivement, gonfler les perfs d’un serveur est le réflexe de beaucoup de prestas dans ce cas de figure.
Mais de là à vous confirmer ou non s’il a raison, cela relève de la voyance.
En effet, seul un audit poussé et effectué par une société tierce pourrait vous en apprendre d’avantage sur les actions à entreprendre.
Pour ce cas spécifique de mise à jour des stocks, il est admis que Magento est très lent (en tout cas pour les version 1.x) et ce quelque soit le serveur utilisé.
C’est pour cela qu’il est parfois préférable de passer par des scripts de mise à jour qui n’utilisent pas ou peu les API Magento lors des traitements de masse.
Surtout si vous avez demandé à votre presta des spécificités que Magento ne gère pas en natif.
Mais effectivement, le choix du ou des serveurs participe grandement, mais ça ne fait pas tout. Il y a également l’optimisation du code de mise à jour, la structures des fichiers sources, l’absence de redondance d’informations, la configuration du système, Apache, Nginx, PHP, etc.
Chaque cas est spécifique.
Sinon, quelque chose m’échappe. Vous parlez de load balancing, mais dans votre architecture, je ne vois qu’un serveur back (dédié admin Magneto je présume ?), un BDD et surtout un seul front.
Ce front c’est Magento ou un http-proxy ? Si c’est un Magento, il n’y a pas de load balancer puisqu’il faut au moins 2 serveurs Magento pour cela. Si c’est un http-proxy (qui sert justement au load balancing entre autre), il devrait y avoir au moins 1 serveur web derrière. Etes-vous sûr qu’un load balancer est mis en place ?
Ceci dit, ça n’a que peu d’importance, puisque c’est le serveur back-office qui doit surement être utilisé pour la mise à jour. C’est donc lui et le serveur BDD qu’il faut optimiser.
Une petite astuce que j’ai mis en place sur un site Magento qui avait le même problème : sur le serveur BDD, utiliser tmpfs pour créer des partitions en mémoire RAM du serveur et y stocker les fichiers de bases de données MySQL ou Percona (qui est plus rapide d’ailleurs). Ça aide beaucoup sur les temps d’accès à la base de données.
Également utiliser tmpfs pour certains répertoires de Magento (comme /var, /media, etc..)
Ce n’est pas une solution à votre problème, mais ça aide à retrouver un peu de souffle…le temps de l’audit.
Bon courage !