Категория:
Опубликовано:

Композеризируем проекты на Drupal 7

Composer logo

Composer - штука, бесспорно, классная.

Поработав с ней немного, уже и не представляешь как без него жилось.

Это, поистине, один из главных инструментов современного PHP-разработчика, и благо в Drupal 8 уже все строится именно им.

Но, и при работе с Drupal 7 можно стать чуточку счастливее, если перевести проект на рельсы composer-way. К счастью, это делается весьма просто...

Определяем что нужно сделать

Допустим, у нас есть работающий проект на Drupal 7, держим его пока в уме отдельной директории.

Нам нужно определить один из поддерживаемых сообществом вариаций для ведения проекта Drupal + Composer.

За этим отправляемся на орг, конечно. Там для нас есть страничка, со списком доступных вариантов композер-сборок. Среди них, 2 (на момент написания данного поста) поддерживают работу с Drupal 7:

  1. drupal-composer/drupal-project, который является стандартом работы с Drupal 8, де-факто
  2. и 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
init.png

Можно, при желании, указать прям здесь список всех зависимостей, но мы это сделаем в следующем шаге.

На данном этапе, мы получили стартовую конфигурацию проекта, реализованную в 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 (если память о ней еще свежа), и используем все блага современного ПЫХ'ера )))

Успехов!

composer-drupal.jpg

PS - все же советую аккуратно и обдуманно относится к обновлению ядра, т.к. "были баги". Вместе с ядром, при обновлении, композер может также убить все кастомные файлы, модули и иже с ними.

Все бекапим, версионируем и следим за происходящим!

Если у Вас возникли вопросы, замечания, предложения или просто благодарность - пишите в комментариях.
Делитесь полезными материалами в социальных сетях.