Zend Framework 2 met Parallels Plesk 9.5

Zend Framework 2 is een PHP developers framework, gebaseerd op het MVC model. Er is een grote community, een professioneel IDE (Zend Studio)  en goede debugging tools. http://nl.wikipedia.org/wiki/Zend_Framework

De installatie handleiding van Zend Framework is echter zeer summier.
Het legt eigenlijk alleen maar uit dat je de bestanden moet uitpakken in een map op de server en dat je vervolgens een verwijzing naar die map in de php.ini moet maken.

Daarom hier een installatiehandleiding met een aanwijzing om het onder Plesk 9.5.* aan de praat te krijgen.
Ik behandel hier Zend Framework 2.2.2. Eerdere versies zullen niet veel afwijken en latere wellicht ook niet.

A. Installatie:

Je hebt SSH toegang als root-user tot de server nodig.

Download de bestanden vanaf de Zend repository, pak ze uit en zet ze in een directory “/usr/share/zf2”:

[root@myzendserver ~]#
[root@myzendserver ~]# wget <repo-url-here>/ZendFramework-2.2.2.linux.tgz
[root@myzendserver ~]# tar -zxvf ZendFramework-2.2.2.linux.tgz
[root@myzendserver ~]#mkdir /usr/share/zf2
[root@myzendserver ~]# cp /root/ZendFramework-2.2.2/* -fR /usr/share/zf2/

Dat is alles! De Zend Framework bestanden staan nu op de server.

Voor PHP als FastCGI of CGI module, moet er voor Apache  echter wel een environment variable aangemaakt worden. Dus we maken een bestand aan in de include-directory van apache, zodat dit automatisch wordt geladen in Apache:
[root@myzendserver ~]# nano -w /etc/httpd/conf.d/zf2.conf

Daarin zet je het volgende:

 SetEnv ZF2_PATH /usr/share/zf2/library

Daarna opslaan en de edotor “nano” afsluiten. Je slaat met nano het bestand op met <CTRL> <O> en sluit af met <CTRL> <X>

Dan alleen nog Apache herstarten:
[root@myzendserver ~]# service httpd restart

Merk op dat voor het aan de praat krijgen met PHP als CGI of FastCGI een andere werkwijze geldt, dan die hieronder wordt besproken.

B. Configuratie voor Plesk:

Zend hanteert een iets afwijkende hostingstructuur voor wat er standaard met Plesk mogelijk is. Maar met wat maatwerk aanpassingen is het wel te doen. Daarvoor biedt Plesk wél de tools.

Zend stelt door zijn structuur de volgende voorwaarden:

  1. DocumentRoot is bij Plesk “httpdocs” maar bij Zend wordt dat: “public”
  2. Toegang tot de “Zend Framework library” die zich buiten de DocumentRoot bevindt op een shared locatie.
  3. Mogelijkheid om “.htaccess” te gebruiken.

We moeten dus de httpd.conf aanpassen om e.e.a. voor elkaar te krijgen. Plesk biedt daarvoor een “vhost.conf” file die je per website moet aanmaken via SSH:
[root@myzendserver ~]# nano -w /var/www/vhosts/<jouw-website.nl>/conf/vhost.conf

Daarin zetten we:
(vervang <jouw-website.nl> door de domeinnaam van de site waar jouw Zend moet draaien).

DocumentRoot /var/www/vhosts/<jouw-website.nl>/httpdocs/public
php_admin_value include_path ".:/usr/share/zf2/library"
<Directory /var/www/vhosts/<jouw-website.nl>/httpdocs>
            php_admin_flag engine on
            php_admin_flag safe_mode off
            php_admin_value open_basedir "/var/www/vhosts/<jouw-website.nl>/httpdocs:/usr/share/zf2:/tmp"
            DirectoryIndex index.php index.html
            AllowOverride FileInfo
            Order allow,deny
            Allow from all
</Directory>

Dit heeft een aantal dingen tot gevolg:

  1. Het overschrijft een aantal instellingen in de default apache httpd.conf en de tweaks van plesk daarop.
  2. De DocumentRoot is nu /httpdocs/public
  3. Het zet de safe_mode=off (obsolete vanaf PHP 5.4, maar nodig voor eerdere versies omdat anders de open_basedir niet werkt)
  4. Open_basedir geeft toegang aan Zend tot  een map buiten de document root (de library files).
  5. AllowOverride FileInfo zorgt voor toegang om .htaccess te gebruiken.

