Ivan Abramenko 11/19/2019

Конфигурация в Drupal 8 это основа всех настроек типов материалов, полей, конфигурационных форм и переменных. С помощью конфигурации мы можем переносить изменения с одного сайта на другой, разрабатывать таким образом разные фичи одновременно и не мешая друг другу.

Конфигурации можно выгрузить в YML файлы и добавить их в Git репозиторий, таким образом вы можете закоммитить свои изменения в настройках сайта и передать изменения на Dev или Live. Идея конфигураций в Drupal 8, похожа на то как работает модуль Features:

https://www.drupal.org/project/features

Только features интегрирован не со всеми модулями и не всегда можно было перенести все настройки сайта через Features. Конфигурация в Drupal 8 работает со всеми настройками и позволяет выгрузить все в файлы.

При установке Drupal создает папку для выгрузки конфигурации. По умолчанию это папка с длинным именем, которая лежит в sites/default/files:

config

Название папке генерируется случайным образом, это нужно потому что папка лежит в открытом доступе в папке files, у которой права доступа 777. Такое длинное название не даст возможность подобрать название папке к конфигам, чтобы скачать их. Дело в том, что конфиги могут содержать доступы к API, Solr, SMTP и эта информация должна быть скрыта. Мы можем указать путь к папке конфигов через файл settings.php:

$config_directories['sync'] = 'sites/default/files/config__RPFDnw0- VygzmxgHiXPoXGNKYmjVi3mDZmP5exZX8tRleV9jXG6ZECaPRaxekelYsMCF42HwA/sync';

Sync папка будет использоваться для переноса конфигов между сайтами. Drupal по умолчанию хранит конфиги в базе данных и использует active конфигурацию. Вы можем хранить active конфигурацию в файлах как и sync папку, но лучше всего оставить active конфигурацию в базе даннах, так друпал будет работать быстрее. Вы можете посмотреть таблицу config с конфигами через PhpMyAdmin или Adminer:

config

Здесь храняться сериализованные массивы с конфигурациями.

Обычно sync папку с конфигами хранят вне sites/default/files, потому что files папка не храниться в гите. Давайте сменим путь к папке с конфигами:

$config_directories['sync'] = 'config/sync';

Теперь мы можем добавить наши конфиги в git. Можно выгрузить конфигурацию вручную:

/admin/config/development/configuration/full/export

 Configuration -> Configuration syncronization -> Export 

export

Если вы нажмете на кнопку Export, то друпал выдаст архив со всеми конфигурациями. Теперь вы можете добавить эти конфигурации в гит:

configuration

Ручная выгрузка конфигов через сайт не всегда работает. Когда у вас становится много конфигов, то выгрузка может прерваться. Поэтому лучше всего делать выгрузку через drush:

drush config-export

или через Drupal Console:

drupal config:export

Тоже самое и с импортом, этом можно делать через drush

drush config-import

и drupal Console: 

drupal config:import

Хранить конфиги в корне сайта не очень хорошая идея. Лучше всего хранить конфиги в папке вне сайта, для этого нужно поменять настройки settings.php:

$config_directories['sync'] = '../config/sync';

Пока вы изучаете друпал, то вы можете оставить папку с конфигами как есть в корне сайта.

Теперь когда вы выгрузили конфигурацию и добавили ее в гит, на другом сайте вы можете загрузить эту конфигурацию. Давайте изменим какие-нибудь настройки на сайте, например имя сайта:

/admin/config/system/site-information

И зайдем на страницу Configuration Syncronization:

/admin/config/development/configuration

syncronize

Друпал сравнивает текущую конфигурацию active из таблицы config с конфигурацией sync и если есть различия, то на этой странице вы можете их посмотреть. Если вы нажмете кнопку Import all, то друпал загрузить вашу конфигурацию  sync в вашу активную конфигурацию в таблицу config. Таким образом вы можете заливать свои изменения на другие инстансы вашего сайта.