Хаки и Скрипты Next Generation CMS

Мультисайт на движке NGCMS: плюсы и минусы

irbees2008 irbees2008 Опубликовано - 28 - апреля Разное
  • Автор: irbees2008
  • Уровень сложности исполнения: Справочник

Мультисайт на движке NGCMS: плюсы и минусы

Статья основана на практическом опыте внедрения мультисайта в NGCMS (февраль–апрель 2026 г.) и актуальной документации проекта.

📌 Что такое мультисайт в NGCMS

Мультисайт — это режим работы NGCMS, при котором одна установка движка обслуживает несколько доменов одновременно. Каждый дополнительный сайт хранит свою конфигурацию в engine/conf/multi/{site_id}/, имеет изолированную папку загрузок (uploads/multi/{site_id}/) и может работать в одном из двух режимов базы данных: shared (общая БД с отдельным префиксом таблиц) или separate (полностью отдельная БД на своём MySQL-сервере). Основной (master) сайт управляет всеми дочерними через единую админ-панель.

Конфигурация хранится в engine/conf/multiconfig.php:

Код:
    $multimaster = 'main';
$multiconfig = [
'main' => ['domains' => ['example.com', 'www.example.com'], 'active' => 1],
'blog' => ['domains' => ['blog.example.com'], 'active' => 1],
'shop' => ['domains' => ['shop.example.com'], 'active' => 1],
];

✅ Плюсы

1. Одна кодовая база — несколько сайтов

Все дочерние сайты работают на одних и тех же файлах движка, шаблонах и плагинах. Обновление движка делается один раз и сразу применяется ко всей сети. Нет риска "забыть обновить" один из сайтов.


2. Два режима работы с базой данных

При добавлении дочернего сайта выбирается один из режимов:

  • Shared (общая БД) — сайт получает собственный префикс таблиц (например blog_, shop_), таблицы автоматически копируются с данными мастер-сайта. Не нужен отдельный MySQL-пользователь — всё в одной базе.
  • Separate (внешняя БД) — сайт подключается к совершенно другой MySQL-базе (отдельный host, dbname, user, password). Полная изоляция данных, подходит для случаев когда дочерний сайт должен физически находиться в другой базе.

В обоих случаях настройки хранятся в engine/conf/multi/{site_id}/config.php, переключение происходит прозрачно для движка.

3. Полное управление из одной админ-панели

Из интерфейса мастер-сайта можно:

  • добавить/удалить/включить/выключить дочерний сайт;
  • переключиться в конфиг нужного сайта прямо из страницы «Конфигурация» (GET-параметр site_id);
  • видеть список всех мультисайтов и их статусы в одной таблице.

4. Изолированные загрузки

Каждый сайт хранит медиафайлы в uploads/multi/{site_id}/: аватары, изображения, файлы, вложения. Папки создаются автоматически при добавлении сайта.

5. Динамический robots.txt

Файл robots.php в корне сайта определяет домен по $_SERVER['HTTP_HOST'] и отдаёт нужный robots.txt из engine/conf/multi/{site_id}/robots.txt. Поддерживаются плейсхолдеры {SITE_URL} и {DOMAIN}.

6. Встроенная мультиязычность

Система переводов статей (multilang_enabled). Сайты с флагом multilang_enabled = 1 связывают новости через translation_group_id. Для включения требуется одноразовая SQL-миграция (скрипт в engine/trash/upgrade_multilang.sql).

Код:
 $multiconfig = [
'main' => ['domains' => ['ru.example.com'], 'active' => 1, 'lang' => 'ru', 'multilang_enabled' => 1],
'en_site' => ['domains' => ['en.example.com'], 'active' => 1, 'lang' => 'en', 'multilang_enabled' => 1],
'uk_site' => ['domains' => ['uk.example.com'], 'active' => 1, 'lang' => 'uk', 'multilang_enabled' => 0],
];

7. Автоматизация на Windows (OSPanel)

При добавлении нового сайта движок автоматически создаёт junction link в папке OSPanel (mklink /J), .osp/project.ini с нужной версией PHP.

8. Гибкость размещения на хостинге

Поддерживаются три схемы деплоя: парковка доменов (рекомендуется), символические ссылки через SSH, .htaccess-редиректы. Протестировано на Beget, TimeWeb, Majordomo, RU-CENTER.

