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

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

irbees2008 irbees2008 Опубликовано - 28 - апреля Разное
251 - 0
  • Автор: 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 — это мощный инструмент для малых и средних сетей сайтов при условии, что все они работают на одном сервере, в руках одной команды и на одной версии движка. Он значительно снижает накладные расходы на обслуживание: одно обновление, одна кодовая база, единая точка управления. Расплатой за это является общая точка отказа, сложность изоляции и более высокий порог настройки по сравнению с «просто поставить ещё один сайт».



Можешь почитать и вот эту статейку "Теги header"

Опрос

Ваше мнение

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

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

Теги

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

Статистика

  • Caйт cущecтвуeт: 4938 дней
  • Статических страниц: 10
  • Категорий: 28
  • Новостей: 625
  • Неопубликованных новостей: 8
  • Комментариев: 259
  • Зарегестрированных пользователей: 1485
  • Онлайн всего: [13]
  • Гости: [13]
  • Сегодня нас посетили: [4] irbees2008, dankeanke, Яндекс, Google
  • SQL запросов: 37
  • Генерация страницы: 0.041сек
  • Потребление памяти: 2.175 Mb 
  •   Яндекс.Метрика