Налаштовували мультисайт для холдингу з чотирма брендами — зіткнулися з дублюванням коду та плутаниною в контенті. Рішення: одна інсталяція 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 помилки).Гарантуємо стабільну роботу під будь-яким навантаженням. Оцініть свій проєкт — зв'яжіться з нами для консультації. Не відкладайте оптимізацію — замовте аудит поточної архітектури вже сьогодні.







