Adicionar Composer a um Site Existente
Simplificado no Drupal 8.8.0
Observe: se você começou seu projeto usando Drupal versão 8.8.0 ou mais recente, seu site já está usando a estrutura de arquivo correta e está pronto para conversão do Composer.
Esta página é um guia passo a passo para adicionar manualmente suporte ao Composer em um site existente que foi instalado anteriormente sem Composer. Este guia é para você se instalou um site Drupal 8 manualmente a partir de um arquivo ou usou um modelo desatualizado do Composer, como drupal/drupal.
Para Sites Criados no Drupal 8.8.0 ou Mais Recente
Mesmo que você tenha instalado o Drupal 8.8.0 a partir de um arquivo, o Composer foi pré-instalado. Portanto, você deve ser capaz de gerenciar seu site usando o Composer sem nenhuma etapa adicional de conversão de site.
Para Sites Criados Antes do Drupal 8.8.0
O arquivo composer.json fornecido com arquivos baixados de https://www.drupal.org/download antes do Drupal 8.8.0 não foi projetado para ser usado com um site gerenciado por Composer.
Se você deseja mudar de gerenciamento manual para usar o Composer para instalar e atualizar o núcleo do Drupal e módulos de contribuição, primeiro você precisa alterar o arquivo composer.json do seu site.
Mensagens de erro típicas do Composer que podem indicar um arquivo composer.json ruim:
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.
Às vezes, problemas com modelos do Composer podem ser resolvidos removendo o arquivo de bloqueio do Composer e o diretório vendors (composer.lock e vendor/) antes de executar uma atualização do Composer, mas converter um site Drupal 8 existente em um projeto gerenciado usando o modelo do Composer sugerido no Manual de Instalação do Drupal 8 (3.5. Usando Composer para Baixar e Atualizar Arquivos) será uma solução mais robusta para evitar problemas ao atualizar o Drupal.
As ferramentas gocomposer e composerize drupal tentam automatizar o processo de converter sites antigos em projetos do Composer, mas fazer a conversão manualmente é bastante simples, mesmo para sites extensos e não leva muito tempo.
No final do processo, seu projeto terá a estrutura de diretório recomendada. A configuração do Composer (composer.json, composer.lock, etc.), Drush e o diretório vendors serão colocados fora de sua raiz da web. Sua raiz da web original conterá uma nova pasta chamada web/, onde fica o site da web real. Se seu projeto está usando um layout de diretório diferente no momento, você precisará atualizar a configuração do seu servidor web para apontarpara o novo diretório web/. Voltaremos a isso mais tarde.
TL; DR?
- Instale um novo site Drupal usando o modelo Composer atual em um novo diretório.
- Copie todos os seus temas, módulos, arquivos e configurações personalizados para o novo projeto. (Verifique a estrutura de diretórios duas vezes.)
- Migre as configurações para o novo projeto.
- Adicione todos os módulos contributos ao novo arquivo composer.json e execute a instalação do Composer.
- Atualize o banco de dados e limpe o cache (drush updb; drush cr)
- Atualize a configuração do servidor web.
HISTÓRIA COMPLETA
Estas instruções assumem que seu site existente está no diretório /var/www/sites/html/ e que você criará um novo site em /var/www/sites/new_html/. Ajuste os caminhos para seus diretórios reais.
Antes de Começar
Se você vai "compor" um site Drupal antigo, o núcleo e os módulos contrib desse site provavelmente não estarão em suas versões mais recentes disponíveis. Se você seguir cegamente este guia, o núcleo do Drupal e todos os módulos serão atualizados para suas versões mais recentes. Isto é provavelmente exatamente o que você quer, mas pense sobre a configuração do seu site. Existem razões válidas para não atualizar todos os módulos ou núcleo para suas versões mais recentes? Talvez você tenha uma instalação que depende de uma versão mais antiga de uma biblioteca ou módulo de contribuição e não deve ser atualizada.
Se você deseja atualizar tudo para a versão mais recente, apenas siga este guia e resolva problemas após a conclusão da atualização. Após atualizar, você provavelmente verá alguns erros ou pelo menos avisos relacionados a versões mais novas de módulos. Basta google as mensagens de erro e veja se há correções ou soluções para esse problema.
Se você preferir ficar com suas versões originais e fazer a atualização mais tarde usando o Composer, você precisará garantir que está instalando as mesmas versões de módulos core e recursos do Drupal que foram usadas no seu site antigo. Consulte os guias para como baixar uma versão específica do núcleo ou uma versão específica de módulos contrib. Finalmente, certifique-se de especificar essas versões antes de executar composer create-project ou ao executar composer require. (I. e. composer require vendor/package:version)
1. Instale um Novo Site Drupal
Crie um novo projeto Drupal a partir do modelo drupal/recommended-project:
cd /var/www/sites
composer create-project drupal/recommended-project:~8.8.0 new_html --stability dev --no-interaction
Isso criará um diretório new_html/ no diretório atual, contendo diretórios vendors e web (= webroot) e seu composer.json, arquivos, etc. Se seu projeto antigo não usar esta estrutura de diretório, você pode se acostumar com a capacidade de executar drush e composer diretamente neste diretório, não apenas no seu raiz.
Estas instruções anteriormente sugeriram usar drupal-composer/drupal-project, que agora está descontinuado em favor do modelo oficialmente mantido: drupal/recommended-project
2. Copie Arquivos para o Novo Projeto do Composer
Nota. As instruções a seguir são necessárias apenas para sites criados com versão Drupal anterior a 8.8.0.
Se seu projeto foi criado antes do Drupal 8.8.0, você deve agora copiar seus módulos, temas e bibliotecas personalizados do diretório de projeto antigo para o novo projeto. Certifique-se de colocar os arquivos nos diretórios corretos no seu novo projeto, pois sua estrutura de pasta antiga pode ser diferente.
Os caminhos corretos podem ser encontrados na seção "installer-paths" do seu 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": {
...
}
}
No seu site antigo, os módulos provavelmente foram encontrados em /var/www/sites/html/modules/. No novo site, eles devem ser colocados no diretório especificado na seção installer-paths: /var/www/sites/new_html/web/modules/.
- Os temas personalizados estão em /var/www/sites/new_html/web/themes/custom/
- Os módulos personalizados estão em /var/www/sites/new_html/web/modules/custom/
- Bibliotecas estão em /var/www/sites/new_html/web/libraries/
- Seus arquivos e imagens carregados estão em /var/www/sites/new_html/web/sites/default/files/
Verifique novamente se o servidor web tem permissões de gravação para o diretório de arquivos, da mesma forma que faria ao instalar um novo site Drupal. Leia a seção Protegendo Permissões e Propriedade de Arquivos se quiser saber mais sobre permissões de diretório.
Supondo que o usuário do seu servidor web é www-data e o usuário do servidor FTP é vftp. Você deve executar algo como isto a partir da linha de comando para definir permissões de arquivo e diretório:
#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= '{}' \;
Sua pasta de arquivos contém todos os arquivos carregados por usuários no seu site antigo, bem como algumas pastas com arquivos temporários, como folhas de estilos compactadas ou modelos de branch em cache.
Se você copiou essas pastas de arquivos temporários do site antigo para o novo diretório de arquivos, certifique-se de deletá-las manualmente. Essas pastas geralmente são php/, js/, styles/ e css/ dentro do seu novo diretório /var/www/sites/new_html/web/sites/default/files. Normalmente, esses arquivos são gerados automaticamente após limpar o cache (drush cr) e visitar seu site com seu navegador, portanto você não precisa se preocupar ao deletá-los. Mas, como sempre, certifique-se de ter um backup desses arquivos antes de deletá-los ;-).
3. Migre settings.php para o Novo Projeto
Copie informações de conexão do banco de dados etc. do seu arquivo settings.php antigo para o novo projeto. Basicamente, serão seus arrays $databases['default']['default'], seus arrays $settings['hash_salt'] e $settings['trusted_host_patterns'], e talvez algumas configurações personalizadas que você fez. Apenas olhe para os dois arquivos settings.php para ver o que você precisa copiar.
Também certifique-se de que $config_directories['sync'] aponta para um diretório existente. Provavelmente deve estar fora de sua raiz da web, onde composer.json está. Se você instalou o Drupal de outra forma, também pode apontar para algum arquivo no seu diretório sites/default/files/. Verifique novamente se o caminho definido em $config_directories['sync'] realmente existe e é gravável para o usuário do seu servidor web.
Além disso, não esqueça de copiar os arquivos de configuração de desenvolvimento settings.local.php e development.services.yml para o novo projeto.
4. Adicione Módulos Contributos ao Novo Config do Composer
Agora você precisa adicionar todos os módulos do seu projeto ao novo arquivo composer.json no seu novo projeto.
Você pode adicionar os módulos manualmente ao seu composer.json ou usar composer require para adicionar as versões mais recentes de todos os módulos ao seu site.
4.1 Obter Uma Lista dos Módulos do Seu Site
Se você nunca usou o Composer para gerenciar este site anteriormente, seu arquivo antigo composer.json não listará módulos na seção 'require'. Nesse caso, você terá que montar manualmente uma lista de todos os módulos de contribuição (não personalizados).
Você pode fazer isso obtendo uma lista de diretórios de seu site antigo modules/contrib/ ou diretório modules/ (dependendo de sua configuração). No composer.json, você simplesmente adiciona drupal/ a cada nome de diretório de módulo. Por exemplo, modules modules/contrib/devel/ se torna drupal/devel.
Certifique-se de colocar módulos de desenvolvimento como drupal/devel ou drupal/kint na seção "require-dev", onde você já deve encontrar webflo/drupal-core-require-dev.
4.2 Adicionar Módulos ao composer.json Manualmente
Edite composer.json na raiz do novo projeto (por exemplo, /var/www/sites/new_html) e copie a lista de pacotes das antigas seções composer.json "require" e "require-dev" para o novo arquivo composer.json. Usando a abordagem manual, você deve cuidar das versões corretas dos módulos você mesmo.
4.3 Usando Composer Require para Instalar Módulos
Em vez de adicionar manualmente nomes e versões de módulos ao composer.json, você também pode executar composer require drupal/
4.4 Concluir a Instalação do Composer
Execute a instalação do Composer a partir do diretório do seu projeto (por exemplo, /var/www/sites/new_html/). Isso baixará todos os módulos que você adicionou ao composer.json anteriormente. Se você tiver problemas, simplesmente exclua composer.lock e o diretório vendors e tente novamente.
Você não precisará ativar todos os módulos manualmente porque você está usando o banco de dados do seu site antigo ou vai importar o banco de dados do site antigo de qualquer forma.
5. Atualize o Banco de Dados e Limpe o Cache
Certifique-se de aplicar todas as atualizações de banco de dados disponíveis executando drush updb.
Em seguida, limpe o cache do Drupal executando drush cr a partir do diretório do projeto (/var/www/sites/new_html).
Se você vir um erro Missing $settings['hash_salt'] in settings.php ao executar drush updb, consulte a seção "Solução de Problemas" abaixo. Você provavelmente apenas esqueceu de copiar alguns valores do arquivo settings.php do seu site antigo.
6. Atualize a Configuração do Servidor Web
Atualize a configuração do seu servidor web para apontar para a nova raiz da web. No nosso exemplo /var/www/sites/new_html/web/. Se você estiver usando algumas configurações php-fpm, também certifique-se de atualizar as configurações php-fpm (por exemplo, /etc/php/7.2/fpm/pool.d/yoursite.conf) para apontarem para a nova raiz da web. Não esqueça de recarregar ou reiniciar serviços após atualizar os configs.
7. Solução de Problemas
7.1 Avisos ou Erros na Página de Relatórios
Verifique os relatórios do seu site para garantir que você não esteja vendo um monte de avisos ou mensagens de erro. Se você seguir este guia sem atualizar seu site antigo para a versão mais recente do Drupal primeiro, você provavelmente atualizará o núcleo e todos os módulos contrib para a versão mais recente. Isso pode resultar em erros ou avisos que não estavam no seu site antigo. Apenas corrija-os como faria após uma atualização "normal" do Drupal.
7.2. Hash Salt Ausente

Se você vir um erro Missing $settings['hash_salt'] in settings.php ao executar drush updb ou drush cr, você provavelmente apenas esqueceu de copiar alguns valores do seu arquivo settings.php antigo. Neste caso, o valor $settings['hash_salt']. Copie o hash_salt do seu arquivo settings.php antigo ou gere um novo salt executando este comando no diretório raiz do seu site:
drush php-eval 'echo \Drupal\Component\Utility\Crypt::randomBytesBase64(55) . "\n"'
Ele produzirá um novo valor hash que você pode simplesmente copiar para seu novo arquivo settings.php.