Eva Rázgová photo

Má-li být váš projekt bezpečný a dlouhodobě životaschopný, měli byste jej nejen dobře naplánovat a postavit, ale také udržovat, což obnáší především pravidelné aktualizace softwaru. 

Aktualizace (update) je nahrazení softwaru novější verzí a provedení případných souvisejících databázových změn, a to v rámci stávajícího “major release”, tj. Drupal 8.3.6 > 8.3.7, nebo 8.3.6 > 8.4.0 apod. (Naproti tomu upgrade je přechod z Drupalu 6.x > 7.x nebo 7.x > 8.x).
 

Kdy aktualizovat

Nelze tvrdit, že musíte mít na webu vždy nejaktuálnější verze všech modulů či témat vzhledu. Někdy je dobrý důvod k tomu, abyste se drželi verze starší - třeba proto, že v novější verzi modulu se s novou funkcionalitou objeví problém, který je třeba dořešit. Existuje však situace, kdy byste váhat neměli: v momentě, kdy vyjde bezpečnostní aktualizace - tj. nová verze, která opravuje bezpečnostní chybu. (Úvahu nad tím, zda a v jakém případě lze některé bezpečnostní aktualizace vynechat, si necháme do jiného textu - zde se chceme věnovat procesu aktualizace spíše z technického hlediska). Ať už se jedná o bezpečnostní nebo jinou aktualizaci, postup je vždy stejný.
 

Než začnete s aktualizací

  1. Samozřejmostí by mělo být, že aktualizace neprovádíte rovnou v produkčním, nýbrž ve vývojovém prostředí. Teprve když proběhne vše v pořádku a podle vašich představ, přenášíte změny na produkční web.
  2. Přihlaste se na web jako uživatel s oprávněním Spravovat aktualizace softwaru (Administer software updates).
  3. Zjistěte, co vše chcete aktualizovat. Nehledě na to, že určitě odebíráte bezpečnostní novinky z Drupal.org (pokud ne, tak začněte), dostupné aktualizace zjistíte jedním z následujících postupů:
    1. pomocí composeru: composer outdated
    2. pomocí drushe: drush ups (zkrácená verze příkazu drush pm-updatestatus)
    3. pomocí modulu Update Manager, na adrese /admin/reports/updates (modul je součástí jádra).
  4. Přečtěte si poznámky k vydání jádra, modulů i témat, které chcete aktualizovat. Může se stát, že některá z nových verzí např. vyžaduje předchozí aktualizaci jiného modulu. 
  5. Doporučení: v závislosti na použitých technologiích se ujistěte, že budete schopni z logů aplikací pohodlně (i zpětně) získat přehled o změnách, které jste provedli. Pokud tomu tak není, veďte si seznam prováděných změn.
    Jestliže některé části softwaru ponecháte záměrně ve stávající verzi (tj. aktualizaci vynecháte), je šikovné poznamenat si důvod (příště o tom nebudete muset znovu přemýšlet, dohledávat “issues” apod.).
  6. Přepněte web do režimu údržby (drush sset system.maintenance_mode 1, nebo na adrese /admin/config/development/maintenance, následně vyčistěte cache: drush cr).
  7. Zálohujte celý váš projekt tak, abyste ho v případě potřeby dokázali ze zálohy plně obnovit. Je tudíž potřeba zálohovat všechny soubory, které se mohou při aktualizaci změnit, i databázi. Nespoléhejte na zálohy webhostingu či jiné automatické zálohy - potřebujete “čerstvou” zálohu před aktualizací. Pokud používáte composer a verzovací systém, proveďte commit a push také pro soubory composer.json a composer.lock. (Pro úplné začátečníky: alespoň napoprvé otestujte, že je vaše záloha funkční - tj. pokuste se zprovoznit ji někde paralelně, např. na testovací doméně).
    Pozn.: Pokud web budete aktualizovat pomocí drushe, pak můžete počítat s tím, že drush aktualizované moduly automaticky zazálohuje, takže stačí zazálohovat databázi, např. pomocí příkazu drush sql-dump > cesta/zaloha.sql.

Automatická aktualizace pomocí composeru

(Pokud nejste zvyklí používat composer, aktualizace by neměla být vaší první zkušeností s tímto nástrojem.)

