Установка и настройка CMS 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=ru \
--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 clean URLs
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 дня.







