Source: Magento 2 dev docs (official) – Multiple websites or stores.

Consider the following terms:

  • Website—is the top-level container for sites, shipping methods, payment methods, and more. To create completely separate sites that do not share cart, shipping methods, or other you must create separate websites.

    Website customer accounts can be shared between multiple websites within a single Magento instance. A website contains at least one store. Catalog prices should be managed at the website level.

  • Store—is contained by a website. In turn, a store contains at least one store view.

    Multiple stores can share cart, user sessions, payment gateways, and more, but they have separate catalog structures and Catalog price.

    Catalog Qty (inventory) can not be managed at the store level. Inventory is managed at Website or Global level only.

    Store views change the way pages are presented, and are typically used to display a store with different layouts or languages. You can manage different currencies per store view.

Cas pratique

Ressources officielles utilisées:

Structure du projet en Websites > Store (group) > Store view:

Structure du projet vu de l’admin (Stores > All stores [Settings]):

N’hésitez pas à agrandir l’image.

Attention: voir la documentation officielle pour savoir comment affecter les différentes URLs à chaque store view.

Fichier <racine_projet>/docker/.env en fonction de cette structure de sites:

ATTENTION: votre fichier .env ne se trouvera pas nécessairement dans un dossier docker/. Il se trouve au même niveau que le fichier docker-compose.yml.

Notes:

  • Pour l’ensemble des variables d’environnement MAGENTO_RUN_FR1_*, FR1 est un libellé libre qui vous permettra d’identifier votre website ou votre store view (j’y viens…).
  • Pour la variable d’environnement MAGENTO_RUN_*_TYPE, vous avez le choix entre website et store (cf. colonne 1 (website) et 3 (store view) dans l’admin: Stores > All stores [Settings]).
  • Pour la variable d’environnement MAGENTO_RUN_*_CODE, renseignez le code de votre website ou de votre store view (en fonction du choix fait précedemment).
  • Pour la variable d’environnement MAGENTO_RUN_*_URL, renseignez l’URL précisée dans les champs Base URL, Base Link URL, Secure Base URL, Secure Base Link URL, accessibles dans l’admin depuis Stores > Configuration [Settings] > Web [General] > puis sous « Store View » (juste sous le titre « Configuration », en haut à gauche) choisissez un scope.

Fichier <racine_projet>/app/etc/env.php en fonction de cette structure de sites:

Attention: les fichiers de configuration type config.php et env.php ne seront pris en compte qu’après avoir exécuté la commande bash $ magento app:config:import.

Fichier hosts (de Windows pour ma part)

Extrait fichier docker-compose.yml (image « web » uniquement):

Les lignes env_file: .env et VIRTUAL_HOST: "vitalconcept.${EXT:-local},vital-agriculture.${EXT:-local},vital-equideos.${EXT:-local},vital-paysage.${EXT:-local},vital-agriculture-be.${EXT:-local},test.vitalconcept.local" ont été ajoutées/modifiées par rapport à notre configuration originale.

Attention: il faut re-up le container Docker après chaque ajout de site/nouvelle URL:

magento.conf de nginx:

Se connecter en bash au docker « web » et vérifier que les URLs ont bien été écrites dans la configuration nginx en tapant la commande suivante:
$ cat /etc/nginx/sites-enabled/magento.conf

Assigner une root catégorie du catalogue à un store (à un sous-domaine/une URL)

Magento 2 User Guide: Root Categories > Step 3: Assign the Root Category to the Store.