- Magyar
- English
Gyors fejlesztési környezet
Drupallal (és sok egyébbel) való munka közben sokszor jön az igény: legalább a fejlesztésre használatos gépemen hadd dolgozzak a lehető leggyorsabban. Erre legalább háromféle lehetőség is adódik: a gép megerősítése, a munkamódszer hatékonyabbá tétele és a fejlesztői környezet optimalizálása. Most e harmadikról lesz szó.
A legtöbb webes fejlesztő gépén nem csak egy webhely fejlesztése folyik. Sokan egy-egy újabb webhelyen való munkát a helyi fejlesztői környezet kialakításával kezdik - és ezzel sokáig így voltam magam is. Randy Fay írása óta azonban a helyi fejlesztői környezetem kialakítása néhány másodpercre csökkent. Ennek három kulcseleme van:
- csak helyben elérhető domain, amit nem kell beállítani;
- saját felhasználó nevében futó Apache virtualhost, amit nem kell beállítani;
- merevlemez nélkül használt MySQL.
Mivel én Frugalware Linuxot használok, így a fájlnevek, elérési utak és alapértelmezések is ennek felelnek meg - egyéb rendszereken a módszer valószínűleg ugyanígy működőképes, bár a pontos beállításokban eltérések lehetnek (lehet, hogy néhány rendszernél több extra csomagot is telepíteni kell, lásd a hozzászólásokat).
Beállítást nem igénylő helyi domain
Ötlet: hozzunk létre egy akarmi.l (és egyúttal barmi.l, valami.l, stb.) domaint, melyet csak a helyi gépen érünk el!
A megvalósításhoz kell egy DNS szerver, amit úgy állítunk be, hogy a .l domaint saját maga kiszolgálja, minden egyéb domain tekintetében pedig helyi gyorsítótárként szolgáljon. Ez a BIND esetén a következőképp történik:
- Hozzuk létre az
/etc/named/hosts.lfájlt az alábbi tartalommal:
- Az
/etc/named.conffájl tartalma legyen a következő:
options { directory "/var/named"; forward first; forwarders { 8.8.8.8; 8.8.4.4; }; allow-query { "any"; }; }; zone "." IN { type hint; file "caching-example/named.ca"; }; zone "localhost" IN { type master; file "caching-example/localhost.zone"; allow-update { none; }; }; zone "0.0.127.in-addr.arpa" IN { type master; file "caching-example/named.local"; allow-update { none; }; }; zone "l" { type master; file "/etc/named/hosts.l"; notify no; };
Aforwardersrészben feltüntetett IP-k a Google Public DNS címei; itt használhatunk tetszőleges más IP-ket is, melyeken számunkra elérhető DNS szolgáltatás üzemel (a szolgáltatónk DNS szerverét, OpenDNS-t vagy akár saját magunk által üzemeltetett másik DNS szervert - mint ahogy én is teszem). - A helyi DNS szerver elindítása után már léteznie kell az
akarmi.ldomainnek.
Beállítás nélküli Apache virtualhost(ok)
Ötlet: az összes akarmi.l domaint szolgálja ki egy olyan, helyben futó Apache virtualhost, melyben a PHP a saját felhasználónk nevében fut!
A megvalósításhoz telepítsük a php-cgi csomagot (ha még nem lenne fenn: pacman-g2 -Sy php-cgi), és az Apache webszervert a következők szerint állítsuk be.
- Hozzuk létre az
/etc/httpd/conf/modules.d/virtualhost-wildcard.conffájlt az alábbi tartalommal:
<VirtualHost *:80> ServerAlias *.l VirtualDocumentRoot /home/boobaa/drupal/%1/ UseCanonicalName Off <Directory "/home/boobaa/drupal"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all DirectoryIndex index.php </Directory> ScriptAlias /cgi-bin/ /var/www/html/cgi-bin/ LogLevel debug SuexecUserGroup boobaa users <Directory "/usr/lib/cgi-bin"> Order allow,deny Allow from all </Directory> <Files ~ "\.php$"> AddHandler application/x-httpd-php5 .php Action application/x-httpd-php5 /cgi-bin/virtualhost-wildcard.php.cgi Options ExecCGI SymLinksIfOwnerMatch </Files> </VirtualHost>
- Hozzuk létre a
/var/www/html/cgi-bin/virtualhost-wildcard.php.cgifájlt a következő tartalommal:
#!/bin/bash exec php-cgi -c /etc/php-cgi.ini "$@"
- A
/var/www/html/cgi-bin/könyvtár és a benne levővirtualhost-wildcard.php.cgifájl tulajdonosa egyezzen meg aSuexecUserGroupdirektívánál megadottal:chown boobaa.users /var/www/html/cgi-bin/ -R - Az iménti könyvtár és fájl jogosultságait is állítsuk be:
chmod 755 /var/www/html/cgi-bin/ -R
Innentől kezdve a /home/boobaa/drupal/ könyvtárban található akarmi/ könyvtár tartalma a helyi gépen elérhető lesz a http://akarmi.l/ címen - és ehhez csak a könyvtárat kell létrehozni, semmi egyéb beállítás (az /etc/hosts fájl szerkesztése, Apache virtualhost létrehozása és beállítása, stb.) nem szükséges. Drupal esetén figyelni kell azonban arra, hogy a .htaccess fájlban a RewriteBase sor elejéről le kell venni a megjegyzésjelet:
RewriteBase /
MySQL - a lassú merevlemez nélkül
Ötlet: A lassú lemezműveletek felgyorsítására az SSD technológiát még nem engedheti meg magának mindenki, RAM viszont minden gépben van.
Megvalósítás: Használjunk RAM-drive-ot MySQL adatbázis „tárolására”!
- Hozzunk létre egy adatbázist:
CREATE DATABASE ta; - Állítsuk le a MySQL szolgáltatást:
service mysqld stop - Ürítsük ki a
/var/lib/mysql/ta/könyvtárat. - Csatlakoztassunk ide egy
tmpfstípusú fájlrendszert, például így (az/etc/fstabfájlban):
tmpfs /var/lib/mysql/ta tmpfs defaults,noatime 0 0
Ugyanezt parancssorból is elvégezhetjük:mount tmpfs /opt/ -t tmpfs -o defaults,noatime - Indítsuk újra a MySQL szolgáltatást:
service mysqld start
Innentől kezdve a ta (teszt adatok) nevű adatbázisban végzett műveletek nem járnak merevlemezművelettel, azaz sokkal gyorsabbak lesznek. A dolognak van azonban egy hátulütője: a gép kikapcsolásakor az adatbázis teljes tartalma eltűnik!
Ráadás: a webhely gyors alaphelyzetbe állítása
Telepítési profil fejlesztésekor, de sokszor egyéb helyzetekben is szükség lehet arra, hogy gyorsan elölről, a Drupal telepítéssel kezdhessük újra a munkát.
Ötlet: Használjunk egy rövid szkriptet az adatbázis kiürítésére és a beállítások törlésére.
Megvalósítás: Hozzuk létre a /home/boobaa/drupal/zzz-reset.sh fájlt az alábbi tartalommal:
#!/bin/bash DBUSER=ta DBPASS=ta DBNAME=ta chmod 755 d6/sites/default chmod 644 d6/sites/default/settings.php cp -f d6/sites/default/default.settings.php d6/sites/default/settings.php mysqldump -u$DBUSER -p$DBPASS --add-drop-table --no-data $DBNAME | grep ^DROP | mysql -u$DBUSER -p$DBPASS $DBNAME
Mint látszik, az adatbázisom neve ta (ahogy fentebb beállítottam, ez RAM-drive-ról működik), s az egyszerűség kedvéért mind az SQL felhasználónév, mind a jelszó szintén ta, valamint a /home/boobaa/drupal/d6/ könyvtárban levő Drupal példányomat kifejezetten ilyen gyorsan eldobható, gyorsan felállítható fejlesztésekhez tartom.
Frissítés: automatikus aldomainek
Ha nem csak a foo.l, hanem foo.bar.l, foobar.l vagy akár foo.bar.hu.l (al)domainekre is szükséged van hasonló dinamizmus mellett a fenti funkcionalitásra, akkor a fenti
VirtualDocumentRoot /home/boobaa/drupal/%1/
sorban helyett a %1-et cseréld %0-ra, és a könyvtárak neve legyen rendre foo.l, foo.bar.l, foobar.l vagy akár foo.bar.hu.l (azaz a .l utótagot is add meg a könyvtárak nevében).

Hozzászólások
Apache konfig
Ha esetleg nem működne az Apache konfiguráció, akkor a következő modulokra van szükség: vhost_alias, suexec, actions
Ezeket az a2enmod paranccsal lehet engedélyezni, természetesen utána Apache újraindítás szükséges.
Kell az apache2-suexec csomag
Kell az apache2-suexec csomag is.
Valószínűleg Debiant használsz
...vagy valamilyen forkját - ott szokás így szanaszéjjel darabolni a dolgokat. ;)
Eléggé megszívatott a "target
Eléggé megszívatott a "target uid/gid (1000/1000) mismatch with directory (0/0) or program (0/0)" hibaüzenet a suexec.log-ban.
Tanulság: a /cgi-bin/virtualhost-wildcard.php.cgi -nek (a könyvtárnak is!) annak a felhasználónak és csoportnak a tulajdonában kell lennie, amelyik nevében szeretnénk futtatni a PHP szkripteket.
Ezt az /etc/httpd/conf/modules.d/virtualhost-wildcard.conf fájlban adtuk meg a "SuexecUserGroup boobaa users" sorral.
Jogos
Immár ezeket is tartalmazza a leírás.