Teljes értékű Drupal fejlesztőkörnyezet kialakítása Ubuntu Linux rendszeren

nevergone képe

Egy olyan teljes értékű, Linux alapú fejlesztőkörnyezetről lesz szó, amelyikkel könnyedén használhatóvá válik a Drupal. Hogy a lépéseket követve biztosan így lesz, mi sem bizonyítja jobban, mint hogy az általam a mindennapokban használt rendszert mutatom be. Ezért ez a bejegyzés önmagamnak is szól, hogy ha bármikor újra el kell készítenem egy ilyen rendszert, ne felejtsek ki belőle semmit. A leírásban külön jelzem azokat a parancsokat, amelyeket terminálban ki kell adni, illetve így jelölöm a módosítani szükséges fájlok tartalmát is. A kiadott parancsok elé $ jelet teszek, ezeket természetesen nem kell beírni, csak a parancsot jelzik.
A telepítést Ubuntu Linux 11.04 (Natty Narwhal) rendszeren mutatom be, de valószínűleg néhány apróbb módosítással sikeresen alkalmazható akár régebbi, akár teljesen más Linux alapú rendszeren is. A leírás nem tartalmazza az Ubuntu telepítését, mivel az számtalan helyen fellelhető, ezért egy frissen telepített, módosításokat nélkülöző rendszerből indul ki.

1. A célok

  • szükség van Apache webszerverre, MySQL adatbázis-szerverre és a legfrissebb PHP-re
  • legyen phpMyAdmin, használhassunk Drush-t
  • a PHP a rendszert használó felhasználó nevében fusson, így elkerülve a jogosultsági problémákat
  • legyen egy .loc legfelsőbb-szintű domain, amelyik a gépre mutat, így virtualhostok állítgatása nélkül adhatunk hozzá új oldalt a rendszerhez

A rendszer akkor van kész, ha:

  • az l10n_install segítségével fel tudunk telepíteni egy Drupal 7 alaprendszert a fordításokkal együtt (PHP túlfutási-veszély!)
  • az új oldalt az Apache állítgatása nélkül elérjük a http://enoldalam.hu.loc/ címen

2. Telepítsük a hiányzó csomagokat

Mivel az Ubuntu asztali-rendszerként való telepítése nem tartalmazza a kiszolgálóként való használathoz szükséges csomagokat, azokat nekünk külön kell feltenni.

$ sudo apt-get install apache2 apache2-suexec libapache2-mod-fcgid php5-cgi php5-curl php5-gd php5-mcrypt php5-mysql phpmyadmin mysql-server mysql-client

A parancs kiadása meg kell adnunk a jelszavunkat, majd engedélyezzük a további szükséges csomagok telepítését is, állítsuk be a MySQL rendszergazdai jelszavát („While not mandatory, it is highly recommended that you set a password for the MySQL administrative "root" user.”) és a phpmyadmin konfigurálásánál a szóköz billentyűvel válasszuk ki az apache2-őt („Please choose the web server that should be automatically configured to run phpMyAdmin”), végül engedélyezzük, hogy a dbconfig-common beállítsa a phpmyadmin-t, itt is megadva egy jelszót (lehet ugyanaz, mint a MySQL-nél).

Ha mindent jól csináltunk, akkor a böngészőbe beírva a http://localhost/ címet egy „It works!” szöveg fog minket fogadni. Ez mutatja, hogy az Apache működésre kész.

3. A PHP megszelidítése

Sajnos ennyivel nem úsztuk meg, mivel a PHP még nem működőképes. Első lépésként állítsuk át az Apache alapértelmezett munkakönyvtárának jogosultságait, a parancsban a kiemelt „felhasznalo” szavak helyére a saját Ubuntus felhasználónevünket írjuk be.

$ sudo chown felhasznalo:felhasznalo -R /var/www/

Hozzunk létre egy /var/www/cgi-bin könyvtárat:

$ mkdir /var/www/cgi-bin/

Majd abban egy php-fcgid nevű fájlt:

$ gedit /var/www/cgi-bin/php-fcgid

A fájl tartalma legyen a következő:

#!/bin/sh
PHPRC=/etc/php5/apache2/
export PHPRC
export PHP_FCGI_MAX_REQUESTS=5000
export PHP_FCGI_CHILDREN=8
exec /usr/lib/cgi-bin/php

Miután elmentettük és kiléptünk, adjunk rá futtatási jogot:

$ chmod u+x /var/www/cgi-bin/php-fcgid

Engedélyezzük az Apache Suexec kiterjesztését és a rövid URL-ek használatát:

$ sudo a2enmod suexec rewrite

Nyissuk meg szerkesztésre a /etc/apache2/sites-available/default állományt:

$ sudo gedit /etc/apache2/sites-available/default

A vége felé találunk benne egy ilyen részt:

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order deny,allow
    Deny from all
    Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

Ez a rész után és a fájlt lezáró </VirtualHost> elé szúrjuk be a következő szöveget, a kiemelt „felhasznalo” szavak helyére a saját Ubuntus felhasználónevünket írva:

<IfModule mod_fcgid.c>
  SuexecUserGroup felhasznalo felhasznalo
  <Directory /var/www/>
      Options +ExecCGI
      AddHandler fcgid-script .php .phtml
      AddType application/x-httpd-php .php .phtml
      FCGIWrapper /var/www/cgi-bin/php-fcgid .php
      FCGIWrapper /var/www/cgi-bin/php-fcgid .phtml
  </Directory>
</IfModule>

A PHP-t már működésre bírtuk, de a phpMyAdminért még dolgozni kell. Nyissuk meg a konfigurációs állományát:

$ sudo gedit /etc/apache2/conf.d/phpmyadmin.conf

A fájl legvégére illesszük be a következő részt, a kiemelt „felhasznalo”-t itt is cseréljük le az Ubuntus felhasználónevünkre:

<IfModule mod_fcgid.c>
  SuexecUserGroup felhasznalo felhasznalo
  <Directory /usr/share/phpmyadmin>
      Options +ExecCGI
      AddHandler fcgid-script .php .phtml
      AddType application/x-httpd-php .php .phtml
      FCGIWrapper /var/www/cgi-bin/php-fcgid .php
      FCGIWrapper /var/www/cgi-bin/php-fcgid .phtml
  </Directory>
</IfModule>

Futassuk le a következő parancsot, a kiemelt „felhasznalo” helyett itt is a telepített rendszeren használt felhasználónév kell:

$ sudo chown :felhasznalo /etc/phpmyadmin/config-db.php

Végül indítsuk újra az Apache webszervert:

$ sudo service apache2 restart

4. PHP finomhangolása

Ha létrehozunk egy teszt.php fájlt a /var/www alatt, amelynek a tartalma a következő:

<?php
phpinfo();
?>

Akkor a böngészőben a http://localhost/teszt.php oldalt meglátogatva részletes információt kaphatunk a PHP beállításairól. Ahhoz, hogy a rendszer munkára alkalmas legyen, további teljesítmény-hangolást célszerű végeznünk. Először is szerkesszük a PHP beállításait tartalmazó fájlt:

$ sudo gedit /etc/php5/cgi/php.ini

A fájlban a „max_execution_time” szóra rákeresve az értékét emeljük fel az alapértelmezett 30 másodpercről, ugyanezt tegyük meg a „max_input_time” és „memory_limit” változók értékével is.

max_execution_time = 600
max_input_time = 600
memory_limit = 256M

Hogy nagyobb fájlok feltöltésével se legyen gond, emeljük meg ugyanitt a „post_max_size” és „upload_max_filesize” értékét.

post_max_size = 256M
upload_max_filesize = 2G

A mod-fcgid (PHP futtatásához használt CGI környezet) beállításait a következő fájlban érjük el:

$ sudo gedit /etc/apache2/mods-available/fcgid.conf

A fájlt megnyitva a tartalmát cseréljük le erre:

<IfModule mod_fcgid.c>
  AddHandler fcgid-script .fcgi
  FcgidConnectTimeout 20
  ProcessLifeTime 7200
  IPCCommTimeout  7200
  IPCConnectTimeout 300
  PHP_Fix_Pathinfo_Enable 1
</IfModule>

Mentés és kilépés után a szokásos módon indítsuk újra az Apache-t:

$ sudo service apache2 restart

5. Kell egy Drush

A Drush a Drupal fejlesztőknek egy igazi svájcibicska. Persze nem csak ők veszik a hasznát, hanem mindenki, aki komolyabban üzemeltet Drupal alapú rendszert.

A használatához kell egy újabb csomag:

$ sudo apt-get install php5-cli

A telepítése után töltsük le a Drush-t, most éppen a 4.4 az aktuális kiadás:

$ mkdir ~/bin
$ wget http://ftp.drupal.org/files/projects/drush-7.x-4.4.tar.gz
$ tar xf drush-7.x-4.4.tar.gz
$ rm drush-7.x-4.4.tar.gz
$ ln -s ~/drush/drush ~/bin/drush
$ ~/bin/drush

Ezután a következő ki- és bejelentkezés (vagy újraindítás) után már lehetőség lesz a Drush használatára.

6. Saját domain beállítása

Azt szeretnénk, hogy ne kelljen minden egyes oldal fejlesztésekor új bejegyzést felvenni az Apache-ba, hanem a rendszer kezelje ezt automatikusan. Először is készítsünk egy munkakönyvtárat, amelyben az oldalak kódjait fogjuk tárolni. Ennek a neve bármi lehet, én „Virtualhosts” néven nevezem:

$ mkdir ~/Virtualhosts
$ sudo apt-get install dnsmasq resolvconf

Szerkesszük a konfigurációs állományát:
$ sudo gedit /etc/dnsmasq.conf

Keressünk benne egy ilyen bejegyzést:

# Add domains which you want to force to an IP address here.
# The example below send any host in double-click.net to a local
# web-server.
#address=/double-click.net/127.0.0.1

Írjuk utána egy új sorba a következőt:
address=/loc/127.0.0.1

Itt a „loc” azt a domaint jelenti, amelyet szeretnénk a gépünkre irányítani.

Mentsük el, lépjünk ki a szerkesztőből majd indítsuk újra a szolgáltatást (vagy ami még érdemesebb, az egész gépet):

$ sudo service dnsmasq restart

Ezután, ha megpingelünk egy tetszőleges .loc végződésű hosztot, sikeresnek kell lennie:

$ ping foobar.loc
PING foobar.loc (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_req=1 ttl=64 time=0.025 ms
64 bytes from localhost (127.0.0.1): icmp_req=2 ttl=64 time=0.038 ms
64 bytes from localhost (127.0.0.1): icmp_req=3 ttl=64 time=0.040 ms

Hozzunk létre egy új Apache konfigfájlt:

$ sudo gedit /etc/apache2/sites-available/virtualhost_wildcard

A tartalma legyen a következő:

<VirtualHost *:80>
        ServerAlias *.loc
        VirtualDocumentRoot "/home/felhasznalo/Virtualhosts/%1%-2/"
        <Directory "/home/felhasznalo/Virtualhosts/">
                Options FollowSymLinks
                AllowOverride All
                Order allow,deny
                Allow from all
                DirectoryIndex index.html index.php
        </Directory>
        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                Order allow,deny
                Allow from all
        </Directory>
        ErrorLog ${APACHE_LOG_DIR}/virtualhost-error.log
        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel info
        CustomLog ${APACHE_LOG_DIR}/virtualhost-access.log combined
  <IfModule mod_fcgid.c>
    SuexecUserGroup felhasznalo felhasznalo
    <Directory "/home/felhasznalo/Virtualhosts">
      Options +ExecCGI
      AddHandler fcgid-script .php .phtml
      AddType application/x-httpd-php .php .phtml
      FCGIWrapper /var/www/cgi-bin/php-fcgid .php
      FCGIWrapper /var/www/cgi-bin/php-fcgid .phtml
    </Directory>
  </IfModule>
</VirtualHost>

A fájl tartalmában két dologra figyeljünk: A „felhasznalo” helyett itt is az Ubuntu rendszerünkön használt felhasználónevünket kell megadni, a „/home/felhasznalo/Virtualhosts” pedig annak a könyvtárnak a teljes elérési útja, ahol az oldalainkat tárolni szeretnénk.
Mentés és kilépés után engedélyezzük az új beállítást, majd a szokásos Apache újraindítás:

$ sudo a2enmod vhost_alias
$ sudo a2ensite virtualhost_wildcard
$ sudo service apache2 restart

Ezek után hozzunk létre egy új könyvtárat, a könyvtárnévben szándékosan nincs pont:

$ mkdir ~/Virtualhosts/enoldalamhu

Ha a könyvtárban létrehozunk egy index.html fájlt, akkor láthatjuk, hogy a könyvtár tartalmát elérjük a http://enoldalam.hu.loc/ címről. Amennyiben a könyvtárba Drupalt telepítünk, nyissuk meg szerkesztésre a Drupalhoz mellékelt .htaccess fájlt, és keressük meg a következő részt:

# If your site is running in a VirtualDocumentRoot at http://example.com/,
# uncomment the following line:
# RewriteBase /

Itt az utolsó (RewriteBase) sor elől töröljük ki a # jelet, majd mentsük el a fájlt, ezzel válik lehetővé a rövid URL-ek használata is.

7. És ha PHP 5.2 kell?

A következő műveletet kellő óvatossággal kell végezni, mivel mélyebben megvariálja a rendszer működését.

Hozzunk létre egy új fájlt:

$ gedit ~/php.sh

A tartalma pedig legyen a következő:

#!/bin/sh
# Script to install PHP 5.2 from 9.10 on 10.04
# And pin it so it does not get updated
PKGS=`dpkg -l | grep php | awk '{print $2}'`
apt-get remove $PKGS
sed s/natty/karmic/g /etc/apt/sources.list | 
  tee /etc/apt/sources.list.d/karmic.list
mkdir -p /etc/apt/preferences.d/
for PACKAGE in $PKGS
do
  echo "Package: $PACKAGE
Pin: release a=karmic
Pin-Priority: 991
" | tee -a /etc/apt/preferences.d/php
done
apt-get update
apt-get install $PKGS

A fájlban több helyen szerepel a rendszer verziójának kódneve („natty”), ha régebbi Ubuntu kiadást használunk, akkor ezt módosítani kell. Mentés és kilépés után futtassuk le:

$ sudo ~/php.sh

Én nem engedtem, hogy a dbconfig piszkálja a phpMyAdmin beállításait, és a csomagok konfigurálásakor is ragaszkodtam ahhoz, hogy tartsa meg az eredeti fájlokat. A fenti szkript eltávolítja a PHP 5.3-as csomagokat, és az Ubuntu „Karmic Koala” verziójából feltelepíti a megfelelő PHP 5.2-eset. Valamiért a phpMyAdmin egyelőre nem működik ez a varázslás után, de ha rájövök, akkor mindenképpen megosztom itt az eredményt.