Installation d'eZ Publish 5 sur une machine virtuelle Ubuntu Server 14.04 avec Nginx et PHP-FPM

Les ordinateurs en entreprise sont souvent sous Windows. Pour avoir un environnement de développement Linux il faut demander la configuration d'un serveur de test à la Prod, et la demande peut traîner pendant quelques jours

Pour être opérationnel plus rapidement, on peut configurer un serveur chez un hébergeur comme Amazon ou OVH, le soucis c'est que parfois la sécurité ferme les ports et du coup on ne peut pas faire du SSH sur le serveur, donc ça ne sert pas à grande chose.

Heureusement Il y a la solution maison , configurer une machine virtuelle en local. Il existe des outils très performants qui permettent le montage d'une VM avec une seule ligne de commande (Vagrant et Puphpet par exemple), mais l'objectif de ce billet est de détailler l'installation manuelle (à l'ancienne) d'un environnement de développement pour eZ Publish 5 sur une distribution Ubuntu Server 14.04 LTS avec partage Samba.

Installation de la machine virtuelle avec Vmware Player

Télécharger la distribution Ubuntu Server ici Download Ubuntu Server 14.04 LTS
Télécharger Vmware Player ici Donwload Vmware Player
Installer Vmware Player, ensuite lancer l'installation de la VM.

installation_VM_1
installation_VM_2
installation_VM_3

Vous pouvez donner un nom à votre machine et choisir son emplacement sur l'ordinateur.

installation_VM_4

Chose très importante, la taille de la VM, cela dépends de l'espace disque disponible. 5 Go me parait correct pour le besoin d'environnement de développement pour eZ Publish 5.

installation_VM_5

Ensuite il faut personnaliser la configuration pour attacher l'ISO qu'on vient de télécharger et booter dessus pour démarrer l'installation du serveur

installation_VM_6
installation_VM_7

On est bon pour démarrer l'installation, il suffit de cliquer sur "Play virtual machine"

installation_VM_8
installation_VM_9

Pour l'installation d'Ubuntu Server 14.04, voici un tutorial assez complet :
How To Forge : The Perfect Server Ubuntu 14.04 Nginx Mysql PHP-FPM

Installation Vmware Tools

Une fois l'installation Ubuntu finie, il faut installer les Vmware Tools qui sont utiles pour partager les fichiers entre la VM et Windows.
Pour plus de détails sur l'utilité des Vmware Tools : Vmware Tools
Lancer l'installation des Vmware Tools via Vm Player :

installation_VM_Tools

Ensuite lancer les commandes suivantes :

sudo apt-get update
sudo apt-get upgrade
sudo mkdir -p /media/cdrom
sudo mount /dev/cdrom /media/cdrom
cd /media/cdrom/ 
sudo cp VM*.tar.gz /tmp
sudo apt-get -y install linux-headers-server build-essential
cd /tmp/
sudo umount /media/cdrom
sudo tar xzvf VM*.tar.gz
cd vmware-tools-distrib/
sudo ./vmware-install.pl -d
sudo reboot

Installation du serveur SSH et de Vim-nox

apt-get install ssh openssh-server