9. Инструменты миграции

Утилита fix_multisite_urls.php для массовой замены абсолютных URL на относительные пути мультисайта. Поддержка dry-run режима.

10. Раздельный SEO-контроль

Каждый дочерний сайт имеет собственные: robots.txt, sitemap, настройки ЧПУ, права доступа.

11. Изоляция конфигурации плагинов (extras/)

Каждый сайт хранит настройки плагинов в engine/conf/multi/{site_id}/extras/ — независимо от мастер-сайта.

12. Независимый планировщик задач

Собственный engine/conf/multi/{site_id}/cron.php для каждого сайта.

13. Переменная isMainSite в шаблонах

В Twig-шаблонах доступна переменная isMainSite, позволяющая скрывать/показывать блоки в зависимости от того, мастер-сайт это или дочерний.


❌ Минусы

1. Повышенный порог входа

Требуется ручная правка multiconfig.php, понимание структуры конфигов, настройка DNS/виртуальных хостов?

2. Риски общей базы данных (режим shared)

Ошибочный запрос может задеть чужие таблицы. Режим separate снимает этот риск, но добавляет накладные расходы. Автобэкап изолирован по prefix — каждый сайт бэкапит только свои таблицы.

3. Жёсткая зависимость от файловой системы (Windows)

Junction links не поддерживаются в Git и стандартных архиваторах. При переносе на Linux требуется пересоздавать ссылки через ln -s.

4. Нет изоляции кода плагинов

Код плагинов общий для всех. Нельзя поставить плагин «только для одного сайта».

5. Сложность отладки

Ядро загружается дважды, ошибки в multiconfig.php валят все сайты сразу.

6. Общие шаблоны

Папка templates/ единая. Для полной визуальной независимости нужны копии шаблонов.

7. Ограниченное разграничение прав администраторов

Управление мультисайтами — только с мастер-сайта. Любой админ мастера управляет всей сетью.

8. Масштабирование нагрузки

Один PHP-процесс, один MySQL-сервер. Горизонтальное масштабирование не поддерживается.

9. Миграция существующего сайта в мультисайт

Требуется замена абсолютных URL в контенте (утилита fix_multisite_urls.php).

10. Зависимость robots.txt от PHP

robots.php вместо статического файла — риск 500/404 при проблемах с PHP.

11. Общий кэш для всей сети

Папка engine/cache/ единая. Сброс кэша на одном сайте очищает кэш всей сети.


📊 Когда мультисайт оправдан

СценарийПодходит?
Сеть тематических блогов с общим движком✅ Да
Языковые версии одного сайта (ru/en/uk)✅ Да, особенно с multilang
Несколько витрин на одном аккаунте хостинга✅ Да
Тестовое окружение (dev/stage/prod)✅ Да
Разные сайты с разной нагрузкой и разными командами⚠️ Осторожно
Высоконагруженный проект (>50k RPS)❌ Нет
Сайты с разными версиями движка❌ Нет

📝 Итог

Мультисайт NGCMS — это мощный инструмент для малых и средних сетей сайтов при условии, что все они работают на одном сервере, в руках одной команды и на одной версии движка. Он значительно снижает накладные расходы на обслуживание: одно обновление, одна кодовая база, единая точка управления. Расплатой за это является общая точка отказа, сложность изоляции и более высокий порог настройки по сравнению с «просто поставить ещё один сайт».



Можешь почитать и вот эту статейку " Много-уровневое адаптивное меню"

Опрос

Ваше мнение

На каком движке ваш сайт?
Результаты

Последние комментарии

Обновленное

Теги

Anything in here will be replaced on browsers that support the canvas element

Статистика

  • Caйт cущecтвуeт: 4878 дней
  • Статических страниц: 10
  • Категорий: 28
  • Новостей: 624
  • Неопубликованных новостей: 8
  • Комментариев: 259
  • Зарегестрированных пользователей: 1449
  • Онлайн всего: [7]
  • Гости: [7]
  • Сегодня нас посетили: [6] irbees2008, Google, Яндекс, dankeanke, Google, Яндекс
  • SQL запросов: 40
  • Генерация страницы: 0.075сек
  • Потребление памяти: 10.131 Mb 
  •   Яндекс.Метрика