Hierbij ga ik mijn ervaring delen met de upgrade van de door mij beheerde websites van Drupal 9 naar Drupal 10.
Als eerste een waarschuwing. Doe de upgrade NIET met Ubuntu 22.04 met PHP 8.1.2 . Dit geeft onvoorspelbare resultaten. Ik las de waarschuwing te laat op de Drupal-site na een aantal mislukte pogingen. Ik ben uitgeweken naar een raspberry PI4 met de 64 bits OS en php 8.1.22 en een ssd-schijf.
De upgrade is niet de ideale manier zoals ik hem beschrijf. Zo werkte composer alleen maar met sudo en kreeg ik drush niet als een los commando aan de praat maar met ./vendor/bin/drush werkt het ook. PHPMYADMIN had er ook geen zin in, maar de MYSQL commandline werkt altijd. De username die ik gebruikte was PI met sudo rechten.
Omdat mijn productie websites als basis de /home dir gebruiken wilde ik dit ook op de PI gebruiken. Hiervoor moest apache2.conf worden aangepast met de volgende toevoeging na /var/www
<Directory /home/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
Backups.
Als eerste in de productieomgeving een clear cache gedaan. Dit scheelt in de grootte van de backup.
In Cpanel een backup gemaakt van de productieomgeving en van de database op de PI. De site uitgepakt en de structuur van de website gekopieerd naar de home-dir. Dit is dus het gedeelte websiteusername/public_html/..... Ook de syncdir , prive-dir en event. tmp dir geplaatst in de websiteusername/ Meer is niet nodig zoals instellingen,mail e.d.
Aanpassingen:
- Nu hoeft alleen in de settings.php de regel met trusted hosts worden uitgevinkt.
- .htaccess eventueel aanpassen als hierin extra regels zijn opgenomen mbt https omleidingen.
- een nieuwe conf aanmaken in /etc/apache2/sites-available en deze enabelen.
- Met CHOWN -R www-data:www-data websiteusername/ de owner goed zetten
Database laden.
Als eerste moeten we de databasebackup extracten zodat we een .sql hebben.
Vervolgens de database aanmaken en de backup inladen.
- mysql -u username -p
- ww invoeren.
- create database websiteusername;
- use websiteusername;
- create user ‘ websiteusername ‘ @‘ localhost’ identified by ‘ password’ ;
- grant all on *.* to ‘ websiteusername’ @‘ localhost’ with grant option ;
- Use websiteusername
- source websiteusername.sql;
- Show tables;
Alle tabellen zijn nu geladen en kan in de browser localhost worden gestart of vanaf een andere computer in het lokale domein het ip-adres.
Bij mij werkte dit in 1 keer met alle 4 de websites.
De updates.
We gaan ervan uit dat de websiteversie > 9.5
Allereerst moeten de deprecated modules en themes worden verwijderd.
Ik gebruik mayo als thema dat al voor d8 deprecated was, maar met aanpassingen nog werkzaam was, ook in d9. Voor d10 wilde ik dit niet meer en ben gaan zoeken en kwam uit op SOLO. Deze is echter alleen beschikbaar voor D10. Voor de upgrade heb ik daarom gekozen om tijdelijk Olivera te gebruiken en na de upgrade over te stappen op Solo. Van de omzetting hiervan maak ik een aparte blog.
Van het homescherm, de blokindeling en de kleurinstellingen van MAYO heb ik een screenshot gemaakt en vervolgens Olivero als standaard thema ingesteld en mayo gedisabled en verwijderd.
CKEditor4 nog niet verwijderden. Eerst moet je CKEditor5 activeren en in 'instellingen-Text formats and editors' CKEditor vervangen door CKEditor5. Hierbij worden de instellingen van 4 overgenomen door 5. Als dit is gebeurd kan CKEditor 4 gedisabled worden. Op drupal.org staat dit uitgebreid omschreven.
Voor de updates ben ik begonnen met
- de installatie van drush met composer require drush/drush
- composer update .Dit zorgt er o.a. voor dat symphony werd geupdated.
Vervolgens ben ik alle modules, die in REPORTS>AVAILABLE UPDATES staan gaan updaten met composer naar de nieuwe versies. Voor mij waren dat Captcha, ctools, libraries API, Scheduler, simple xml sitemap, views slideshow en webform.
Dit ging niet zonder slag of stoot. Dit werd onder andere veroorzaakt, dat composer de nieuwe versies zet in modules-contrib terwijl de oude versies bleven staan in modules. Bij elke module heb ik ./vendor/bin/drush updatedb en ./vendor/bin/drush cr uitgevoerd.
Bij libraries moest de oude map in modules worden verwijderd en de cache worden gecleared. Nadat de libraries API was geupdated verscheen er een foutmelding omdat de nieuwe libraries een map niet kon vinden nl libraries/jquery.hover-intent/. wel staat er in libraries jquery.hoverIntent/. Deze map moet je renamen naar libraries/jquery.hover-intent/.
Alle modules zijn nu up to date.
De volgende stap is om te kijken of zelfgemaakte modules geschikt zijn voor D10. Hiervoor gebruik je de module upgrade-status voor.
$ composer show drupal/core | grep versions
$ composer require --dev drupal/core-dev:[copy version above] --update-with-all-dependencies
$ composer require drupal/upgrade_status
Bij mij werkte dit niet. De tweede regel ging mis omdat symphony een conflict gaf. De derde regel gaf ook een probleem. deze moest ik met de -W starten dus composer require drupal/upgrade_status -W.
Vervolgens de module upgrade status activeren. Onder REPORT>Upgrade Status is nu te zien of er nog problemen zijn.
Alles is 100%
De module upgrade status weer deactiveren en vervolgens verwijderen met composer remove drupal/upgrade_status -W
Ook drush verwijderd met composer remove drush/drush
De upgrade.
Eerst de permissies goed zetten
- sudo chmod 777 sites/default
- Sudo chmod 666 sites/default/*settings.php
- Sudo chmod 666 sites/default/*services.yml
- composer require 'drupal/core-recommended:^10' 'drupal/core-composer-scaffold:^10' 'drupal/core-project-message:^10' --no-update
- Composer update —dry-run Geen foutmeldingen
- Composer update Geen foutmeldingen
- Composer require drush/drush
- ./vendor/bin/drush updatedb
- ./vendor/bin/drush cr
Nu naar de site en deze draait nu onder D10.😊
In de Statusrapportage wordt aangegeven dat popper.js ontbreekt in libraries. Deze geplaatst.
Een fotoslide (view slideshow) geplaatst in sidebar.
Dit geeft op een gegeven moment deze error
Warning: Undefined array key "url" in Drupal\Core\Asset\JsCollectionOptimizerLazy->optimizeGroup() (line 170 of core/lib/Drupal/Core/Asset/JsCollectionOptimizerLazy.php).
Dit wordt veroorzaakt door het ontbreken van een url in
Modules/views_slideshow/views_slideshow.libraries.yml.
Hierin ontbreekt de url tussen regel 32 en 33..
url: https://opensource.org/licenses/MIT
Hier is een patch voor, maar je kan natuurlijk het ook gewoon invoeren. Probleem opgelost.
https://www.drupal.org/files/issues/2024-02-08/3387913-12-views_slideshow.patch
Omdat ik niet in de productieomgeving kan werken met composer en Softaculus dit keer niet de mogelijkheid biedt om van d9 naar d10 te upgraden moet ik de lokale versie overzetten naar productieomgeving.
Eerst maar even solo er inzetten met composer. composer require 'drupal/solo:^1.0'
Database exporteren
mysqldump -u username -p websiteusername > websiteusername.sql
Wachtwoord invoeren.
De sql nog even inpakken. gzip -9 websiteusername.sql
Website inpakken.
sudo tar -zcvf websiteusername.tar.gz /home/websiteusername/
Op de productiesite nogmaals een backup,maken van de site en database. De tabellen van de website verwijderen en de nieuwe sql.gz inlezen met phpmyadmin. In public_html alles in een d9 map plaatsen, de tar.gz uploaden en uitpakken. De permissie van sites/default aanpassen en in settings.php de # verwijderen voor trusted hosts. Permissie weer terugzetten. Eventueel de .htaccess aanpassen als daar de https wordt geregeld.
Test de website. Bij mij was alles oké, zo heb ik 4 sites omgezet van d9 naar d10.
Nu solo instellen, maar dat staat in een volgend blog
Ik hoop dat je als lezer van dit artikel genoeg aanwijzingen krijgt om goed over te stappen.