Композеризируем проекты на Drupal 7
Composer - штука, бесспорно, классная.
Поработав с ней немного, уже и не представляешь как без него жилось.
Это, поистине, один из главных инструментов современного PHP-разработчика, и благо в Drupal 8 уже все строится именно им.
Но, и при работе с Drupal 7 можно стать чуточку счастливее, если перевести проект на рельсы composer-way. К счастью, это делается весьма просто...
Определяем что нужно сделать
Допустим, у нас есть работающий проект на Drupal 7, держим его пока в уме отдельной директории.
Нам нужно определить один из поддерживаемых сообществом вариаций для ведения проекта Drupal + Composer.
За этим отправляемся на орг, конечно. Там для нас есть страничка, со списком доступных вариантов композер-сборок. Среди них, 2 (на момент написания данного поста) поддерживают работу с Drupal 7:
- drupal-composer/drupal-project, который является стандартом работы с Drupal 8, де-факто
- и hussainweb/drupal-composer-init, который достаточно свеж (опять же, на этот момент) и только набирает обороты
Оба варианта хороши и похожи. Главное различие заключается в том, что для 2го способа все серверные скрипты вынесены в отдельный пакет, что дает больше гибкости и возможность управления ими.
Лично мне, больше нравится 2й вариант, именно на его примере я и буду проводить дальнейшие действия. Но по сути, все абсолютно полностью применимо к обоим способам, выбирайте более подходящий Вам, различия только в том - что делать для старта проекта в первом шаге.
В итоге, мы получим более-менее стандартную реализацию, приближенную по своей структуре к Drupal8-way проектам:
project_root
|-vendor
|-web
| |-sites
| | |-all
| | | |-libraries
| | | |-modules
| | | | |-contrib
| | | | |-custom
| | | | |-features
| | | |-themes
| | | | |-contrib
| | | | |-custom
|-composer.loc
|-composer.json
Шаг #1: Подготовка и установка
Итак! Все что нам нужно - это развернуть пустой Drupal-Composer-проект для 7ки.
Для тех кто выбрал вариант drupal-composer/drupal-project - нужно стартонуть стандартным composer create-project ... (всегда проверяйте актуальность информации на оф. страничках!):
composer create-project drupal-composer/drupal-project:7.x-dev some-dir --stability dev --no-interaction
Для поклонников варианта с hussainweb/drupal-composer-init - нужно сначала установить его как глобальную зависимость:
composer global require hussainweb/drupal-composer-init:~1.0
И уже в необходимой директории проекта выполнить инициацию, попутно, ответив на все интересующие скрипт вопросы:
composer drupal-init --drupal-7
Можно, при желании, указать прям здесь список всех зависимостей, но мы это сделаем в следующем шаге.
На данном этапе, мы получили стартовую конфигурацию проекта, реализованную в composer.json файле.
Хорошо! Идем дальше...
Шаг #2: Установка зависимостей
В этом шаге мы установим все зависимости нашего проекта:
- Все компоненты необходимые для работы (Drush'ики всякие, консольные тулзы...)
- Само ядро (Drupal 7)
- Модули, которые используются в нашем проекте и их зависимости
Прежде всего, выполняем установку:
composer install
Теперь, ядро и компоненты проекта установлены, нам нужно лишь добавить нужные модули.
Используем классический composer require <vendor>/<name>
(Не забываем, что все модули указываются не по машинному имени, а вместе со стандартным вендором: drupal/module_name
)
Должно получиться что-то вроде:
composer require drupal/admin_menu drupal/ckeditor drupal/colorbox drupal/views
Реквайрим все-все контрибные модули, которые используются в текущем проекте. Обязательно проверяем.
*Не забываем перенести все кастомные модули в web/sites/all/modules/custom, и темы в web/sites/all/themes/custom, соответственно.
Так же, переносим библиотеки (если используются, но разработчики не организовали их как зависимости) в web/sites/all/libraries.
После того как composer отработает, у нас будет полностью готовый к работе проект.
Шаг #3: Перенос файлов и настроек
Теперь, когда структура нашего сайта уже полностью подготовлена - копируем все что делает наш сайт тем чем он является - контент:
- В первую очередь, заполняем файл настроек для нашего тестового сайта (вы же не на проде делаете?!). База должна быть аналогичной боевой.
- Заботимся о файлах web/sites/default/files
- И всякого рода "коренных жителях" - вроде robots.txt, подтверждалки для ПС'ов и т.п.
- Если есть какие-либо не стандартные директории, всех их переносим тоже (с ними следует быть аккуратными при обновлении ядра, нужно добавить в директорию preserve-paths, файла-конфига composer.json).
Когда все перенесено, проверяем все еще раз, запускаем сброс кеша и крон (drush cc all && drush cron
). На всякий случай, обновляем базу (вдруг какой модуль свежее использовавшегося - drush -y updb
).
Если все проходит без сбоев - СУПЕР! Заходим на наш сайт, и тестируем визуально. При этом, не забываем что он отзывается не из корня проекта, а из поддиректории web
. Так же, момент изменения публичной директории нужно учесть во время настройки на проде, когда все будет готово и сайт будет перенесен.
После всех проверок, и устранений всех недочетов - можно смело считать себя красавчиком :) - проект композирезирован.
Коммитимся для фиксации (вот, кстати, файлик игнора мне нравится у сборки drupal-composer, я его обычно себе просто копирую).
Гранд финал
Теперь можно все это дело интегрировать в прод.
Для управления модулями - забываем страничку модулей admin/modules
(если память о ней еще свежа), и используем все блага современного ПЫХ'ера )))
Успехов!
PS - все же советую аккуратно и обдуманно относится к обновлению ядра, т.к. "были баги". Вместе с ядром, при обновлении, композер может также убить все кастомные файлы, модули и иже с ними.
Все бекапим, версионируем и следим за происходящим!
Делитесь полезными материалами в социальных сетях.