Встановлення та налаштування Drupal
Drupal встановлюється через Composer — без ручного завантаження zip-архівів. Це обов'язкова вимога з Drupal 9+: без Composer неможливо правильно оновлювати ядро та модулі.
Вимоги до сервера
- PHP 8.2+ з розширеннями:
pdo_pgsqlабоpdo_mysql,gd,intl,mbstring,xml,json,opcache - PostgreSQL 14+ або MySQL 8.0+ / MariaDB 10.6+
- Composer 2.x
- Nginx або Apache
Рекомендовані налаштування PHP (php.ini):
memory_limit = 256M
max_execution_time = 60
upload_max_filesize = 32M
post_max_size = 32M
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 10000
Створення проекту
composer create-project drupal/recommended-project:^10 my-site
cd my-site
# Необхідні інструменти
composer require drush/drush
Структура папок після встановлення:
my-site/
├── composer.json
├── composer.lock
├── config/
│ └── sync/ # конфігурація в YAML
├── vendor/
└── web/ # document root
├── core/
├── modules/
│ ├── contrib/ # завантажені модулі
│ └── custom/ # ваш код
├── profiles/
├── themes/
│ ├── contrib/
│ └── custom/
└── sites/
└── default/
├── settings.php
└── files/ # завантажені файли
Document root сервера повинен вказувати на web/, а не на корінь проекту.
Налаштування бази даних
# PostgreSQL
createuser -P drupal
createdb -O drupal drupal
# MySQL
mysql -u root -e "CREATE DATABASE drupal; CREATE USER drupal@localhost IDENTIFIED BY 'password'; GRANT ALL ON drupal.* TO drupal@localhost;"
Встановлення через Drush (без веб-установника)
./vendor/bin/drush site:install standard \
--account-name=admin \
--account-pass='StrongPassword123!' \
[email protected] \
--site-name="Мій сайт" \
[email protected] \
--locale=uk \
--db-url="pgsql://drupal:password@localhost/drupal" \
--no-interaction
Опція standard — базовий профіль з найчастіше використовуваними модулями. Є також minimal (голе ядро) та demo_umami (демонстраційний контент для знайомства).
Налаштування settings.php
// web/sites/default/settings.php
// Директорія конфігурації (поза document root — важливо для безпеки)
$settings['config_sync_directory'] = '../config/sync';
// Trusted hosts — обов'язково для production
$settings['trusted_host_patterns'] = [
'^example\.com$',
'^www\.example\.com$',
];
// Відключити відображення помилок на production
$config['system.logging']['error_level'] = 'hide';
// Hash salt — генерується при встановленні, ніколи не змінювати після
$settings['hash_salt'] = 'генероване-значення-з-secrets';
// Приватна директорія для файлів (не доступна через web)
$settings['file_private_path'] = '../private';
Для локальної розробки та production, виносимо різні налаштування в settings.local.php:
// settings.php — в кінці файла
if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
include $app_root . '/' . $site_path . '/settings.local.php';
}
// settings.local.php — не коммітимо в git
$config['system.performance']['css']['preprocess'] = FALSE;
$config['system.performance']['js']['preprocess'] = FALSE;
$settings['cache']['bins']['render'] = 'cache.backend.null';
$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';
$settings['extension_discovery_scan_tests'] = FALSE;
Конфігурація Nginx
server {
listen 80;
server_name example.com www.example.com;
root /var/www/my-site/web;
index index.php;
# Drupal чисті URL
location / {
try_files $uri /index.php?$query_string;
}
# Заборона доступу до системних файлів
location ~ (^|/)\. {
return 403;
}
location ~ ^/sites/.*/private/ {
return 403;
}
location ~ ^/sites/[^/]+/files/.*\.php$ {
deny all;
}
# PHP
location ~ '\.php$|^/update.php' {
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_read_timeout 300;
}
# Статичні файли
location ~* \.(jpg|jpeg|gif|png|webp|svg|css|js|ico|woff2)$ {
expires 1y;
add_header Cache-Control "public, immutable";
try_files $uri @drupal;
}
location @drupal {
rewrite ^/(.*)$ /index.php?q=$1 last;
}
}
Базові модулі після встановлення
# Включаємо потрібні модулі ядра
drush en \
language locale content_translation \
path pathauto token \
views views_ui \
field_ui block_content \
menu_link_content \
-y
# Contrib модулі
composer require drupal/admin_toolbar drupal/metatag drupal/redirect drupal/pathauto
drush en admin_toolbar admin_toolbar_tools metatag redirect -y
Оновлення Drupal
# Перевірити доступні оновлення
composer outdated drupal/*
# Оновити ядро
composer update drupal/core-recommended drupal/core-composer-scaffold --with-all-dependencies
# Застосувати оновлення бази даних
drush updatedb --no-interaction
drush cache:rebuild
Терміни
Чисте встановлення, налаштування сервера, базові модулі, первинна конфігурація: 1 день. З переносом існуючого контенту та налаштуванням багатомовності: 2–3 дні.