We zijn er nog niet. Plesk moet nu weten dat we de vhost.conf hebben aangemaakt. Dat doen we met het volgende commando van Plesk:
[root@myzendserver ~]# /usr/local/psa/admin/bin/websrvmng -u -v

De hosting is nu correct ingesteld. Vanaf hier kun je handmatig zelf je dingen uploaden in de nieuwe webruimte. Maar ik geef de voorkeur aan gemak en gebruik Composer.

C. ZendSkeletonApplication:

Het is wel handig om de gehele Zend Framework structuur met Composer in de website te laden vanaf GIT. Scheelt veel werk. Dit doen we als volgt:

1. Git installeren:
[root@myzendserver ~]# yum install git
NB: git zit in de rpmforge repository. Hoe je dat moet activeren, behandelen we niet in deze howtorial.

2. Composer installeren:
[root@myzendserver ~]# curl -sS https://getcomposer.org/installer | php -d='allow_url_fopen=1'
Als alles goed gaat, zit “composer.phar” dan in de usermap van root: /root/composer.phar

3. ZendSkeletonApplication installeren:

[root@myzendserver ~]# rm -fR /var/www/vhosts/<jouw-website.nl>/httpdocs/*
[root@myzendserver ~]# php -d='allow_url_fopen=1' -d='safe_mode=0' composer.phar create-project -sdev --repository-url="http://packages.zendframework.com" zendframework/skeleton-application /var/www/vhosts/<jouw-website.nl>/httpdocs/
[root@myzendserver ~]# chown <webuser>.psaserv /var/www/vhosts/<jouw-website.nl>/httpdocs
[root@myzendserver ~]# chown <webuser>.psacln /var/www/vhosts/<jouw-website.nl>/httpdocs/* -fR

Notities bovenstaande:

  • Eerste regel: Composer wil dat de map /httpdocs/ helemaal leeg is, alvorens hij wat installeert.
  • Tweede regel: het daadwerkelijk installeren met Composer. We geven met php de extra sleutel “-d” mee, omdat in de php.ini vanwege security safe_mode=1 en allow_url_fopen=0  ingesteld staan.
  • Derde en vierde regel: Rechten van de mappen goed zetten conform Plesk policy. Opmerking: <webuser> is de FTP-user van de nieuwe Zend website.

Nu kan je de site gaan bekijken: http://<jouw-website.nl>
En je ding gaan doen met Zend.

4. Zend op een sub-domein:

In geval je website een subdomain is van een ander domein, dan is de procedure gelijk. Alleen de paden zijn dan wat anders.
Plesk hanteert:

/var/www/vhosts/<jouw-website.nl>/subdomains/<subdomein>/

/var/www/vhosts/<jouw-website.nl>/subdomains/<subdomein>/conf/vhost.conf

/var/www/vhosts/<jouw-website.nl>/subdomains/<subdomein>/httpdocs/

Zend site bekijken op: http://<subdomain>.<jouw-website.nl>

4a. Voorbeeld ZendSkeletonApplication installeren op SUB-domein:
[root@myzendserver ~]# rm -fR /var/www/vhosts/<jouw-website.nl>/subdomains/<subdomein>/httpdocs/*
[root@myzendserver ~]# php -d='allow_url_fopen=1' -d='safe_mode=0' composer.phar create-project -sdev --repository-url="http://packages.zendframework.com" zendframework/skeleton-application /var/www/vhosts/<jouw-website.nl>/subdomains/<subdomein>/httpdocs/
[root@myzendserver ~]# chown <webuser>.psaserv /var/www/vhosts/<jouw-website.nl>/subdomains/<subdomein>/httpdocs
[root@myzendserver ~]# chown <webuser>.psacln /var/www/vhosts/<jouw-website.nl>/subdomains/<subdomein>/httpdocs/* -fR

4b. Voorbeeld vhost.conf voor een subdomein

DocumentRoot /var/www/vhosts/<jouw-website.nl>/subdomains/<subdomein>/httpdocs/public
php_admin_value include_path ".:/usr/share/zf2/library"
<Directory /var/www/vhosts/<jouw-website.nl>/subdomains/<subdomein>/httpdocs>
            php_admin_flag engine on
            php_admin_flag safe_mode off
            php_admin_value open_basedir "/var/www/vhosts/<jouw-website.nl>/subdomains/<subdomein>/httpdocs:/usr/share/zf2:/tmp"
            DirectoryIndex index.php index.html
            AllowOverride FileInfo
            Order allow,deny
            Allow from all
</Directory>

Although I have created this document with the utmost care, I cannot be held responsible for any consequence of this article.