Добавить Composer на существующий сайт
Упрощено в Drupal 8.8.0
Обратите внимание: если вы начали свой проект с использованием Drupal версии 8.8.0 или новее, ваш сайт уже использует правильную файловую структуру и готов к конвертации в Composer.
Эта страница представляет собой пошаговое руководство по добавлению поддержки Composer вручную на существующий сайт, который ранее был установлен без Composer. Это руководство для вас, если вы установили сайт Drupal 8 вручную из архива или использовали заброшенный шаблон Composer, такой как drupal/drupal.
Для сайтов, созданных на Drupal 8.8.0 или новее
Даже если вы установили Drupal 8.8.0 из архива, Composer был предварительно установлен. Таким образом, вы должны иметь возможность управлять своим сайтом с помощью Composer без каких-либо дополнительных действий по конвертации сайта.
Для сайтов, созданных до Drupal 8.8.0
Файл composer.json, поставляемый с архивами, загруженными с https://www.drupal.org/download до Drupal 8.8.0, не предназначался для использования с сайтом, управляемым композитором.
Если вы хотите переключиться с ручного управления на использование Composer для установки и обновления ядра Drupal и дополнительных модулей, вам сначала нужно изменить файл composer.json вашего сайта.
Типичные сообщения об ошибках Composer, которые могут указывать на плохой файл composer.json:
Nothing to install or update (even though updates exist) Installation request for drupal/drupal No version set (parsed as 1.0.0) -> satisfiable by drupal/drupal[No version set (parsed as 1.0.0)]. don't install drupal/core 8.x.x | remove drupal/drupal No version set (parsed as 1.0.0) Your requirements could not be resolved to an installable set of packages.
Иногда проблемы с шаблонами Composer можно решить, удалив файл блокировки композитора и каталог vendors (composer.lock и vendor/) перед запуском обновления Composer, но преобразовав существующий сайт Drupal 8 в проект, управляемый с помощью шаблона Composer, предложенного в Drupal. 8 Руководство по установке (3.5. Использование Composer для загрузки и обновления файлов) будет более устойчивым решением проблем при обновлении Drupal.
Инструменты gocomposer и composerize drupal пытаются автоматизировать процесс преобразования старых сайтов в проекты Composer, но преобразование вручную довольно просто даже для обширных сайтов и не требует много времени.
В конце процесса ваш проект будет иметь рекомендованную структуру каталогов. Конфигурация Composer (composer.json, composer.lock и т. Д.), Drush и каталог vendors будут размещены вне вашего webroot. Ваш оригинальный webroot будет содержать новую папку с именем web/, где находится настоящий веб-сайт. Если ваш проект в настоящее время использует другой макет каталога, вам придется обновить конфигурацию вашего веб-сервера, чтобы он указывал на новый каталог web/. Мы вернемся к этому позже.
TL; DR?
- Установите новый сайт Drupal, используя текущий шаблон Composer, в новый каталог.
- Скопируйте все пользовательские темы, модули, файлы и настройки в новый проект. (Дважды проверьте структуру каталогов.)
- Перенос настроек в новый проект.
- Добавьте все добавленные модули в новый файл composer.json и запустите установку composer.
- Обновление базы данных и очистка кэша (drush updb; drush cr)
- Обновите конфигурацию веб-сервера.
ПОЛНАЯ ИСТОРИЯ
В этих инструкциях предполагается, что ваш существующий веб-сайт находится в каталоге /var/www/sites/html/ и что вы создадите новый сайт по адресу /var/www/sites/new_html/. Настройте пути для ваших реальных каталогов.
Прежде чем вы начнете
Если вы собираетесь «сочинять» старый сайт Drupal, ядро и модули contrib этого сайта, вероятно, будут не в их последних доступных версиях. Если вы будете слепо следовать этому руководству, ядро Drupal и все модули будут обновлены до последних версий. Вероятно, это именно то, что вы хотите, но подумайте о конфигурации вашего сайта. Есть ли веские причины не обновлять все модули или ядра до их последних версий? Возможно, вы получили установку, которая зависит от более старой версии библиотеки или дополнительного модуля и не должна обновляться.
Если вы хотите обновить все до последней версии, просто следуйте этому руководству и устраняйте проблемы после завершения обновления. После обновления вы, вероятно, увидите некоторые ошибки или хотя бы предупреждения, связанные с более новыми версиями модулей. Просто погуглите сообщения об ошибках и посмотрите, есть ли какие-либо исправления или исправления для этой проблемы.
Если вы предпочитаете придерживаться своих первоначальных версий и позднее выполнить обновление с помощью Composer, вам необходимо убедиться, что вы устанавливаете те же версии модулей ядра и ресурсов Drupal, которые использовались на вашем старом сайте. См. Руководства для composer create-project о том, как загрузить определенную версию ядра или определенную версию модулей contrib. Наконец, убедитесь, что вы указываете эти версии перед запуском composer create-project или при выполнении composer require. (I. e. composer require vendor/package:version)
1. Установите новый сайт Drupal
Создайте новый проект Drupal из шаблона drupal/recommended-project:
cd /var/www/sites composer create-project drupal/recommended-project:~8.8.0 new_html --stability dev --no-interaction
Это создаст каталог new_html/ в текущем каталоге, содержащем каталоги vendors и web (= webroot) и ваш composer.json, файлы и т. д. Если ваш старый проект не использовал эту структуру каталогов, то вы можете привыкнуть к возможность запуска drush и composer прямо из этого каталога, а не только из вашего корня.
В этих инструкциях ранее предлагалось использовать drupal-composer/drupal-project, который теперь устарел в пользу официально поддерживаемого шаблона: drupal/recommended-project
2. Скопируйте файлы в новый проект Composer
Примечание. Следующие инструкции необходимы только для сайтов, созданных с версией Drupal до версии 8.8.0.
Если ваш проект был создан до версии Drupal 8.8.0, теперь вы должны скопировать свои пользовательские модули, темы и библиотеки из старого каталога проекта в новый проект. Убедитесь, что вы поместили файлы в правильные каталоги в вашем новом проекте, так как ваша старая структура папок может отличаться.
Правильные пути можно найти в разделе «installer-paths» вашего composer.json:
"extra": { "composer-exit-on-patch-failure": ... "patchLevel": { ... }, "installer-paths": { "web/core": ["type:drupal-core"], "web/libraries/{$name}": ["type:drupal-library"], "web/modules/contrib/{$name}": ["type:drupal-module"], "web/profiles/contrib/{$name}": ["type:drupal-profile"], "web/themes/contrib/{$name}": ["type:drupal-theme"], "drush/Commands/{$name}": ["type:drupal-drush"] }, "drupal-scaffold": { ... } }
На вашем старом сайте модули, вероятно, были найдены в /var/www/sites/html/modules/. На новом сайте они должны быть размещены в каталоге, указанном в разделе пути установки: /var/www/sites/new_html/web/modules/.
- Пользовательские темы находятся в /var/www/sites/new_html/web/themes/custom/
- Пользовательские модули находятся в /var/www/sites/new_html/web/modules/custom/
- Библиотеки находятся в /var/www/sites/new_html/web/libraries/
- Ваши загруженные файлы и изображения находятся в /var/www/sites/new_html/web/sites/default/files/
Дважды проверьте, что веб-сервер имеет разрешения на запись для каталога файлов, так же, как вы делаете это при установке нового сайта Drupal. Прочтите раздел Защита прав доступа к файлам и права собственности, если вы хотите узнать больше о правах доступа к каталогу.
Предположим, что пользователь вашего веб-сервера - www-data, а пользователь FTP-сервера - vftp. Вы должны запустить что-то вроде этого из командной строки, чтобы установить права доступа к файлу и каталогу:
#Set group of the files folder to the webserver user sudo chown -R vftp:www-data /var/www/sites/new_html/web/sites/default/files #Allow the webserver user group to edit and access folders in the files directory sudo find /var/www/sites/new_html/web/sites/default/files -type d -exec chmod u=rwx,g=rwx,o= '{}' \; #Allow the webserver user group to edit all files in the files directory. sudo find /var/www/sites/new_html/web/sites/default/files -type f -exec chmod u=rw,g=rw,o= '{}' \;
Ваша папка files содержит все файлы, загруженные пользователями на ваш старый сайт, а также некоторые папки с временными файлами, такими как сжатые таблицы стилей или шаблоны кэшированных веток.
Если вы скопировали эти папки с временными файлами со старого сайта в новый каталог файлов, обязательно удалите их вручную. Этими папками обычно являются php/, js/, styles/ и css/ внутри вашего нового каталога /var/www/sites/new_html/web/sites/default/files. Обычно эти файлы генерируются автоматически после очистки кеша (drush cr) и посещения сайта вашим браузером, поэтому вам не нужно беспокоиться при их удалении. Но, как всегда, убедитесь, что у вас есть резервная копия этих файлов, прежде чем вы удалите их ;-).
3. Перенести settings.php в новый проект
Скопируйте информацию о подключении к базе данных и т. Д. Из старого файла settings.php в новый проект. В основном это будут массивы $databases['default']['default'], ваши массивы $settings['hash_salt'] и $settings['trusted_host_patterns'] и, возможно, некоторые пользовательские настройки, которые вы сделали. Просто посмотрите на два файла settings.php, чтобы увидеть, что вам нужно скопировать.
Также убедитесь, что $config_directories['sync'] указывает на существующий каталог. Вероятно, это должно быть за пределами вашего webroot, где находится composer.json. Если вы установили Drupal другим способом, это также может указывать на некоторый файл в вашем каталоге sites/default/files/. Дважды проверьте, что путь, определенный в $config_directories['sync'], действительно существует и доступен для записи пользователю вашего веб-сервера.
Кроме того, не забудьте скопировать файлы настроек разработки settings.local.php и development.services.yml в новый проект.
4. Добавьте добавленные модули в новый конфиг Composer
Теперь вам нужно добавить все модули вашего проекта в новый файл composer.json в вашем новом webroot.
Вы можете либо добавить модули вручную в свой composer.json, либо использовать composer require для добавления последних версий всех модулей на свой сайт.
4.1 Получение списка модулей вашего сайта
Если вы ранее не использовали Composer для управления этим сайтом, ваш старый файл composer.json не отображает список модулей в разделе 'require'. В этом случае вам придется вручную собрать список всех добавленных (не пользовательских) модулей.
Вы можете добиться этого, получив список каталогов вашего старого сайта modules/contrib/ или modules/ directory (в зависимости от вашей настройки). В composer.json вы просто добавляете drupal/ к каждому имени каталога модулей. Например, модули modules/contrib/devel/ становятся drupal/devel.
Убедитесь, что вы разместили пакеты разработки, такие как drupal/devel или drupal/kint, в разделе «require-dev», где вы уже должны найти webflo/drupal-core-require-dev.
4.2 Добавление модулей в composer.json вручную
Отредактируйте composer.json в корне нового проекта (например, /var/www/sites/new_html) и скопируйте список пакетов из старых разделов composer.json «require» и «require-dev» в новый файл composer.jsonfile. Используя ручной подход, вы должны позаботиться о правильных версиях модулей самостоятельно.
4.3 При использовании composer требуется установить модули
Вместо добавления имен и версий модулей в composer.json вручную, вы также можете запустить composer require drupal/<module name> для каждого из необходимых модулей. Вы можете добавить все свои модули одновременно, используя composer. Требуется composer require drupal/module-name-1 drupal/module-name-2 drupal/module-name-i. Используйте composer require --dev drupal/<module name>, чтобы добавить модуль в раздел require-dev файла composer.json.
4.4 Завершение установки Composer
Запустите установку composer из каталога вашего проекта (например, /var/www/sites/new_html/). Это загрузит все модули, которые вы добавили в composer.json ранее. Если у вас возникли проблемы, просто удалите composer.lock и каталог vendors и повторите попытку.
Вам не нужно будет включать все модули вручную, потому что вы либо используете базу данных своего старого сайта, либо собираетесь импортировать базу данных со старого сайта в любом случае.
5. Обновите базу данных и очистите кеш
Обязательно примените все доступные обновления базы данных, запустив drush updb.
Затем очистите кеш Drupal, запустив drush cr из каталога проекта (/var/www/sites/new_html).
Если вы видите ошибку Missing $settings['hash_salt'] in settings.php при запуске drush updb, обратитесь к разделу «Устранение неполадок» ниже. Вы, вероятно, просто забыли скопировать некоторые значения из файла settings.php вашего старого сайта.
6. Обновите конфигурацию веб-сервера
Обновите конфигурацию вашего веб-сервера, чтобы он указывал на новый веб-корень. В нашем примере /var/www/sites/new_html/web/. Если вы используете некоторые настройки php-fpm, также обязательно обновите настройки php-fpm (например, /etc/php/7.2/fpm/pool.d/yoursite.conf), чтобы они указывали на новый webroot. Не забудьте перезагрузить или перезапустить сервисы после обновления конфигов.
7. Устранение неисправностей
7.1 Предупреждения или ошибки на странице отчетов
Проверьте отчеты своего сайта, чтобы убедиться, что вы не видите кучу предупреждений или сообщений об ошибках. Если вы будете следовать этому руководству, не обновляя свой старый сайт до последней версии Drupal, прежде чем начать, вы, вероятно, обновите ядро и все добавленные модули до последней версии. Это может привести к ошибкам или предупреждениям, которых не было на вашем старом сайте. Просто исправьте их так же, как и после «нормального» обновления Drupal.
7.2. Отсутствует Hash Salt
Если вы видите ошибку Missing $settings['hash_salt'] in settings.php при запуске drush updb или drush cr, вы, вероятно, просто забыли скопировать некоторые значения из вашего старого сайта settings.php. В этом случае значение $settings['hash_salt']. Либо скопируйте hash_salt из вашего старого settings.php, либо сгенерируйте новую соль, выполнив эту команду в корневом каталоге вашего сайта:
drush php-eval 'echo \Drupal\Component\Utility\Crypt::randomBytesBase64(55) . "\n"'
Он выведет новое хеш-значение, которое можно просто скопировать в ваш новый файл settings.php.
Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.