12.9. Работа с конфигурациями в Drupal 8. Active, Sync конфиги, перенос конфигов с DEV на LIVE.
Конфигурация в Drupal 8 это основа всех настроек типов материалов, полей, конфигурационных форм и переменных. С помощью конфигурации мы можем переносить изменения с одного сайта на другой, разрабатывать таким образом разные фичи одновременно и не мешая друг другу.
Конфигурации можно выгрузить в YML файлы и добавить их в Git репозиторий, таким образом вы можете закоммитить свои изменения в настройках сайта и передать изменения на Dev или Live. Идея конфигураций в Drupal 8, похожа на то как работает модуль Features:
https://www.drupal.org/project/features
Только features интегрирован не со всеми модулями и не всегда можно было перенести все настройки сайта через Features. Конфигурация в Drupal 8 работает со всеми настройками и позволяет выгрузить все в файлы.
При установке Drupal создает папку для выгрузки конфигурации. По умолчанию это папка с длинным именем, которая лежит в sites/default/files:
Название папке генерируется случайным образом, это нужно потому что папка лежит в открытом доступе в папке 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:
Здесь храняться сериализованные массивы с конфигурациями.
Обычно sync папку с конфигами хранят вне sites/default/files, потому что files папка не храниться в гите. Давайте сменим путь к папке с конфигами:
$config_directories['sync'] = 'config/sync';
Теперь мы можем добавить наши конфиги в git. Можно выгрузить конфигурацию вручную:
/admin/config/development/configuration/full/export
Configuration -> Configuration syncronization -> Export
Если вы нажмете на кнопку Export, то друпал выдаст архив со всеми конфигурациями. Теперь вы можете добавить эти конфигурации в гит:
Ручная выгрузка конфигов через сайт не всегда работает. Когда у вас становится много конфигов, то выгрузка может прерваться. Поэтому лучше всего делать выгрузку через 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
Друпал сравнивает текущую конфигурацию active из таблицы config с конфигурацией sync и если есть различия, то на этой странице вы можете их посмотреть. Если вы нажмете кнопку Import all, то друпал загрузить вашу конфигурацию sync в вашу активную конфигурацию в таблицу config. Таким образом вы можете заливать свои изменения на другие инстансы вашего сайта.