Налаштування мультисайтовості Magento 2 (Website/Store/Store View)

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.

Розробка та обслуговування будь-яких видів сайтів:

Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування мультисайтовості Magento 2 (Website/Store/Store View)
Складна
~3-5 робочих днів
Часті питання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування мультисайтовості Magento 2 (Website/Store/Store View)

Magento 2 дозволяє керувати кількома сайтами з однієї інсталяції. Це не просто зручність — при правильній архітектурі мультисайт значно зменшує операційне навантаження: одна кодова база, один деплой, спільні товари та клієнтська база з окремими каталогами та налаштуваннями.

Трирівнева ієрархія

Magento ділить сайти на три рівні з чіткою ієрархією:

Website — верхній рівень. Визначає:

  • Незалежну корзину та чекаут (покупки не переносяться між Website)
  • Спільну клієнтську базу (за замовчуванням) або ізольовану
  • Базову валюту
  • Групи Store

Store (Store Group) — середній рівень:

  • Корінну категорію каталогу (різні дерева категорій для різних Store)
  • Кілька Store View для однієї мовної версії
  • Один Store View повинен бути помічений як Default

Store View — нижній рівень:

  • Мову та локалізацію
  • URL (поддомен або шлях)
  • Переводи контенту

Типова структура:

Website: Main (myshop.com)
├── Store: Retail
│   ├── Store View: English (en_US)   [default]
│   └── Store View: German (de_DE)
└── Store: Wholesale
    └── Store View: English (en_US)   [default]

Website: Partner (b2b.myshop.com)
└── Store: B2B Catalog
    └── Store View: English (en_US)   [default]

Створення через Admin

Admin > Stores > All Stores

1. Create Website
   - Name: B2B Portal
   - Code: b2b (унікальний, тільки латиниця/цифри/підкреслення)
   - Sort Order: 2

2. Create Store (Store Group)
   - Website: B2B Portal
   - Name: B2B Catalog
   - Root Category: B2B Categories (створюється окремо)
   - Default Store View: (вибирається після створення Store View)

3. Create Store View
   - Store: B2B Catalog
   - Name: English
   - Code: b2b_en
   - Status: Enabled
   - Sort Order: 1

Конфігурація Nginx для мультисайту

Варіант 1 — різні поддомени:

# /etc/nginx/sites-available/magento-retail.conf
server {
    listen 443 ssl http2;
    server_name shop.example.com;
    root /var/www/magento/pub;

    set $MAGE_RUN_CODE "base";
    set $MAGE_RUN_TYPE "website";
    include /etc/nginx/snippets/magento.conf;
}

# /etc/nginx/sites-available/magento-b2b.conf
server {
    listen 443 ssl http2;
    server_name b2b.example.com;
    root /var/www/magento/pub;

    set $MAGE_RUN_CODE "b2b";
    set $MAGE_RUN_TYPE "website";
    include /etc/nginx/snippets/magento.conf;
}

Варіант 2 — URL-шляхи (один домен):

server {
    listen 443 ssl http2;
    server_name example.com;
    root /var/www/magento/pub;

    # Визначення Store View по URL-шляху
    location ~ ^/b2b {
        set $MAGE_RUN_CODE "b2b_en";
        set $MAGE_RUN_TYPE "store";
        rewrite ^/b2b/?(.*) /$1 break;
    }

    location / {
        set $MAGE_RUN_CODE "base";
        set $MAGE_RUN_TYPE "website";
    }

    include /etc/nginx/snippets/magento.conf;
}

Варіант 3 — через PHP entry point (найбільш гнучкий):

// pub/index.php — кастомне відображення до Bootstrap::run()
use Magento\Framework\App\Bootstrap;

require __DIR__ . '/../app/bootstrap.php';

$host = $_SERVER['HTTP_HOST'] ?? '';
$params = $_SERVER;

$runCodes = [
    'shop.example.com'   => ['type' => 'website', 'code' => 'base'],
    'b2b.example.com'    => ['type' => 'website', 'code' => 'b2b'],
    'de.example.com'     => ['type' => 'store',   'code' => 'store_de'],
];

