Drupal 8, 9, 10 telepítése composerrel

dj képe

Az itt kialakult beszélgetés inspirálta ezt az írást.

Sokaknak gondot okoz kialakítani a local környezetüket úgy, hogy annak szerkeztete megegyezzen az osztott hoszting környezetben lévővel.
Erre a legegyszerűbb megoldás a docker4drupal által biztosított megoldás amit olyanra lehet alakítani amilyen a szerveren van.
Nem fogom oprendszer specifikusan írni, mert a dockert mindegyiken ugyanúgy kell használni. A lényeg, hogy a docker és a docker-compose fel legyen telepítve és el legyen indítva.

Példaként vegyük azt az esetet amikor a hoston az alábbi könyvtárba kerül a drupal:

/var/www/mysite/web

Ebből mi tulajdonképp annyit tudunk, hogy a drupal minden alkotórésze a web mappában van az index.php -vel együtt, semmilyen komponens nem kerül a szülő mappába.

Töltsük le a docker4drupal könyvtárat vagy klónozzuk le git alkalmazással innen:
Docker4Drupal
ha megvan tömörítsük ki ha szükséges.

A projekt létrehozásának a lépései:

  • Hozzunk létre a projektünknek egy d10teszt könyvtárt.
  • Másoljuk be a docker4drupal könyvtárból a docker-compose.yml és .env fájlokat a d10teszt könyvtárba.
  • A másolt .env fájlban állítsuk be a PROJECT_NAME és PROJECT_BASE_URL változókat (a PROJECT_BASE_URL be állított domainen fog az oldal betöltődni)
  • Ha szükséges állítsuk be a php verziót a szerveren használt verzióra.

Lépjünk be a d10teszt könyvtárba és adjuk ki a következő parancsot:

docker-compose up -d

Ez egy csomó mindent letölt és ha minden rendben akkor elindítja a szükséges konténereket. Ha hiba nélkül lefutott akkor beléphetünk a php konténerbe:

docker-compose exec php bash

Most bekerültünk egy virtuális környezetbe ahol használhatjuk a composert a projektünk karbantartására.
Hozzuk létre a projektet:

composer create-project drupal/recommended-project web

Ez a parancs létrehozza a drupal projektet a web mappába.
Sajnos ez a struktúra nem lesz kompatibilis a szerveren lévő struktúrával ezért lépjünk be a web mappába:

cd web

és töröljük a web és vendor könyvtárakat:

rm -rf web vendor

Ezután a composer.json fájlt kell módosítani, hogy ne a web mappába akarjon telepíteni hanem egy szintre telepítse a drupal könyvtárakat és a vendor könyvtárt, mint a szerveren.
Tehát módosítsuk a következőket a composer.json fájlban:

  1. "drupal-scaffold": {
  2. "locations": {
  3. "web-root": "./"
  4. }
  5. },

és az „installer-paths” alatt minden web/ legyen eltávolítva. Itt egy minta csak át kell nevezni json-ra Minta composer file
Ha ez megvan akkor újrainstallálni a drupalt:

composer install -o

Most már a drupal és a vendor egy könyvtárba került.
Szükségünk lesz egy jól működő drush-ra is:

composer require drush/drush

Ha ez is megvan akkor már létrehozhatjuk a drupalunkat:

vendor/bin/drush si --db-url=mysql://drupal:drupal@mariadb/drupal

vagy letölthetjük ftp-n a szerverről és bemásolhatjuk az adatbázissal együtt, így már nem okozhat gondot a szerver szerkezet. Ebben az esetben a composer.json „require” részt ki kell egészíteni a használt modulokkal.

Ha a PROJECT_BASE_URL=testd10.localhost akkor a drupal oldal a http://testd10.localhost:8000 címen lesz elérhető.

Ha nem akar valaki dockert használni, mert van WAMP vagy LAMP a localhostra telepítve akkor is ugyanez a menete onantól, hogy beléptünk a php konténerbe. A site install parancsban módosítani kell az adatbázis adatokat a tényleges adatbázisnévre, felhasználónévre és jelszóra valamint a mariadb helyett localhost kell

vendor/bin/drush si --db-url=mysql://db_user:db_password@localhost/db_name

Hozzászólások

Joee képe

Annyit fűznék hozzá a jó leíráshoz, hogy az első telepítés után nekem a Composer a Devilbox .env fájlban hozzáfűzött egy "web" könyvtárat a "HOST_PATH_HTTPD_DATADIR=" érték végéhez és a fent leírt composer.json módosítás majd újratelepítés után már nem javította és ott maradt a web bejegyzés. Ez azt okozta, hogy a Composer a telepítésnél megadott helyhez mindig hozzáadott egy web könyvtárat és abba töltötte le a Drupal-t és mellé a vendor-t. A törlés után már nem volt probléma. Ha valakinek a fenti leírás alapján nem sikerülne megoldania a problémát az keresse az okot a beállítás fájlban! Azt nem tudom, hogy ez a probléma csak a Devilbox esetében jön elő vagy más localhost szerver esetében is, ezért írtam le, hátha valakinek ez segít. Valójában nem tudom azt sem, hogy a beírást a Composer vagy a Devilbox végezte, de nem is ez a lényeg.
Én nem a docker4drupal-t használtam, hanem a docker / docker-compose-t, mert az már telepítve volt és azzal is tökéletesen működik a leírás alapján.
Köszönet dj-nek a munkájáért.

dj képe

a docker és a docker-compose akkor nem kell újratelepíteni semmit csak leállítani a devilboxot, hogy a portokat ne foglalja. A docker4drupal könyvtárból csak arra a két fájlra van szükségünk ami a leírásban van semmilyen szerepet nem játszik a működésben.

Üdv!
Dudás József