Розробка сайту на CMS Drupal
Drupal — не самий швидкий старт, зате один з найгнучкіших інструментів для складних сайтів: порталів, корпоративних сайтів з багаторівневим доступом, multilingual-проектів з нетривіальною структурою контенту. Архітектура модульна: базовий Drupal — це ядро плюс contrib-модулі, кастомний код пишеться тільки там, де немає готового рішення.
Стек Drupal-проекту
- Drupal 10+ (PHP 8.2+, Symfony компоненти всередину)
- Composer — управління залежностями, єдиний правильний спосіб встановлювати Drupal
- Drush — CLI для управління сайтом
- DDEV або Docker Compose — локальна розробка
- PostgreSQL або MySQL — Drupal працює з обома
- Redis — кеш. Без нього Drupal повільний
- Varnish або Nginx FastCGI cache — page cache для анонімних користувачів
Ініціалізація проекту
composer create-project drupal/recommended-project my-project
cd my-project
# Інструменти розробки
composer require drush/drush drupal/devel drupal/admin_toolbar
# Обов'язкові contrib-модулі
composer require \
drupal/pathauto \ # автоматичні URL
drupal/token \ # токени для pathauto
drupal/metatag \ # SEO мета-теги
drupal/redirect \ # редиректи
drupal/simple_sitemap \ # sitemap.xml
drupal/paragraphs \ # гнучкий контент
drupal/entity_reference_revisions \
drupal/field_group \ # групування полів у формі
drupal/views_bulk_operations \
drupal/redis \ # Redis кеш
drupal/restui # REST API управління
# Установа
drush site:install --account-name=admin --account-pass=admin --db-url="pgsql://user:pass@localhost/drupal"
Структура кастомного модуля
Весь кастомний код — в web/modules/custom/:
web/modules/custom/my_project/
├── my_project.info.yml
├── my_project.module
├── my_project.install # хуки встановлення/оновлення
├── my_project.routing.yml # маршрути
├── my_project.services.yml # DI-контейнер
├── src/
│ ├── Controller/
│ ├── Form/
│ ├── Plugin/
│ ├── EventSubscriber/
│ └── Service/
└── templates/
└── my-template.html.twig
Конфігураційний workflow
Drupal зберігає конфігурацію (типи контенту, поля, Views, ролі) в YAML-файлах. Ключове для командної роботи:
# Експорт поточної конфігурації в файли
drush config:export
# Імпорт конфігурації з файлів (деплой на іншу середу)
drush config:import
# Перегляд diff між активною конфігурацією та файлами
drush config:status
В settings.php:
$settings['config_sync_directory'] = '../config/sync';
Всі YAML-файли конфігурації коммітяться в git. Деплой на production — це git pull + drush config:import + drush updb + drush cr.
Продуктивність
Drupal без кешу працює повільно. Мінімальний набір для production:
// settings.php — Redis для кеша
$settings['cache']['default'] = 'cache.backend.redis';
$settings['redis.connection']['host'] = 'redis';
$settings['redis.connection']['port'] = 6379;
// Internal Page Cache + Dynamic Page Cache вже в ядрі
// Включаються в /admin/config/development/performance
Для анонімного трафіку — Varnish перед Drupal кешує сторінки за мілісекунди — Drupal взагалі не бере участі.
Терміни
Типовий корпоративний сайт (головна, розділи, блог, форма зворотного зв'язку, 2 мови): 4–6 тижнів. Портал з особистим кабінетом, ролями, каталогом та REST API: 8–12 тижнів.







