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:
"drupal-scaffold": { "locations": { "web-root": "./" } },
é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
Hozzáfűzés
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.
Ha már úgyis telepítve van
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