Установка ядра Drupal 10 с помощью Composer
Для установки Drupal с помощью данного инструмента предполагается что у вас уже установлен сам менеджер зависимостей php - Composer.
Если вы также как и я используете среду разработки Docker4Drupal то composer уже установлен в контейнере php и готов к работе.
Если вы используете другое окружение и по каким-то причинам Composer'a нет, то необходимо пройти по ссылке ниже и произвести необходимые действия по его установке:
https://getcomposer.org/doc/00-intro.md
Composer.json для Drupal
Последнюю версию composer.json для Drupal можно скачать из репозитория:
https://github.com/drupal/recommended-project
На данный момент уже вышел релиз Drupal 11 но много модулей еще не имеют поддержку этой версии ядра, по этой причине будем работать с версией Drupal 10.4:
https://github.com/drupal/recommended-project/blob/10.4.x/composer.json
и в будущем мы можем провести upgrade с 10 на 11 версию, что также думаю будет полезным опытом.
Заходим в Docker контейнер с помощью Makefile
Makefile - предоставляет ряд команд для упрощения работы с контейнерами докера, с полным списком можно ознакомится в документации:
https://wodby.com/docs/1.0/stacks/drupal/local/#make-commands
для начала необходимо зайти в php контейнер нашего проекта
make shell
выполнить команду
composer
и увидим что он у нас установлен и готов к работе
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.7.7 2024-06-10 22:11:12
помним что с composer мы работаем внутри докер контейнера php нашего проекта.
Composer.json для версии Drupal 10.4.x
Скачиваем последнюю версию composer.json:
composer create-project --no-install drupal/recommended-project:10.4.x-dev tmp
перемещаем только файл composer.json в корень нашего проекта и директорию tmp удаляем.
composer.json для Drupal 10.4:
{
"name": "drupal/recommended-project",
"description": "Project template for Drupal projects with a relocated document root",
"type": "project",
"license": "GPL-2.0-or-later",
"homepage": "https://www.drupal.org/project/drupal",
"support": {
"docs": "https://www.drupal.org/docs/user_guide/en/index.html",
"chat": "https://www.drupal.org/node/314178"
},
"repositories": [
{
"type": "composer",
"url": "https://packages.drupal.org/8"
}
],
"require": {
"composer/installers": "^2.0",
"drupal/core-composer-scaffold": "^10.4",
"drupal/core-project-message": "^10.4",
"drupal/core-recommended": "^10.4"
},
"require-dev": {
"drupal/core-dev": "^10.4"
},
"conflict": {
"drupal/drupal": "*"
},
"minimum-stability": "dev",
"prefer-stable": true,
"config": {
"allow-plugins": {
"composer/installers": true,
"drupal/core-composer-scaffold": true,
"drupal/core-project-message": true,
"phpstan/extension-installer": true,
"dealerdirect/phpcodesniffer-composer-installer": true,
"php-http/discovery": true
},
"sort-packages": true
},
"extra": {
"drupal-scaffold": {
"locations": {
"web-root": "web/"
}
},
"installer-paths": {
"web/core": ["type:drupal-core"],
"web/libraries/{$name}": ["type:drupal-library"],
"web/modules/contrib/{$name}": ["type:drupal-module"],
"web/profiles/contrib/{$name}": ["type:drupal-profile"],
"web/themes/contrib/{$name}": ["type:drupal-theme"],
"drush/Commands/contrib/{$name}": ["type:drupal-drush"],
"web/modules/custom/{$name}": ["type:drupal-custom-module"],
"web/profiles/custom/{$name}": ["type:drupal-custom-profile"],
"web/themes/custom/{$name}": ["type:drupal-custom-theme"]
},
"drupal-core-project-message": {
"include-keys": ["homepage", "support"],
"post-create-project-cmd-message": [
"<bg=blue;fg=white> </>",
"<bg=blue;fg=white> Congratulations, you’ve installed the Drupal codebase </>",
"<bg=blue;fg=white> from the drupal/recommended-project template! </>",
"<bg=blue;fg=white> </>",
"",
"<bg=yellow;fg=black>Next steps</>:",
" * Install the site: https://www.drupal.org/docs/installing-drupal",
" * Read the user guide: https://www.drupal.org/docs/user_guide/en/index.html",
" * Get support: https://www.drupal.org/support",
" * Get involved with the Drupal community:",
" https://www.drupal.org/getting-involved",
" * Remove the plugin that prints this message:",
" composer remove drupal/core-project-message"
]
}
}
}
немного отредактируем его:
- меняем "minimum-stability": "stable" на "minimum-stability": "dev";
- добавляем в "config" директорию для бинарников "bin-dir": "bin";
- удаляю в "extra" раздел "drupal-core-project-message";
обновленный composer.json:
{
"name": "drupal/recommended-project",
"description": "Project template for Drupal projects with a relocated document root",
"type": "project",
"license": "GPL-2.0-or-later",
"homepage": "https://www.drupal.org/project/drupal",
"support": {
"docs": "https://www.drupal.org/docs/user_guide/en/index.html",
"chat": "https://www.drupal.org/node/314178"
},
"repositories": [
{
"type": "composer",
"url": "https://packages.drupal.org/8"
}
],
"require": {
"composer/installers": "^2.0",
"drupal/core-composer-scaffold": "^10.4",
"drupal/core-project-message": "^10.4",
"drupal/core-recommended": "^10.4"
},
"require-dev": {
"drupal/core-dev": "^10.4"
},
"conflict": {
"drupal/drupal": "*"
},
"minimum-stability": "dev",
"prefer-stable": true,
"config": {
"bin-dir": "bin",
"allow-plugins": {
"composer/installers": true,
"drupal/core-composer-scaffold": true,
"drupal/core-project-message": true,
"phpstan/extension-installer": true,
"dealerdirect/phpcodesniffer-composer-installer": true,
"php-http/discovery": true
},
"sort-packages": true
},
"extra": {
"drupal-scaffold": {
"locations": {
"web-root": "web/"
}
},
"installer-paths": {
"web/core": [
"type:drupal-core"
],
"web/libraries/{$name}": [
"type:drupal-library"
],
"web/modules/contrib/{$name}": [
"type:drupal-module"
],
"web/profiles/contrib/{$name}": [
"type:drupal-profile"
],
"web/themes/contrib/{$name}": [
"type:drupal-theme"
],
"drush/Commands/contrib/{$name}": [
"type:drupal-drush"
],
"web/modules/custom/{$name}": [
"type:drupal-custom-module"
],
"web/profiles/custom/{$name}": [
"type:drupal-custom-profile"
],
"web/themes/custom/{$name}": [
"type:drupal-custom-theme"
]
}
}
}
на данный момент корневая директория проекта должна выглядеть примерно так:
.env
.gitignore
compose.override.yml
compose.yml
composer.json
example.compose.override.yml
Makefile
traefik.yml
Заливаем начальную структуру проекта в гит
На этом шаге мы можем запушить наш проект в репозиторий:
git remote add origin git@gitlab.com:kondratiuk.info/dlog.git
git add .
git commit -m "Initial commit"
git push -u origin master
в этом случае у вас всегда будет возможность вернуться к первому коммиту и иметь готовый шаблон для разворачивания нового проекта Drupal.
Установка ядра Drupal
Для установки ядра Drupal - выполняем следующую команду composer:
composer install
если все прошло успешно, то видим примерно следующую структуру проекта:
bin
vendor
web
.editorconfig
.env
.gitattributes
.gitignore
compose.override.yml
compose.yml
composer.json
composer.lock
Makefile
traefik.yml
composer установил все необходимые зависимости Drupal.
После установки ядра в composer.json - в раздел "drupal-scaffold" я добавляю следующий блок:
"file-mapping": {
"[web-root]/.htaccess": false,
"[web-root]/robots.txt": false,
"[web-root]/sites/development.services.yml": false,
"[web-root]/sites/default/default.services.yml": false,
"[web-root]/sites/default/default.settings.php": false
}
данная инструкция указывает composer при будущих обновлениях или установок модулей не редактировать этот список файлов, так как обычно мы прописываем определенные настройки и они могут быть просто перезаписаны.
Добавляем пакет для патчей используя Composer
composer require cweagans/composer-patches
cweagans/composer-patches позволяет автоматически применять патчи к зависимостям.
Подробнее:
https://www.drupal.org/docs/develop/using-composer/manage-dependencies#patches
итоговый composer.json после установки ядра выглядит примерно так:
{
"name": "drupal/recommended-project",
"description": "Project template for Drupal projects with a relocated document root",
"type": "project",
"license": "GPL-2.0-or-later",
"homepage": "https://www.drupal.org/project/drupal",
"support": {
"docs": "https://www.drupal.org/docs/user_guide/en/index.html",
"chat": "https://www.drupal.org/node/314178"
},
"repositories": [
{
"type": "composer",
"url": "https://packages.drupal.org/8"
}
],
"require": {
"composer/installers": "^2.0",
"cweagans/composer-patches": "^1.7",
"drupal/core-composer-scaffold": "^10.4",
"drupal/core-project-message": "^10.4",
"drupal/core-recommended": "^10.4"
},
"require-dev": {
"drupal/core-dev": "^10.4"
},
"conflict": {
"drupal/drupal": "*"
},
"minimum-stability": "dev",
"prefer-stable": true,
"config": {
"bin-dir": "bin",
"allow-plugins": {
"composer/installers": true,
"drupal/core-composer-scaffold": true,
"drupal/core-project-message": true,
"phpstan/extension-installer": true,
"dealerdirect/phpcodesniffer-composer-installer": true,
"php-http/discovery": true
},
"sort-packages": true
},
"extra": {
"drupal-scaffold": {
"locations": {
"web-root": "web/"
},
"file-mapping": {
"[web-root]/.htaccess": false,
"[web-root]/robots.txt": false,
"[web-root]/sites/development.services.yml": false,
"[web-root]/sites/default/default.services.yml": false,
"[web-root]/sites/default/default.settings.php": false
}
},
"installer-paths": {
"web/core": [
"type:drupal-core"
],
"web/libraries/{$name}": [
"type:drupal-library"
],
"web/modules/contrib/{$name}": [
"type:drupal-module"
],
"web/profiles/contrib/{$name}": [
"type:drupal-profile"
],
"web/themes/contrib/{$name}": [
"type:drupal-theme"
],
"drush/Commands/contrib/{$name}": [
"type:drupal-drush"
],
"web/modules/custom/{$name}": [
"type:drupal-custom-module"
],
"web/profiles/custom/{$name}": [
"type:drupal-custom-profile"
],
"web/themes/custom/{$name}": [
"type:drupal-custom-theme"
]
}
}
}

Добавить комментарий