On peut maintenant se connecter à la VM avec Putty et utiliser un shell natif sans passer par le Vmware Player (c'est beaucoup plus pratique que de faire des CTRL+ ALT).
Pour avoir l'adresse IP de votre machine , lancer Ifconfig
Pour éditer les fichiers j'utilise Vi, le package par défaut sur Debian, Ubuntu a un comportement étrange pour corriger cela il faut installer vim-nox :

apt-get install vim-nox

Synchroniser l'heure de votre serveur

apt-get install ntp ntpdate

Installation Nginx, PHP-FPM et MYSQL

PHP-FPM est une implémentation alternative au classique PHP FastCGI. PHP-FPM a plusieurs points forts et combiné à Nginx c'est pas mal du tout.
Bénéfices du PHP-FPM : PHP-FPM About
Comparatif entre les différents modes de PHP : Mod_php Vs FastCGI Vs PHP-FPM For Web Server Scripting

apt-get install nginx
apt-get install php5-fpm
apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-xmlrpc php5-xsl
apt-get install mysql-client mysql-server openssl

Si besoin d'autres modules php vous pouvez les découvrir avec :
apt-cache search php5

Pour améliorer les performances, il faut installer Xcache ou eAccelerator ou APC
apt-get install php5-xcache

On relance le tout :

/etc/init.d/php5-fpm reload
/etc/init.d/nginx start

La partie système est finie, maintenant on va aborder la partie eZ Publish 5.

Installation eZ Publish 5.3 sur Ubuntu Server 14.04

Il y a plusieurs manières d'installer eZ Publish 5. La méthode manuelle qui est très simple et bien détaillée ici eZ Publish Community Project 2014.07
Mais je préfère l'installation via Composer, plus rapide et surtout plus simple à mettre à jour.
Composer est une révolution dans le domaine PHP, c'est l'héritier de Pear [The rise of composer and the fall of pear By Fabien Potencier], un gestionnaire de dépendances très puissant, qui vous permet de rester organiser et de ne pas se soucier des mises à jour ainsi que des dépendances de votre projet.

Installation de Composer

php -r "readfile('https://getcomposer.org/installer');" | php

Ou si le support de curl est installé : curl -sS https://getcomposer.org/installer | php
Pour pouvoir utiliser Composer plus facilement, il faut déplacer le fichier composer.phar dans le PATH.

mv composer.phar /usr/local/bin/composer

Maintenant on peut utiliser Composer avec la commande composer au lieu de php composer.phar

Installation eZ Publish 5.3 avec Composer

Avant de lancer l'installation, il est recommandé d'installer Git :
apt-get install git
Pour avoir des informations concernant les packages eZ Publish, c'est ici Packages eZ Systems
A ce jour la dernière version Community stable d'eZ Publish est la v2014.07.0
Donc pour la descendre :

composer create-project ezsystems/ezpublish-community ez5.3 v2014.07.0

ez5.3 est le répertoire cible où les fichiers seront téléchargés.

Mais si vous voulez descendre la version up to date sur Github : la Master Branch, vous pouvez lancer :
composer create-project ezsystems/ezpublish-community ez5.3 dev-master
Mais pour plus de stabilité je vous conseille de prendre la dernière release tag.

ez_github

Normalement la descente des fichiers se passe très bien, les soucis qu'on peut avoir sont généralement liés au proxy derrière la connexion internet ou une librairie qui manque.
Vous aurez besoin de modifier quelques paramètres dans le fichier php.ini. Les détails sont ici : Requirements for doing a normal installation

Configuration de la base de données Mysql

mysql -uroot -pMotdePasseRoot
CREATE DATABASE ez5 CHARACTER SET utf8;
GRANT ALL ON ez5.* TO uez5@localhost IDENTIFIED BY 'ez5';

Gestion des droits

cd /ezp5.3
sudo chown -R www-data:www-data ezpublish/{cache,logs,config,sessions} ezpublish_legacy/{design,extension,settings,var} web
sudo find {ezpublish/{cache,logs,config,sessions},ezpublish_legacy/{design,extension,settings,var},web} -type d | sudo xargs chmod -R 775
 sudo find {ezpublish/{cache,logs,config,sessions},ezpublish_legacy/{design,extension,settings,var},web} -type f | sudo xargs chmod -R 664

Liens symboliques

Si vous avez utilisé Composer, vous n'avez rien à faire, sinon

cd /ezp5.3
php ezpublish/console assets:install --relative --symlink web
php ezpublish/console ezpublish:legacy:assets_install --relative --symlink web
php ezpublish/console assetic:dump --env=prod web

Je tiens à dire un grand Bravo à la communauté eZ Publish ainsi qu'eZ Systems, l'installation via Composer est impeccable, la configuration détaillée de Nginx est fournie. La compatibilité avec les versions de Mysql 5.6, Ubuntu 14.04, PHP 5.5 et Nginx 1.4 est assurée. La version 5.3 est une version LTS (5 ans de support) et la documentation (http://doc.ez.no) s'enrichie jour après jour, que du bon pour lancer un projet dans des conditions optimales.

Configiration NGINX

Le support officiel de Nginx a été ajouté dans la version eZ Publish 5.3/2014.05, la documentation complète pour l'utilisation d'eZ Publish avec Nginx est fournie Ici : Doc Nginx eZ Publish

cd /ezp5.3
 sudo cp -R doc/nginx/etc/nginx/ez_params.d /etc/nginx/
 sudo cp -R doc/nginx/etc/nginx/sites-available/mysite.com /etc/nginx/sites-available/ez5.3
 sudo vi /etc/nginx/sites-available/ez5.3

Adapter le PORT : listen 80;

Ainsi que le HOTS  : server_name local.ez53 bolocal.ez53;

Sans oublier le BASEDIR, le chemin vers votre répertoir web : root /home/mha/www/ez5.3/web;
 
 recharger Nginx : /etc/init.d/nginx reload

Mettre à jour le hots Windows

Ajouter dans le fichier hosts : C:\Windows\System32\drivers\etc\hosts la ligne suivante

IP_VM local.ez53 bolocal.ez53

Dans votre navigateur préféré , vous pouvez ouvrir l'URL : http:// local.ez53

Normalement l'interface d'installation d'eZ Publish s'affiche et vous pouvez démarrer l'installation, il faut saisir les données de connexion à la base de données ajouter auparavant et saisir un Login/Password pour l'admin du site.

Avec un peu de chance à la fin vous aller avoir l'écran suivant

Ez_publish_setup_OK

Accéder aux fichiers à partir de Windows

L'installation de la VM et d'eZ Publish 5 sont terminées, il nous reste une dernière étape pour être complètement opérationnel avec notre environnement de développement.
Avec les Vmware Tools il y a l'option de monter dans la VM un répertoire local qui est sur votre machine Windows.

shared_folders_vmware

Le problème qui se pose c'est les liens symboliques d'eZ Publish, qui ne sont pas supportés nativement dans Windows. Donc avec un projet qui ne contiens pas de liens symboliques (eZ Publish 4 par exemple) on peut envisager cette option , mais pour eZ Publish 5, le mieux est de passer par un partage Samba (http://doc.ubuntu-fr.org/samba).

Installation et Configuration de Samba

sudo apt-get install samba samba-common

Modifier le fichier de configuration de Samba : sudo vi /etc/samba/smb.conf

Ajouter à la fin:

[homes]
 comment = Home Directories
 browseable = no
 valid users = %S
 writable = yes
 create mask = 0700
 directory mask = 0700

Redemarrer le service Samba : /etc/init.d/samba restart

Ajouter votre utilisateur à la base Samba
smbpasswd -a mha

Ensuite vous pouvez monter un lecteur réseaux dans Windows :

montage_lecteur_reseaux

Nos fichier sont lisibles directement à partir de Windows, donc pour finir il suffit de lancer votre éditeur préféré (Phpstorm pour moi) et synchroniser le répertoire local avec le lecteur réseaux :

phpstorm_Samba

N'oublier pas de coché la case Automatique Upload pour que la synchro soit automatiquement

Automatique_upload_Phpstorm

Voilà notre environnement de développement eZ Publish 5.3 est opérationnel, dans un billet suivant je vais ajouter Gitlab (outil de collaboration) et Jenkins (outil d'intégration continue ) à l'environnement.