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í
- 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.
- Přihlaste se na web jako uživatel s oprávněním Spravovat aktualizace softwaru (Administer software updates).
- 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ů:
- pomocí composeru:
composer outdated
- pomocí drushe:
drush ups
(zkrácená verze příkazudrush pm-updatestatus
) - pomocí modulu Update Manager, na adrese
/admin/reports/updates
(modul je součástí jádra).
- pomocí composeru:
- 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.
- 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.). - 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
). - 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
acomposer.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říkazudrush 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í):
composer update drupal/module_name --with-dependencies
(vs. NEdoporučuje se:composer update --with-dependencies
)- provedení potřebných aktualizací v databázi:
drush updb
- vyprázdnění cache:
drush cr
- Pokud máte změny v souborech
.htaccess
,composer.json
neborobots.txt
oproti původním originálům, aplikujte je znovu na aktualizované soubory. Někdy jsou změny také v souborusettings.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 vsettings.php
rovněž aplikovat ručně.
Kontrola po aktualizaci (vývojové prostředí):
- zkontrolujte hlášení stavu (
/admin/reports/status
) - zkontrolujte fungování webu z pohledu administrátora
- 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
). - 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í:
- ujistěte se, že jste na produkci přenesli oba soubory
composer.json
icomposer.lock
- Přepněte web do režimu údržby (
drush sset system.maintenance_mode 1
) - proveďte
composer install --no-dev
(NEcomposer update
) - Proveďte aktualizaci databáze a aktualizaci entit:
drush updb
,drush entup
- Vymažte cache
drush cr
- Přepněte web do provozního režimu (
drush sset system.maintenance_mode 0
)
Automatická aktualizace pomocí Drushe
- Aktualizace jádra:
drush up drupal
- Aktualizace jednotlivých modulů:
drush up module_name
- Provedení databázových změn a změn entit:
drush updb, drush entup
- Pokud jste prováděli změny v souborech
.htaccess
,composer.json
neborobots.txt
, aplikujte je ručně. Někdy jsou změny také v souborusettings.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 vsettings.php
rovněž aplikovat ručně.
Kontrola po aktualizaci je stejná, jako v případě composeru.
Manuální aktualizace (nedoporučuje se)
- V příkazové řádce (shell) přejděte do adresáře s instalací Drupalu:
cd /path/to/your/installation
- Jestliže jste prováděli změny v souborech
.htaccess
,composer.json
neborobots.txt
, ujistěte se, že máte jejich zálohu. - 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 *.* .*
- 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í).
- Pokud jste prováděli změny v souborech
.htaccess
,composer.json
neborobots.txt
, aplikujte je ručně. Někdy jsou změny také v souborusettings.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 vsettings.php
rovněž aplikovat ručně. - 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)