- Автор: irbees2008
- Уровень сложности исполнения: Справочник
![]()
Мультисайт на движке NGCMS: плюсы и минусы
📌 Что такое мультисайт в 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 — это мощный инструмент для малых и средних сетей сайтов при условии, что все они работают на одном сервере, в руках одной команды и на одной версии движка. Он значительно снижает накладные расходы на обслуживание: одно обновление, одна кодовая база, единая точка управления. Расплатой за это является общая точка отказа, сложность изоляции и более высокий порог настройки по сравнению с «просто поставить ещё один сайт».
Можешь почитать и вот эту статейку " Много-уровневое адаптивное меню"
Это тоже интересно
- 19.04.25Гостевая книга:




