Настраивали мультисайт для холдинга с четырьмя брендами — столкнулись с дублированием кода и путаницей в контенте. Решение: одна установка Wagtail с несколькими сайтами. Наш опыт более 5 лет (10+ проектов) гарантирует, что вы получите надёжную архитектуру, где каждый домен живёт своей жизнью, но администрируется централизованно.
Мультисайтовость Wagtail — это инженерный подход, который экономит до 60% на хостинге и ускоряет деплой в 5 раз по сравнению с отдельными установками. Часто клиенты приходят с готовыми сайтами на разных CMS — задача объединить их в одну экосистему. Мы это делаем через мультисайтовость Wagtail, мигрируя контент и сохраняя SEO-показатели. При этом решаются типичные проблемы: N+1 запросы при раздельных базах, рассинхронизация шаблонов, сложность обновления — всё это уходит при централизованной архитектуре.
В документации Wagtail сказано: Multiple sites can be hosted from a single Wagtail instance. Это основа нашей работы. Мы настраиваем data migration для воспроизводимости на всех окружениях — dev, stage, production.
Какие проблемы решает мультисайтовость
- Дублирование кода. Вместо пяти копий одного проекта — одна codebase с обновлениями в одном месте.
- Путаница с контентом. Редакторы видят только свои страницы благодаря разграничению доступа. Никто случайно не сломает чужой лендинг.
- Затраты на поддержку. Один сервер вместо пяти — меньше администрирования, выше безопасность.
Как мы настраиваем мультисайт: пример из практики
Клиент — агентство с тремя сайтами для разных ниш (e-commerce, блог, портфолио). Мы сделали:
- одну базу PostgreSQL с общими пользователями и группами;
- три корневые страницы
HomePageс разными slug (ecommerce, blog, portfolio); - три записи в
wagtailcore_site:shop.example.com,blog.example.com,portfolio.example.com; - общую модель
ArticlePageдля всех сайтов, но с разными темами черезget_context; - разграничение доступа: три группы редакторов, каждая видит только свою ветку.
Результат: среднее время загрузки страниц — менее 1 секунды, время на добавление нового сайта — 2 часа. Подробнее о настройке читайте в Wagtail multi-site documentation.
Процесс работы
- Аналитика. Изучаем структуру каждого сайта, собираем требования к контенту и шаблонам.
- Проектирование. Определяем общие и раздельные модели страниц, проектируем схему медиатеки.
- Реализация. Настраиваем конфигурацию
wagtailcore_site, пишем data migration, добавляем группы доступа. - Тестирование. Проверяем каждый домен: роутинг, отображение контента, права редакторов.
- Деплой. Разворачиваем на production, настраиваем NGINX с прокси на один gunicorn.
Сравнение подходов: общие модели vs раздельные
| Критерий | Общие модели | Раздельные модели |
|---|---|---|
| Разработка | Быстрее, меньше кода | Медленнее, но гибче |
| Поддержка | Единая логика, патчи сразу для всех | Независимые изменения |
| Производительность | Меньше запросов, один кеш | Можно оптимизировать под сайт |
| Когда выбрать | Сайты похожей структуры (новости, блоги) | Кардинально разный контент (интернет-магазин + форум) |
Ориентировочные сроки
| Этап | Длительность | Результат |
|---|---|---|
| Аналитика | 0.5–1 день | Схема структуры |
| Проектирование | 1–2 дня | Архитектура моделей |
| Реализация | 2–3 дня | Готовый мультисайт |
| Тестирование | 1 день | Проверка на всех доменах |
| Деплой | 0.5 дня | Рабочая среда |
Базовая настройка на 2–3 домена с общими моделями занимает 1–2 дня. Стоимость рассчитывается индивидуально. При раздельных настройках брендов, кастомных медиатеках и разграничении доступа — 3–4 дня. Миграция существующего однодоменного сайта — от 2 дней. Точная стоимость зависит от сложности — свяжитесь с нами, чтобы оценить ваш проект.
Почему мультисайтовость выгоднее отдельных установок?
Установщик Wagtail за 5 минут — это иллюзия. Поддержка пяти копий означает пять раз обновить код, пять раз настроить SSL, пять раз мониторить. Мультисайт сокращает эти расходы в разы. По нашим замерам, при переходе на одну установку клиенты экономят 40–60% бюджета на хостинг и администрирование.
Что входит в настройку под ключ
- Конфигурация
wagtailcore_site(домены, порты, корневые страницы) - data migration для воспроизводимости
- Разделение медиатеки (опционально — теги или отдельная модель изображений)
- Разграничение доступа (группы, GroupPagePermission)
- Настройка NGINX (один upstream, несколько server blocks)
- Документация по добавлению нового сайта в структуру
- Рекомендации по кэшированию и CDN
Как организовать разграничение доступа?
Используем GroupPagePermission программно через data migration — это гарантирует, что на всех окружениях (dev/stage/prod) права одинаковы. Редактор сайта A не видит сайт B. Пример кода:
def setup_brand_editors(brand_root_page, group_name): group, _ = Group.objects.get_or_create(name=group_name) GroupPagePermission.objects.get_or_create( group=group, page=brand_root_page, permission_type='change', ) GroupPagePermission.objects.get_or_create( group=group, page=brand_root_page, permission_type='publish', ) return group Чек-лист перед запуском
- [ ] Проверить, что все домены указывают на ваш IP. - [ ] Настроить SSL-сертификаты для каждого домена. - [ ] Создать корневые страницы для каждого сайта в админке. - [ ] Выполнить data migration для сайтов и групп. - [ ] Проверить, что редакторы видят только свои страницы. - [ ] Настроить мониторинг (uptime, 5xx ошибки).Гарантируем стабильную работу под любой нагрузкой. Оцените свой проект — свяжитесь с нами для консультации. Не откладывайте оптимизацию — закажите аудит текущей архитектуры уже сегодня.







