11.03.2020 P. Sklenář

Composer je určen pro správu závislostí v PHP, tzn., udržuje aktuální kód nejen jádra Dupalu a rozšiřujících modulů, ale i externí knihovny třetích stran. Drupal 8 užívá komponenty PHP frameworku Symfony, nově doporučený postup instalace je pomocí Composeru s použitím šablony pro projekty Drupal 8 s přemístěným kořenem dokumentu.

Instalace a administrace Drupalu pomocí Composeru sice není nutná, manuální údržba přes FTP se však stává náročnější. Některé rozšiřující moduly s externími knihovnami snad bez Composeru ani nelze snadno nainstalovat. Řešením je správa projektu s Drupalem pomocí Composeru. Po překonání počátečních obtíží je údržba webu s Composerem docela snadná.

Přístup k serveru pomocí SSH není u většiny českých webhostingů samozřejmostí, spíše se setkáte s paměťovým a časovým omezením běhu PHP skriptů, nepovolenými direktivy v .htaccess apod. Rozumným řešením je používat vlastní vývojový server s root přístupem a možností změny v konfiguraci serveru. Nyní používám pro vývoj server s Debianem 10 (viz např. The Perfect Server - Debian 10 with Apache, BIND, Dovecot, PureFTPD and ISPConfig 3.1). Na vlastní server nainstalujete kromě Composeru i Node.js se správcem javascriptových balíčků NPM. S NPM si můžete stáhnout do projektu různé užitečné nástroje a aplikace jako např. Gulp pro komilaci souborů SASS.

Instalace Drupalu

Máte-li osvědčený vlastní lokální server s nastavenými přístupovými právy, je instalace nového webu s Drupalem snadná. Nejprve je třeba stáhnout Composer (viz Download Composer) do bin v rootu /var/www/clients/client3/web3/web/bin. Do stejného adresáře lze instalovat i spustitelný drush. Pak se přesunete do rootu a vytvoříte projekt v adresáři "www" z doporučené šablony Drupalu:

composer create-project drupal/recommended-project:~8.9 www --stability dev --no-interaction

Instalace Drupalu je hotová:

web3@server1:/var/www/clients/client3/web3/web$
composer create-project drupal/recommended-project:~8.9 www
Creating a "drupal/recommended-project:~8.9" project at "./www"
Installing drupal/recommended-project (8.9.1)
  - Installing drupal/recommended-project (8.9.1): Downloading (100%) 
  
 .... 


  Congratulations, you’ve installed the Drupal codebase
  from the drupal/recommended-project template!

Next steps:
  * Install the site: https://www.drupal.org/docs/8/install
  * Read the user guide: https://www.drupal.org/docs/user_guide/en/index.html
  * Get support: https://www.drupal.org/support
  * Get involved with the Drupal community:
      https://www.drupal.org/getting-involved
  * Remove the plugin that prints this message:
      composer remove drupal/core-project-message
  * Homepage: https://www.drupal.org/project/drupal
  * Support:
    * docs: https://www.drupal.org/docs/user_guide/en/index.html
    * chat: https://www.drupal.org/node/314178

web3@server1:/var/www/clients/client3/web3/web$

Composer stáhne z Gitu Drupal do nové struktury adresářů a automaticky vytvoří 2 soubory composer.json a composer.lock, uspořádání adresářů vypadá následovně:

/var/www/clients/client3/web3/web/
  ├── bin
  │    ├── composer
  │    └── drush
  ├── tmp
  └── www
       ├── vendor
       ├── web          <- DocumentRoot
       │    ├── core
       │    ├── modules
       │    │    ├── contrib
       │    │    └── custom
       │    ├── profiles
       │    ├── sites
       .    .    └── default
       .    .    .    ├── settings.php
       .    .    .    └── files       
       .    .    .         ├── php/twig
       .    .    .         ├── js/         
       .    .    .         ├── styles/
       .    .    .         ├── css/             
       .    .
       │    ├── themes
       │    │    ├── contrib
       │    │    └── custom
       │    ├── .htaccess
       │    └── web.config    
       ├── composer.json
       └── composer.lock

Před spuštěním webu je potřeba ještě aktualizovat konfiguraci webového serveru tak, aby ukazovala na nový docroot. V uvedeném příkladu:
DocumentRoot /var/www/clients/client3/web3/web/www/web.

Existující web a Composer

Použitá Composeru ke správě Drupalu a všech závislostí (moduly, témata, knihovny) pro weby vytvořené dříve tradičním postupem je trochu složitější než instalace nového webu popsaná výše. Mimo vlastní instalaci Composeru je zásadní rozdíl v uspořádání adresářů. Soubory composer.json a composer.lock (je nutné je upravit) a adresář vendor jsou o úroveň výš než docroot, adresáře modules a themes obsahují podadresáře contrib a custom, jako je ilustrováno výše.

Úprava instalace Drupalu 8 na novou šablonu je doporučená, i když byl web nainstalován prostřednictvím Composeru ze zastaralé šablony. Migrace webu na nově doporučenou šablonu zjednoduší budoucí aktualizace jádra Drupalu, rozšiřujících modulů a témat. Před převodem webu je samozřejmostí mít zálohu produkčního webu včetně databáze. Všechny úpravy provádím na lokálním vývojovém webu a po důkladném prověření výsledný projekt přesunu na produkční server.

Některé pomocné nástroje se pokouší automatizovat proces převodu starých webů na projekty Composeru, postup však není dokonalý a vždy zbývá dokončit práci ručními zásahy. Zkoušel jsem např. plugin pro Composer Composerize Drupal. S úspěchem jsem však již několikrát použil postup popsaný na portálu Drupalu: Add Composer to an existing site. Na stránce je podrobný průvodce manuálního postupu přidání podpory Composeru na existující web, který byl dříve nainstalován bez Composeru. 

Manuální převod je docela přímý i pro rozsáhlé weby a nevyžaduje mnoho času.

Základní postup v několika krocích

  1. Nainstalujte nový web Drupalu pomocí aktuální šablony Composeru do nového adresáře tak, jak je uvedeno výše.
  2. Zkopírujte všechna vlastní témata (themes/custom) , moduly (modules/custom) a soubory v adresáři files do nového projektu.
  3. Upravte a přeneste nastavení settings.php do nového projektu.
  4. Přidejte všechny rozšiřující moduly do nového souboru composer.json a spusťte composer install. K přidání/instalaci modulů lze použít: composer require drupal/module-name-1 drupal/module-name-2 drupal/module-name-i.
  5. Aktualizujte databázi a vymažte mezipaměť (drush updb; drush cr).
  6. Aktualizujte konfiguraci webového serveru, viz výše DocumentRoot.

Podrobné instrukce k migraci webu jsou popsány ve zmíněném článku.