Возникла необходимость установить и настроить 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 обычным способом через копирование файлов? Надо все переделывать в моём случае?
Комментарии
И на эпоксидку приклеила? Что мешает снести и установить правильно?
Без папки web? А можно посмотреть composer.json, особенно секцию installer-paths?
Строго говоря, composer устанавливает модули не в папку web, а в папку, прописанную в composer.json. По умолчанию это папка web. Можно ее поменять и посмотреть что получится. Только зачем? Только потому что хостер уже положил файлы не в ту папку? Пожалуй, слабее аргумента в пользу нестандартной конфигурации друпала я еще не слышал
В общем-то на данном этапе переустановить не проблема, но хочется понимания. Почему есть такой стандарт с web?
Скрин секции installer-paths в composer.json:
Насколько я понимаю - единственная причина в том, чтобы по максимуму убрать исполняемые файлы, которые в принципе никогда не должны исполняться по прямым веб-запросам, за пределы веб-рута. С точки зрения безопасности. С папкой vendor это сделать можно, так как популярные серьезные библиотеки изначально сделаны по уму. С самим Друпалом не всё так просто
Вот тут, ближе к концу, эта тема обсуждается довольно подробно: https://drupal.ru/node/143566
Это явно не drupal/recommended-project, это больше похоже на legacy. Откуда взялся этот файл? Самозародиться он не мог. Что у него в самом начале?
PS Про legacy vs recommended: https://druki.ru/wiki/drupal-legacy-project
Вкратце, legacy можно пользоваться при наличии серьезных медицинских показаний. У Вас я их пока не вижу
С интересом прочитал вашу дискуссию и другие материалы, сформулировал для себя какое-то понимание: начиная с 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...
И ещё добавлю комментарий специалистов одного из Drupal-хостингов на вопрос почему drupal/recommended-project создаёт директорию web и vendor: "Такое решение используется для того, чтобы к системным файлам и модулям не было доступа из браузера."