Клієнт мучився з гальмами WordPress на shared-хостингу: база розрослася до 500 МБ, кеш не рятував, LCP стрибав вище 4 секунд. Ми запропонували Kirby CMS — flat-file систему без SQL. Результат: LCP впав до 0.8 с, розмір сайту — 2 МБ без бази. Клієнт відзначив, що після міграції сайт став літати, а панель інтуїтивно зрозуміла. Економія на хостингу сягає 70% за рахунок відмови від бази даних, що швидко окуповує вартість розробки. У цій статті розберемо встановлення під ключ: від сервера до мультимовності.
Згідно з документацією Kirby, включення кешу сторінок знижує час відповіді сервера на 50%.
Системні вимоги Kirby CMS
Kirby працює на будь-якому сучасному хостингу з PHP 8.1+. Мінімальний набір розширень: mbstring, curl, gd (або imagick), json, fileinfo. Веб-сервер — Apache з mod_rewrite або Nginx. Директорії content/, media/, site/accounts/ повинні бути доступні для запису. База даних не потрібна — всі дані в текстових файлах.
Таблиця мінімальних і рекомендованих вимог
| Компонент |
Мінімум |
Рекомендується |
| PHP |
8.1 |
8.3 |
| RAM |
128 MB |
512 MB |
| Дисковий простір |
50 MB |
1 GB |
| Процесор |
1 ядро |
2 ядра |
Як встановити Kirby через Composer?
- Створіть проект:
composer create-project getkirby/plainkit my-site
- Перейдіть в папку:
cd my-site
- Для панелі управління використовуйте starterkit:
composer create-project getkirby/starterkit my-site
- Налаштуйте веб-сервер (див. нижче)
- Відкрийте
/panel в браузері і створіть адміністратора
Структура папок після встановлення:
my-site/
├── content/ # контент (вне web root не потрібен)
├── kirby/ # ядро CMS (не чіпати)
├── media/ # генеровані зображення (gitignore)
├── site/ # кастомізація
└── index.php # точка входу
Конфігурація Nginx під високе навантаження
Ось мінімальний робочий конфіг, який ми використовуємо в продакшені:
server {
listen 80;
server_name mysite.com;
root /var/www/my-site;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
include fastcgi_params;
}
# заборона доступу до системних директорій
location ~ ^/(kirby|site/accounts|site/sessions) {
return 403;
}
# кеш статики на 30 днів
location ~* \.(jpg|jpeg|png|webp|svg|css|js|woff2)$ {
expires 30d;
add_header Cache-Control "public, immutable";
}
}
Для Apache постачається готовий .htaccess, але варто додати блокування системних папок. Ми наполегливо рекомендуємо Nginx через кращу продуктивність при високому навантаженні.
Оптимізація продуктивності Kirby
У site/config/config.php вимкніть debug у продакшені, увімкніть кеш сторінок і використовуйте ImageMagick для обробки зображень — він дає на 30% кращий коефіцієнт стиснення, ніж GD. Ось базова конфігурація:
<?php
return [
'debug' => false,
'url' => 'https://mysite.com',
'locale' => 'uk_UA.UTF-8',
'timezone' => 'Europe/Kyiv',
'languages' => true,
'panel' => [
'install' => false,
'slug' => 'admin',
],
'cache' => [
'pages' => [
'active' => true,
],
],
'thumbs' => [
'driver' => 'im',
'quality' => 85,
'format' => 'webp',
],
];
Також налаштуйте CDN для статики — це знизить TTFB на 40%.
Порівняння Kirby vs WordPress за ключовими параметрами
| Параметр |
Kirby CMS |
WordPress |
| Зберігання даних |
Файли (flat-file) |
MySQL / MariaDB |
| LCP (типовий) |
0.8–1.2 с |
2.5–4 с |
| Розмір бекапу |
2–10 МБ |
50+ МБ |
| Оновлення |
Через Composer |
Через адмінку |
| Ліцензія |
Платна (одноразовий платіж) |
Безкоштовна |
Kirby завантажує сторінки в 3-5 разів швидше WordPress при однаковому навантаженні. Економія на хостингу сягає 70% за рахунок відсутності бази даних.
Як увімкнути мультимовність?
Увімкніть у конфізі 'languages' => true, створіть файл мови, наприклад site/languages/uk.php:
<?php
return [
'code' => 'uk',
'name' => 'Українська',
'default' => true,
'locale' => 'uk_UA.UTF-8',
'url' => '/',
'direction' => 'ltr',
'translations' => [
'read.more' => 'Читати далі',
'published' => 'Опубліковано',
],
];
Контент для кожної мови зберігається у файлах із суфіксом коду: about.uk.txt, about.en.txt. Панель автоматично перемикає мови.
Часті помилки при встановленні та їх усунення
Неправильні права на папки викликають 500 Internal Server Error — перевірте chmod 755 content media site/accounts. Якщо панель не відкривається, перевірте rewrite-правила в .htaccess або конфігі Nginx. Повільне завантаження зображень часто пов'язане з вимкненим кешем прев'ю — увімкніть thumbs.driver і кеш.
Автоматизація розгортання через CI/CD
У .gitignore обов'язково: /kirby, /media, /site/accounts, /site/sessions, /.env. kirby/ підключається через Composer, не комітьте його. Деплой через composer install --no-dev на сервері. На CI можна додати створення користувача через команду:
php vendor/bin/kirby create-user \
--name="Admin" \
--email="[email protected]" \
--password="SecurePassword123" \
--role="admin"
Етапи робіт та терміни
| Етап |
Тривалість |
| Аналітика та підготовка сервера |
від 1 години |
| Встановлення Kirby та базових плагінів |
від 2 годин |
| Налаштування панелі та першого користувача |
від 30 хвилин |
| Конфігурація мультимовності (опціонально) |
від 2 годин |
| Оптимізація (кеш, CDN, ImageMagick) |
від 1 години |
| Тестування та документація |
від 1 години |
Разом: базове встановлення — від 2 до 4 годин, з мультимовністю — 1 день. Вартість розраховується індивідуально під ваш проект.
Що ви отримуєте в результаті
- Налаштований сервер (Nginx/Apache + SSL)
- Встановлену Kirby CMS з панеллю адміністратора
- Першого користувача та налаштування ролей
- Конфігурацію для SEO та швидкості (кеш, ImageMagick, CDN)
- Документацію з налаштувань та доступи
- Підтримку протягом місяця
Наша команда має 10+ років досвіду роботи з PHP та flat-file CMS, реалізувала 50+ проектів на Kirby. Згідно з Core Web Vitals, LCP повинен бути менше 2.5 секунд — наша конфігурація гарантовано вкладається в цей норматив.
Зв'яжіться з нами для безкоштовної оцінки. Замовте встановлення під ключ — отримайте готовий сайт з підтримкою на місяць.
Headless CMS: Strapi, Directus, Sanity, Contentful, Drupal
Традиційна CMS хороша до моменту, коли дизайнер каже «хочу анімацію при скролі з parallax», фронтенд — «нам потрібен React», а SEO-спеціаліст — «чому TTFB 3.4 секунди». У цей момент монолітна архітектура починає заважати всім одразу. Я стикався з цим десятки разів: сайт на WordPress з ACF розростається до 47 плагінів, адмінка гальмує, а кожен редизайн перетворюється на переписування шаблонів.
Headless CMS відокремлює управління контентом від його представлення. Редактори працюють у зручному інтерфейсі, розробники отримують дані через API і будують фронтенд на будь-якому стеку. Звучить просто. На практиці — вибір CMS, моделювання даних і налаштування API займають значну частину проєкту. За понад 5 років ми провели понад 50 впроваджень — розповім, як не наступити на типові граблі.
Чому headless CMS вигідніша за моноліт?
Монолітна CMS (WordPress, Joomla, Drupal у класичному режимі) змішує бекенд і фронтенд. Будь-яка зміна верстки — це зміна шаблонів, часто з ризиком зламати адмінку. Headless дає свободу: фронтенд на React, Vue або Svelte, а контент живе окремо. Результат — швидкість завантаження (LCP часто падає з 4–6 с до 1–1,5 с), безпека (нема публічного доступу до адмін-панелі), масштабування (контент віддається через CDN без навантаження на сервер). Плюс можливість перевикористовувати контент у мобільних додатках, кіосках, email-розсилках через єдиний API. На одному проєкті це заощадило 80 годин переробок і $4000 бюджету.
Яку headless CMS обрати під проєкт?
Нема універсального інструменту. Вибір залежить від команди, складності контенту та інфраструктури. Розберемо ключові варіанти.
Strapi — open-source, self-hosted, Node.js. Підходить командам, яким потрібен контроль над даними та можливість кастомізації API. Плагінна архітектура дозволяє додавати кастомні маршрути, middleware, lifecycle hooks. REST і GraphQL з коробки. Розгортається за годину — в 3 рази швидше за Drupal. Слабке місце — версії v4 та v5 несумісні між собою, міграція болюча. Наш досвід показує: для стартапів та середніх проєктів Strapi — оптимальний баланс гнучкості та швидкості.
Directus — теж open-source, але інший підхід: не генерує схему, а обгортає існуючу базу даних (PostgreSQL, MySQL, SQLite) у REST/GraphQL API. Якщо база даних вже є — Directus підключається до неї без міграцій. Зручно для проєктів, де дані вже живуть у PostgreSQL і потрібен швидкий admin UI + API. Економія часу на етапі інтеграції — до 30%.
Sanity — хмарна CMS з real-time редактором. Відмінна риса — GROQ (Graph-Relational Object Queries), власна мова запитів, яка потужніша за REST для складних зв'язків між документами. Portable Text для структурованого контенту. Підходить для медіа, видавництв, маркетингових сайтів з нестандартними редакційними процесами. Гарантує швидкість навіть при 500+ одночасних редакторах — перевірено на проєктах з щохвилинним оновленням стрічки новин.
Contentful — enterprise хмарна CMS. Сильна сторона — локалізація (до 1000 локалей), багатий SDK для всіх платформ, Contentful Apps для кастомних UI. Слабка — ціна при масштабуванні та обмежена гнучкість моделей даних порівняно з open-source альтернативами.
Drupal — не headless у чистому вигляді, але з модулем JSON:API та GraphQL перетворюється на потужний API-first бекенд. Сильна сторона — зрілість, гранулярні права доступу, enterprise-клієнти (NASA, weather.com). Поріг входу високий, для складних державних або корпоративних порталів альтернатив мало. Ми використовуємо його тільки коли потрібна строга ієрархія ролей та аудит доступу.
| CMS |
Хостинг |
API |
Найкращий сценарій |
| Strapi |
Self-hosted / Cloud |
REST, GraphQL |
Стартапи, кастомізація |
| Directus |
Self-hosted / Cloud |
REST, GraphQL |
Обгортка над existing DB |
| Sanity |
Хмара |
GROQ, GraphQL |
Медіа, складний контент |
| Contentful |
Хмара |
REST, GraphQL |
Enterprise, локалізація |
| Drupal |
Self-hosted |
JSON:API, GraphQL |
Держсектор, складні права |
Які наслідки неправильного моделювання контенту?
Моделювання контенту — критичний етап. Помилка на цьому етапі коштує дорого. Типова проблема: поле body типу rich text для всього. Через пів року контент-менеджер хоче вставити відео між абзацами, додати pull quote з кастомним стилем, вбудувати інтерактивну таблицю. Rich text це не дозволяє. Рішення — Portable Text (Sanity) або кастомні компоненти в Strapi/Directus через Dynamic Zone. Ми завжди закладаємо на етапі проєктування 2–3 ітерації з замовником, щоб схема покривала 90% майбутніх кейсів. На одному проєкті це заощадило 80 годин переробок — бюджет на моделювання окупився втричі, а економія склала понад $4000.
Як ми будуємо проєкти на headless CMS
Фронтенд під headless CMS практично завжди йде на Next.js (App Router) або Nuxt. Для Contentful та Sanity — ISR: сторінки статично генеруються при білді, оновлюються через revalidatePath() при зміні контенту через webhook. Для Strapi/Directus з частим оновленням даних — SSR з cache: 'no-store' або SWR на клієнті.
Кейс: редизайн корпоративного сайту виробничої компанії. Попередній сайт — WordPress з ACF, 200+ сторінок, 4 мови. Проблеми: TTFB 3,8 с, редактори скаржилися на повільну адмінку.
Перейшли на Strapi (self-hosted, PostgreSQL), Next.js App Router. Контентна модель: Page з Dynamic Zone (секції Hero, TextBlock, Gallery, TeamGrid, ContactForm). Локалізація через Strapi i18n plugin + next-intl на фронтенді. Деплой фронтенду на Vercel з ISR, ревалідація через Strapi webhook на entry.publish.
TTFB з 3,8 с впав до 180 мс (статика з CDN) — різниця в 21 раз. Редактори отримали чистий інтерфейс без 47 плагінів. Вартість хостингу знизилася на $200 на місяць — це економія $2400 на рік.
Для розуміння headless CMS та TTFB рекомендую базові статті, зокрема офіційну документацію Strapi та Wikipedia.
Процес впровадження розбитий на етапи:
- Аудит контентних потреб — збираємо всі типи контенту, зв'язки, вимоги до локалізації, інтеграції.
- Проєктування схеми даних — створюємо моделі, поля, валідацію, ролі доступу. Документуємо в Swagger/OpenAPI.
- Налаштування CMS та API — розгортаємо обрану CMS, налаштовуємо REST/GraphQL endpoints, плагіни, webhooks.
- Розробка фронтенду — підключаємо Next.js/Nuxt, налаштовуємо ISR/SSR, компоненти секцій, роутинг.
- Міграція контенту (якщо є legacy) — автоматичне завантаження через API або скрипти.
- Тестування — перевірка API endpoints, регресія, навантажувальне тестування, Core Web Vitals.
- Деплой — налаштування CDN, SSL, CI/CD, моніторинг.
Скільки часу займає впровадження?
Стандартний шлях включає всі етапи. Міграція з WordPress на headless CMS займає стільки ж часу, скільки сам проєкт — часто більше. Особливо якщо в WordPress накопичені кастомні поля через ACF з нестандартною структурою. Наші середні терміни:
| Тип проєкту |
Термін |
| Простий сайт на Strapi + Next.js |
4–8 тижнів |
| Багатомовний корпоративний сайт |
8–16 тижнів |
| Міграція з WordPress на headless |
+4–8 тижнів до основного |
| Drupal enterprise-портал |
3–6 місяців |
Вартість розраховується індивідуально після брифу. Економія на хостингу за рахунок статичної генерації — до 40% на місяць.
Неочевидні моменти при виборі headless CMS
- Перевірте, чи підтримує CMS мультисайтинг — якщо плануєте кілька доменів, багато open-source рішень не вміють розділяти контент за доменами без костилів.
- Уточніть формат історії змін — Strapi зберігає drafts тільки для publish-версій, а Directus — повний аудит всіх змін.
- Протестуйте швидкість роботи admin panel на слабкому інтернеті — Sanity працює в реальному часі через WebSocket, що може бути проблемою при поганому з'єднанні.
- Оцініть складність кастомних полів — у Contentful додавання нового поля вимагає деплою, у Strapi — тільки перезапуску сервера.
- Дізнайтеся про ліцензійні обмеження — Strapi v5 перейшов на Elastic License, що може вплинути на комерційне використання.
Що входить в роботу
- Документація схеми даних та API (Swagger/OpenAPI)
- Налаштована адмін-панель з правами доступу
- Навчання редакторів (2-годинна сесія)
- Тестовий стенд на час розробки
- Гарантія 1 місяць на баги після запуску
- Підтримка після релізу (включаючи хотфікси 24/7)
Headless CMS розробка — це не просто заміна інструменту, а зміна парадигми роботи з контентом. Ми допомагаємо зробити цей перехід без простоїв та втрати даних. Отримайте консультацію та попередню оцінку — залиште заявку на сайті. Замовте впровадження headless CMS з гарантією результату.