Установка composer и Drupal 9 на хостинг reg.ru - как правильно выстроить структуру директорий?

Главные вкладки

Аватар пользователя chelwolf chelwolf 17 февраля 2022 в 16:43

Возникла необходимость установить и настроить Composer для дальнейшей установки Drupal 9 на популярном хостинге REG.ru. По умолчанию Composer там не используется, поэтому ставил его сам согласно инструкции хостера: https://help.reg.ru/hc/ru/articles/4408047351569?source=answerbot

В моём случае на хостинге расположен сайт с тремя поддоменами, на одном из которых мне и нужно развернуть Drupal 9. Структура выглядит следующим образом:

root
--www
----one.domain
----two.domain
----three.domain

Composer, согласно инструкции, установил в root/bin. Установить через него Drupal 9 я не успел, его установила техподдержка традиционным способом, т.е. через интерфейс, закинув файлы установки на домен. Сейчас файлы движка лежат в папке поддомена: root/www/one.domain

Я открыл нужную мне директорию через терминал и попробовал установить модуль через Composer командой вида composer require 'drupal/pathauto:^1.9' - все работает, Drupal создал у себя в корне Json-файлы, а в папке с модулями подпапку contrib, куда все положил.

Но! Вопрос насколько это правильно?

Читаю описание drupal-project на Git: https://github.com/drupal-composer/drupal-project, здесь и во многих других источниках указывается, что сайт нужно положить в папку web, а все что делает Composer рядом в vendor - это более правильный путь.

Объясните в чем "правильность" такой структуры? И чем может обернуться установка Drupal 9 обычным способом через копирование файлов? Надо все переделывать в моём случае?

Лучший ответ

Аватар пользователя chelwolf chelwolf 18 февраля 2022 в 11:20

С интересом прочитал вашу дискуссию и другие материалы, сформулировал для себя какое-то понимание: начиная с Drupal 8.8.0, шаблоны проектов Composer доступны как часть ядра Drupal. Т.е. появился официальный дистрибутив на git, через который можно устанавливать Drupal на сервер через команду вида "composer create-project drupal/recommended-project".

На текущий момент есть два таких официальных шаблона:

1) drupal/legacy-project - этот шаблон как раз мой случай, когда Drupal установлен из архива классическим способом. Корень сайта в этом случае находится в корне проекта.

2) drupal/recommended-project - как видно из названия, сейчас это рекомендуемый сообществом шаблон для установки Drupal 9. Он гарантирует, что зависимости Drupal Core имеют ту же версию, что и официальная версия Drupal. Как это гарантируется? При использовании данного шаблона Drupal устанавливается в отдельную папку "web", а все зависимости складываются отдельно в папку vendor. Организация такой структуры директорий вместе с настройками composer.json создаёт меньше возможностей для потенциальных уязвимостей. Также в различных статьях указывается, что это более "современный" и "быстрый" шаблон, что связано с тем, что он лишён зависимостей и лишних библиотек.

Если есть возможность самостоятельно выстраивать структуру директорий на хостинге, установите drupal/recommended-project.

Запуск сайта с использованием шаблонов проектов Drupal Composer (официальный гайд):
https://www.drupal.org/docs/develop/using-composer/starting-a-site-using...

Замечательная статья Niklan на эту тему:
https://niklan.net/blog/209

Как обновиться с legacy на recommended:
https://drupal-school.net/blog/migraciya-s-drupal-project-na-recommended...

Вопрос по теме на drupal.stackexchange на случай, если на хостинге есть запрет на создание папок:
https://drupal.stackexchange.com/questions/295476/how-can-i-create-a-rec...

Комментарии

Аватар пользователя marassa marassa 17 февраля 2022 в 17:34

chelwolf wrote: Установить через него Drupal 9 я не успел, его установила техподдержка традиционным способом

И на эпоксидку приклеила? Что мешает снести и установить правильно?

