Update Drupal 8 naar Drupal 9 met composer

Drupal 9 is al een tijdje uit en het upgraden van een versie 8 naar een versie 9 wordt steeds makkelijker.

Dit is het stappenplan om de upgrade vlot te laten verlopen.

Het voordeel van deze methode is dat je geen tweede websites hoeft te maken om via de migrate module te kunnen werken.

We doen met composer en drush een core update van een bestaande Drupal 8.x versie naar de meest recente en stabiele van Drupal 9.

Voorwaarden:

  1. Neem ALTIJD een backup van je huidige website voor je begint !!!
  2. De website die je upgrade moet gemaakt zijn met composer of moet worden omgezet naar een composer website. Dit betekend dat alle modules met composer moeten geïnstalleerd zijn zodat deze modules in het composer.json bestand staan.
  3. Zorg dat je start met de meest recente versie van Drupal 8 en dat alle modules up-to-date zijn. Upgrade dus altijd eerst naar de meest recente versie van Drupal 8 voor je naar Drupal 9 upgrade.
  4. ALLE modules die je gebruikt moeten Drupal 9 compatible zijn. Dit kan je per module controleren op drupal.org. Een module die Drupal 8 en 9 compatible is wordt op verschillende manieren aangeduid.
    Er staat een vermelding op de module pagina onder de vorm van onderstaande aanduidingen:

    Drupal 9 ready

    Vermelding van compatibele versies

    Nieuwe module releases krijgen geen Drupal versienummer zoals 8 of 9 meer. Enkel een versie nummer van de module.
    Nieuwe releases
     
  5. De database op uw server moet minimaal versie 10.3 of hoger zijn !!
  6. Heel belangrijk! De drush versie op uw hosting moet minimaal versie 9 zijn echter drush 10 is aangeraden. Hoe je zelf een recente versie van composer en/of drush op uw hosting installeert lees je hier.

Modules die problemen geven:

Er zijn modules die (nog) niet werken in Drupal 9, dus controleer goed voor je begint met de module Upgrade status.


Tot zover de voorbereiding.

Nadat je website aan bovenstaand eisen voldoet kan je beginnen met het omzetten.

Open een ssh verbinding me de server. Dit kan via putty, Mac Terminal of via het control panel van je provider. (indien deze een terminal voorziet)

Stappenplan:

  1. Als u de module upgrade status heeft gebruikt, verwijder deze module. (deze werkt niet in Drupal 9)
     
  2. Voeg tijdelijk schrijftoegang toe aan beveiligde bestanden en mappen

    In terminal geef je achtereenvolgens onderstaand 3 commando's in.
    Druk telkens op enter na elk commando.
    (Deze stap kan eventueel manueel worden gedaan via Control Panel)

    chmod 777 sites/default
    find sites/default -name "*settings.php" -exec chmod 777 {} \;
    find sites/default -name "*services.php" -exec chmod 777 {} \;
     
  3. Vervolgens moet u zowel de Drupal 9-versie de door de kern aanbevolen pakketten en pakketten met dev-afhankelijkheden binnenhalen als afhankelijkheden. We gebruiken --no-update om te voorkomen dat er in de verkeerde volgorde wordt geïnstalleerd

    composer require drupal/core-recommended:^9.1 drupal/core-composer-scaffold:^9.1 drupal/core-project-message:^9.1 --update-with-dependencies --no-update
     
  4. Voer nu de update van de code zelf uit:

    composer update
     
  5. Optioneel: als een van uw pakketten geen release heeft die expliciet is verklaard als D9-compatibel (d.w.z. u vertrouwt op een patch om deze gereed te maken), zult u waarschijnlijk een afhankelijkheidsfout tegenkomen wanneer u probeert uw codebase bij te werken. Om dit te omzeilen, kunt u een alias aan drupal / core toevoegen, zoals:

    composer require "drupal/core:9.1 as 8.9.11" --no-update
     
  6. Voer update uit:

    composer update

    Vervang hier eveneens de versie 9 die je installeer alsook de versie 8 van waaruit je upgrade. Doe dit enkel als je zeker weet dat de modules die ge-patched zijn wel degelijk werken in Drupal 9. In alle andere gevallen werk enkel met modules waarvan je zeker weet dat die werken in Drupal 9.
     
  7. In settings.php moet één en ander worden aangepast. Zo gebruikt drupal 9 geen $settings['install_profile'] meer. Afhankelijk van hoe je site werd geïnstalleerd staat die setting wel of niet in de settings.php. Indie deze er staat moet die dus verwijderd worden. Zoek naar $settings['install_profile']. Meestals staat daar dan  = 'standaard'; achter. Verwijder de volledige lijn.
     
  8. Een tweede regel die in settings.php moet worden aangepast is de sync map. In drupal 8 werd die aangeduid met $config_directories['sync']. Drupal 9 gebruikt $settings['config_sync_directory']. Deze moet dus gewijzigd worden. Vervang $config_directories['sync'] door $settings['config_sync_directory']. Wat er achter staat (= 'site/default/...) blijft staan. 
     
  9. Wanneer alles is ge-update is het tijd om de database te updaten:

    drush upgradedb
    (voor dit commando is drush versie 10 nodig omdat je al in een Drupal 9 omgeving werkt)
  10. Verwijder de tijdelijk schrijftoegang van beveiligde bestanden en mappen.

    chmod 755 sites/default
    find sites/default -name "*settings.php" -exec chmod 644 {} \;
    find sites/default -name "*services.yml" -exec chmod 644 {} \;

Uw website is nu ge-upgrade van Drupal 8.x naar Drupal 9.x

Succes