Pro každý modul, který chcete aktualizovat (vývojové prostředí):

  1. composer update drupal/module_name --with-dependencies
    (vs. NEdoporučuje se: composer update --with-dependencies)
  2. provedení potřebných aktualizací v databázi: drush updb
  3. vyprázdnění cache: drush cr
  4. Pokud máte změny v souborech .htaccess, composer.json nebo robots.txt oproti původním originálům, aplikujte je znovu na aktualizované soubory. Někdy jsou změny také v souboru settings.php (informace najdete v poznámkách k vydání v příslušné verzi jádra). V tom případě musíte vlastní změny v settings.php rovněž aplikovat ručně.

Kontrola po aktualizaci (vývojové prostředí):

  1. zkontrolujte hlášení stavu (/admin/reports/status)
  2. zkontrolujte fungování webu z pohledu administrátora
  3. přepněte z režimu údržby do běžného režimu  (drush sset system.maintenance_mode 0, nebo /admin/config/development/maintenance, následně drush cr).
  4. zkontrolujte fungování webu webu z pohledu anonymního uživatele, případně dalších rolí.

Přenesení změn na produkční prostředí:

  1. ujistěte se, že jste na produkci přenesli oba soubory composer.json i composer.lock
  2. Přepněte web do režimu údržby (drush sset system.maintenance_mode 1)
  3. proveďte composer install --no-dev
    (NE composer update)
  4. Proveďte aktualizaci databáze a aktualizaci entit: drush updb, drush entup
  5. Vymažte cache drush cr
  6. Přepněte web do provozního režimu (drush sset system.maintenance_mode 0)

Automatická aktualizace pomocí Drushe

  1. Aktualizace jádra: drush up drupal
  2. Aktualizace jednotlivých modulů: drush up module_name
  3. Provedení databázových změn a změn entit: drush updb, drush entup
  4. Pokud jste prováděli změny v souborech .htaccess, composer.json nebo robots.txt, aplikujte je ručně. Někdy jsou změny také v souboru settings.php (informace najdete v poznámkách k vydání v příslušné verzi jádra). V tom případě musíte vlastní změny v settings.php rovněž aplikovat ručně.

Kontrola po aktualizaci je stejná, jako v případě composeru.
 

Manuální aktualizace (nedoporučuje se)

  1. V příkazové řádce (shell) přejděte do adresáře s instalací Drupalu:
    cd /path/to/your/installation
  2. Jestliže jste prováděli změny v souborech .htaccess, composer.json nebo robots.txt, ujistěte se, že máte jejich zálohu.
  3. Odstraňte adresáře /core a /vendor a dále všechny soubory v kořenovém adresáři webu, kromě těch, které jste přidali ručně:
    rm -rf core vendor
    rm -f *.* .*
  4. Stáhněte si nové verze jádra, modulů či témat, které chcete aktualizovat. Novou verzi jádra rozbalte a překopírujte do kořenového adresáře webu. V případě, že aktualizujete contrib moduly nebo témata, nahraďte celý původní adresář modulu/témata vzhledu novým modulem/tématem (původní adresář smažte, může obsahovat soubory, které se v nové verzi nevyskytují).
  5. Pokud jste prováděli změny v souborech .htaccess, composer.json nebo robots.txt, aplikujte je ručně. Někdy jsou změny také v souboru settings.php (informace najdete v poznámkách k vydání v příslušné verzi jádra). V tom případě musíte vlastní změny v settings.php rovněž aplikovat ručně.
  6. Spusťte aktualizaci databáze na adrese VAS_WEB/update.php.

Proveďte kontrolu webu (viz postup pro composer).
 

Pozn. v širším redakčním okruhu jsme se zcela neshodli na tom, zda by nebylo vhodnější pro Drupal 8 striktně razit pouze použití composeru. Osobně se stále přikláním k "rozcestníku" uveřejněném na Drupal.org, kde se composer doporučuje zkušenějším uživatelům. Záleží samozřejmě i na tom, jaký projekt spravujete, nakolik "future friendly" se cítíte a jak rychle se chcete učit. Vítám názory a zkušenosti v komentářích.

Autor: Eva Rázgová

Obsahová revize textu: Martin Klíma, Petr Illek

Úvodní obrázek: Todd Quackenbush (public domain license)