if (isset($runCodes[$host])) {
    $params['MAGE_RUN_TYPE'] = $runCodes[$host]['type'];
    $params['MAGE_RUN_CODE'] = $runCodes[$host]['code'];
}

$bootstrap = Bootstrap::create(BP, $params);
$app = $bootstrap->createApplication(\Magento\Framework\App\Http::class);
$bootstrap->run($app);

Налаштування URL для Store View

Admin > Stores > Configuration > Scope: [Store View]
> General > Web > Base URLs

Base URL: https://b2b.example.com/
Base Link URL: https://b2b.example.com/
Base Static View Files URL: https://b2b.example.com/pub/static/
Base Media Files URL: https://b2b.example.com/pub/media/

Для HTTPS:

> Base URLs (Secure)
Secure Base URL: https://b2b.example.com/
Use Secure URLs on Storefront: Yes
Use Secure URLs in Admin: Yes

Окремі каталоги

Кожний Store має свою Root Category. Це дозволяє показувати різні дерева категорій:

Admin > Catalog > Categories

Створити корінну категорію "B2B Categories":
├── Промислове обладнання
│   ├── Станки
│   └── Вимірювальні прилади
└── Розходні матеріали

Створити корінну категорію "Retail Categories":
├── Електроніка
├── Побутова техніка
└── Інструменти

Товари можуть бути спільними — один товар прив'язаний до категорій з різних дерев.

Scope конфігурації

Більшість налаштувань Magento мають Scope: Global → Website → Store View. Налаштування Store View перекривають Website, які перекривають Global.

Admin > Stores > Configuration
Поточний scope: вибирається у верхньому лівому кутку

Приклад — різні методи доставки для різних Website:
Scope: Website B2B
  > Sales > Shipping Methods
    Table Rates: Enabled
    Free Shipping: Disabled (для B2B показуємо реальну вартість)

Scope: Website Retail
  > Sales > Shipping Methods
    Table Rates: Enabled
    Free Shipping: Enabled (від 3000 USD)

Через CLI з указанням scope:

# Встановлення базового URL для конкретного Website
bin/magento config:set --scope=websites --scope-code=b2b web/unsecure/base_url https://b2b.example.com/
bin/magento config:set --scope=websites --scope-code=b2b web/secure/base_url https://b2b.example.com/

# Для Store View
bin/magento config:set --scope=stores --scope-code=b2b_en general/locale/code en_US
bin/magento config:set --scope=stores --scope-code=b2b_en general/locale/timezone UTC

bin/magento cache:flush

Деплой статики для кількох тем

При мультисайті різні Website/Store можуть використовувати різні теми:

# Деплой для всіх тем та локалей
bin/magento setup:static-content:deploy en_US de_DE \
    --theme MyCompany/retail \
    --theme MyCompany/b2b \
    --jobs=4 \
    -f

Спільна клієнтська база проти ізольованої

За замовчуванням клієнти спільні для всієї інсталяції — email унікальний глобально. Для ізоляції клієнтів по Website:

Admin > Stores > Configuration > Scope: Global
> Customers > Customer Configuration > Account Sharing Options
  Share Customer Accounts: Per Website

Після зміни — обов'язковий bin/magento customer:hash:upgrade та переіндексація.

Продуктивність мультисайту

Кожна Store View додає навантаження на індексатори та кеш. При великій кількості Store View:

  • Індексер catalog_product_price — найбільш важкий, потребує оптимізації
  • Varnish FPC розділяє кеш по Store View через X-Magento-Tags
  • Redis кеш повинен мати окремі бази для різних типів даних

Моніторинг повільних індексаторів:

bin/magento indexer:status
bin/magento indexer:reindex catalog_product_price

# Час останньої переіндексації
SELECT indexer_id, status, updated FROM indexer_state;

Термін виконання

Додавання другого Website/Store зі спільним каталогом та окремими налаштуваннями: 2–3 дні. Повнофункціональний мультисайт з 3–5 Website, різними темами, ізольованими каталогами, окремою клієнтською базою та кастомними Nginx-правилами: 1–2 тижні. Якщо додати B2B-модуль Adobe Commerce з корпоративними акаунтами та прайс-листами: додатково 2–4 тижні.