Установка ядра 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"
            ]
        }
    }
}
Обновлено:
Создано:

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

Your email address will not be published. Required fields are marked *