chelwolf wrote: Я открыл нужную мне директорию через терминал и попробовал установить модуль через Composer командой вида composer require 'drupal/pathauto:^1.9' - все работает, Drupal создал у себя в корне Json-файлы, а в папке с модулями подпапку contrib, куда все положил.

Без папки web? А можно посмотреть composer.json, особенно секцию installer-paths?
Строго говоря, composer устанавливает модули не в папку web, а в папку, прописанную в composer.json. По умолчанию это папка web. Можно ее поменять и посмотреть что получится. Только зачем? Только потому что хостер уже положил файлы не в ту папку? Пожалуй, слабее аргумента в пользу нестандартной конфигурации друпала я еще не слышал Wink

Аватар пользователя chelwolf chelwolf 17 февраля 2022 в 18:12

В общем-то на данном этапе переустановить не проблема, но хочется понимания. Почему есть такой стандарт с web?

Скрин секции installer-paths в composer.json:

Аватар пользователя marassa marassa 17 февраля 2022 в 18:23

chelwolf wrote: хочется понимания. Почему есть такой стандарт с web?

Насколько я понимаю - единственная причина в том, чтобы по максимуму убрать исполняемые файлы, которые в принципе никогда не должны исполняться по прямым веб-запросам, за пределы веб-рута. С точки зрения безопасности. С папкой vendor это сделать можно, так как популярные серьезные библиотеки изначально сделаны по уму. С самим Друпалом не всё так просто Wink
Вот тут, ближе к концу, эта тема обсуждается довольно подробно: https://drupal.ru/node/143566

chelwolf wrote: Скрин секции installer-paths в composer.json

Это явно не drupal/recommended-project, это больше похоже на legacy. Откуда взялся этот файл? Самозародиться он не мог. Что у него в самом начале?

Аватар пользователя chelwolf chelwolf 18 февраля 2022 в 11:20

С интересом прочитал вашу дискуссию и другие материалы, сформулировал для себя какое-то понимание: начиная с Drupal 8.8.0, шаблоны проектов Composer доступны как часть ядра Drupal. Т.е. появился официальный дистрибутив на git, через который можно устанавливать Drupal на сервер через команду вида "composer create-project drupal/recommended-project".

На текущий момент есть два таких официальных шаблона:

1) drupal/legacy-project - этот шаблон как раз мой случай, когда Drupal установлен из архива классическим способом. Корень сайта в этом случае находится в корне проекта.

2) drupal/recommended-project - как видно из названия, сейчас это рекомендуемый сообществом шаблон для установки Drupal 9. Он гарантирует, что зависимости Drupal Core имеют ту же версию, что и официальная версия Drupal. Как это гарантируется? При использовании данного шаблона Drupal устанавливается в отдельную папку "web", а все зависимости складываются отдельно в папку vendor. Организация такой структуры директорий вместе с настройками composer.json создаёт меньше возможностей для потенциальных уязвимостей. Также в различных статьях указывается, что это более "современный" и "быстрый" шаблон, что связано с тем, что он лишён зависимостей и лишних библиотек.

Если есть возможность самостоятельно выстраивать структуру директорий на хостинге, установите drupal/recommended-project.

Запуск сайта с использованием шаблонов проектов Drupal Composer (официальный гайд):
https://www.drupal.org/docs/develop/using-composer/starting-a-site-using...

Замечательная статья Niklan на эту тему:
https://niklan.net/blog/209

Как обновиться с legacy на recommended:
https://drupal-school.net/blog/migraciya-s-drupal-project-na-recommended...

Вопрос по теме на drupal.stackexchange на случай, если на хостинге есть запрет на создание папок:
https://drupal.stackexchange.com/questions/295476/how-can-i-create-a-rec...

Аватар пользователя chelwolf chelwolf 21 февраля 2022 в 9:46

И ещё добавлю комментарий специалистов одного из Drupal-хостингов на вопрос почему drupal/recommended-project создаёт директорию web и vendor: "Такое решение используется для того, чтобы к системным файлам и модулям не было доступа из браузера."