eZ Publish & nginx

Publié par Philippe VINCENT-ROYOL, le 05/03/2012 21:40 dans nginx, serveur, ezpublish | 10 commentaires

Les serveurs "lights" font de plus en plus parler d'eux en ce moment. C'est le cas de Lighttpd (prononcer lighty pour les intimes) et Nginx (Engine X). Ce tutorial va vous expliquer comment préparer Nginx avec eZ :)


A la différence des autres tutorials celui ci ne se fera pas sous Mac Os X même si la logique d'installation reste la même. Je vous conseille tout de même macport afin d'éviter de trop réfléchir ;)

L'installation suivante se fait sur une Debian 6.0.4 ainsi que nginx 1.0.12-1

Configuration des dépots

Nous allons dans un premier temps configurer apt afin de récupérer les dernières versions de php et mysql depuis Dotdeb. Editez le fichier sources.list:

vim /etc/apt/sources.list

et ajouter les lignes suivantes:

deb http://packages.dotdeb.org squeeze all
deb-src http://packages.dotdeb.org squeeze all

Il faut également récupérer  les clés GPG:

wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | sudo apt-key add -

Un petit coup de

apt-get update && apt-get upgrade

Installation de mysql

Cela va aller très vite avec une simple ligne de commande

apt-get install mysql-server

Et hop c'est fini :)

Installation de php5-fpm

Pour installer php5-fpm ainsi que les librairies essentielles, voici la ligne de commande 

apt-get install php5-fpm php5-xcache php5-mcrypt php5-curl php5-mysql php5-cli

Une petite subtilité à rajouter pour faire tourner correctement eZ Publish : le cgi pathinfo. Pour cela éditer le fichier /etc/php5/fpm/php.ini et ajouter / modifier la ligne :

cgi.fix_pathinfo=0

Installation de nginx

Je vous passe les détails d'une installation par compilation, on est juste là pour faire du rapide et efficace ;)

apt-get install nginx

Dur n'est ce pas ? 

Place à la configuration.

Nous allons nous concentrer sur nginx et php-fpm. Pour mysql il n'y a pas grand chose à toucher pour un serveur de dev / test.

Contrairement à ce que l'on trouve sur le net, je vous déconseille de modifier le fichier /etc/init.d/nginx sauf si vous savez vraiment ce que vous faites.

Voiçi le contenu du dossier /etc/nginx

Nginx tree

Premier fichier à modifier : nginx.conf

J'ai laissé le worker_processes à 1. Des sites conseils de mettre la valeur correspondante aux nombres de coeur du cpu. Donc si vous avez un quadcore mettez une valeur de 4.

worker_connection : c'est le nombre de connexions simultanées qu'un worker processes peut gérer. Il est vivement recommandé de mettre une valeur entre 512 et 2048.

keep_alive: lorsqu'un visiteur se connecte au site, la connexion établie n'est pas fermée aussi sec. Cela permet d'avoir plusieurs requêtes passées dans une seule connexion. Il est recommandé de mettre une valeur comprise entre 10 et 20 secondes.

Penser à diminuer les I/O également. (voir access logs, error logs, open file cache, buffers et compression gzip pour l'optimisation). Je vous laisse chercher un peu sur le fait d'optimiser aux mieux votre serveur nginx ;)

Utilisation de logrotate

Nous allons faire un peu mumuse avec logrotate pour gérer comme il faut et plus proprement les logs que nous crache nginx.

Normalement un fichier existe déjà dans le dossier /etc/logrotate.d/nginx. Vous pouvez adaptez les lignes ci dessous en fonction de vos besoins

/var/log/nginx/*.log { 
    #rotate the logfile(s) daily 
    daily
    # adds extension like YYYYMMDD instead of simply adding a number
    dateext 
    # If log file is missing, go on to next one without issuing an error msg 
    missingok
    # Save logfiles for the last 10 days 
    rotate 10
    # Old versions of log files are compressed with gzip
    compress 
    # Postpone compression of the previous log file to the next rotation cycle
    delaycompress
    # Do not rotate the log if it is empty 
    notifempty
    #after logfile is rotated and nginx.pid exists, send the USR1 signal 
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

C’est la directive postrotate qui est spécifique à NGINX et qui est importante : une fois les log tournées / archivées on lance un signal d’arrêt à NGINX pour qu’il recrée les fichiers de logs.

Configuration des fichiers php.ini

Alors pourquoi je parle des fichiers php ? Tout simplement car lors de l'utilisation de php-fpm, php va lire un fichier ini différent de celui de la ligne de commande par exemple.

Pour php-fpm, le fichier à modifier 

/etc/php5/fpm/php.ini

Pour la version cli

/etc/php5/cli/php.ini

Bien sur pour faire tourner eZ Publish, on augmente le memory_limit, le max_execution_time et on indique le date_timezone. 

Création d'un virtualhost pour ez

Dans le dossier /etc/nginx/conf.d/default.conf. Ce fichier contient les informations relatives au nom de domaine localhost.

Nous allons créer le fichier ez.conf qui a pour contenu

server {
   listen 80;
   server_name  ez.local admin.ez.local;
   root /var/www/ez;
   index index.php;
   if (!-f $request_filename) {
       rewrite ^(.*)$ /404;
   }
   location ~ "^/[^/]*\.php$" {
      set $script "index.php";
      if ( $uri ~ "^/(.*\.php)" ) {
         set $script $1;
      }
      fastcgi_pass   unix:/tmp/php-fpm.sock;
      fastcgi_index  index.php;
      fastcgi_param  SCRIPT_FILENAME /var/www/ez/$script;
      include        fastcgi_params;
   }
   location / {
           rewrite "^/var/storage/(.*)$" "/var/storage/$1" break;
           rewrite "^/var/([^/]+)/storage/(.*)$" "/var/$1/storage/$2" break;
           rewrite "^/var/(([^/]+/)?)cache/(texttoimage|public)/(.*)$" "/var/$1cache/$3/$4" break;
           rewrite "^/design/([^/]+)/(stylesheets|images|javascript)/(.*)$" "/design/$1/$2/$3" break;
           rewrite "^/share/icons/(.*)$" "/share/icons/$1" break;
           rewrite "^/extension/([^/]+)/design/([^/]+)/(stylesheets|images|javascripts|javascript|flash|lib?)/(.*)$" "/extension/$1/design/$2/$3/$4" break;
           rewrite "^/packages/styles/(.+)/(stylesheets|images|javascript)/([^/]+)/(.*)$" "/packages/styles/$1/$2/$3/$4" break;
           rewrite "^/packages/styles/(.+)/thumbnail/(.*)$" "/packages/styles/$1/thumbnail/$2" break;
           rewrite "^/favicon\.ico$" "/favicon.ico" break;
           rewrite "^/robots\.txt$" "/robots.txt" break;
           rewrite "^/var/cache/debug.html(.*)$" "/var/cache/debug.html$1" break;
           rewrite "^/var/(([^/]+/)?)cache/public/(.*)$" "/var/$1cache/public/$3" break;
           rewrite "^/var/([^/]+)/cache/debug\.html(.*)$" "/var/$1/cache/debug.html$2" break;
           rewrite "content/treemenu/?$" "/index_treemenu.php" break;
           rewrite "ezjscore/call/?$" "/index_ajax.php" break;
           rewrite "^(.*)$" "/index.php?$1" last;
   }
}

Et voilà le tour est joué. Notez bien que j'ai utilisé les noms de domaine ez.local pour le front office et admin.ez.local pour le back office.

Il ne reste plus qu'à redémarrer php-fpm et nginx

/etc/init.d/php5-fpm restart
/etc/init.d/nginx restart

et voilà :)

Philippe VINCENT-ROYOL

Consultant et expert Technique chez eZ Systems France (http://ez.no/fr). Adepte de nouvelles technologies, photos, etc.

Commentaires

Default Avatar
naprosynoi 19/05/2013 21:26
comment 3, <a href=" http://bleacherreport.com/users/2299702-buy-naprosyn-purchase-naprosyn-cheap-naprosyn ">naprosyn cheap</a>. comment 5, <a href="http://bleacherreport.com/users/2299702-buy-naprosyn-purchase-naprosyn-cheap-naprosyn">buy naprosyn online</a> http://bleacherreport.com/users/2299702-buy-naprosyn-purchase-naprosyn-cheap-naprosyn naprosyn purchase
comment 3, <a href=" http://bleacherreport.com/users/2299747-buy-disulfiram-purchase-disulfiram-cheap-disulfiram ">online disulfiram</a>. comment 4, <a href="http://bleacherreport.com/users/2299747-buy-disulfiram-purchase-disulfiram-cheap-disulfiram">disulfiram purchase uk</a> http://bleacherreport.com/users/2299747-buy-disulfiram-purchase-disulfiram-cheap-disulfiram buy disulfiram (antabuse)
comment 8, <a href=" https://bleacherreport.com/users/2299802-buy-pantoprazole-purchase-pantoprazole-cheap-pantoprazole ">pantoprazole cheap</a>. comment 2, <a href="https://bleacherreport.com/users/2299802-buy-pantoprazole-purchase-pantoprazole-cheap-pantoprazole">online pantoprazole</a> https://bleacherreport.com/users/2299802-buy-pantoprazole-purchase-pantoprazole-cheap-pantoprazole pantoprazole order
Default Avatar
yagarajk 19/05/2013 14:21
comment 7, <a href=" http://buyyagaraonline.eklablog.com ">purchase yagara</a>. comment 2, <a href="http://buyyagaraonline.eklablog.com">yagara purchase</a> http://buyyagaraonline.eklablog.com buy yagara
comment 6, <a href=" http://buyibuprofenonline.eklablog.com ">buy ibuprofen online</a>. comment 2, <a href="http://buyibuprofenonline.eklablog.com">ibuprofen online bestellen</a> http://buyibuprofenonline.eklablog.com ibuprofen buy uk
comment 9, <a href=" http://buycalciumonline.eklablog.com ">online calcium calculator</a>. comment 8, <a href="http://buycalciumonline.eklablog.com">online calcium</a> http://buycalciumonline.eklablog.com calcium carbide bond order
Default Avatar
cystonezx 19/05/2013 10:37
comment 9, <a href=" http://buycystoneonline.tumblr.com ">cystone cheap</a>. comment 1, <a href="http://buycystoneonline.tumblr.com">cystone buy</a> http://buycystoneonline.tumblr.com order cystone
comment 6, <a href=" http://buyisordilonline.tumblr.com ">order isordil</a>. comment 6, <a href="http://buyisordilonline.tumblr.com">order isordil</a> http://buyisordilonline.tumblr.com isordil cheap
comment 1, <a href=" http://buyspironolactoneonline.tumblr.com ">buy spironolactone no prescription</a>. comment 6, <a href="http://buyspironolactoneonline.tumblr.com">buy spironolactone online uk</a> http://buyspironolactoneonline.tumblr.com purchase topical spironolactone
Default Avatar
panadolvc 19/05/2013 03:59
comment 4, <a href=" http://buypanadolonline.eklablog.com ">panadol buy online</a>. comment 3, <a href="http://buypanadolonline.eklablog.com">cheap panadol osteo</a> http://buypanadolonline.eklablog.com baby panadol online
comment 4, <a href=" http://buyamoxilonline.eklablog.com ">amoxil purchase</a>. comment 4, <a href="http://buyamoxilonline.eklablog.com">amoxil cheap</a> http://buyamoxilonline.eklablog.com buy cheap amoxil in usa
comment 4, <a href=" http://buyspemanonline.eklablog.com ">speman order</a>. comment 7, <a href="http://buyspemanonline.eklablog.com">buy himalaya speman india</a> http://buyspemanonline.eklablog.com speman buy online
Default Avatar
norfloxacinlk 19/05/2013 00:02
comment 5, [url=http://buynorfloxacinonline.tumblr.com]online norfloxacin[/url]. comment 8, <a href="http://buynorfloxacinonline.tumblr.com">online norfloxacin</a> http://buynorfloxacinonline.tumblr.com norfloxacin online uk
comment 7, [url=http://buysuminatonline.tumblr.com]purchase suminat[/url]. comment 1, <a href="http://buysuminatonline.tumblr.com">order suminat</a> http://buysuminatonline.tumblr.com suminat cheap
comment 9, [url=http://buyglucovanceonline.tumblr.com]cheap glucovance[/url]. comment 8, <a href="http://buyglucovanceonline.tumblr.com">buy glucovance online</a> http://buyglucovanceonline.tumblr.com buy glucovance online
Default Avatar
Philippe 07/03/2012 16:25
Guillaume,

oops exact j'ai gardé une old conf destiné à un autre tuto.. ma faute je corrige ca.
Merci
Default Avatar
Guillaume 07/03/2012 00:06
(oublie le gist, je n'avais pas lu ta conf avec suffisamment d'attention :p )
Default Avatar
Guillaume 07/03/2012 00:03
Pour une installation sur Debian Squeeze, pas besoin de php53.dotdeb.org, packages.dotdeb.org suffit. Ensuite, replace "oldstable" par "stable", voire carrément "squeeze".

Enfin, c'est vrai que passer sur un port réseau alors qu'on reste en local n'est pas des plus efficaces. Nul besoin de solliciter la pile IP pour une communication FastCGI. Ainsi, préfère la configuration du commentaire de ce gist : https://gist.github.com/1151113

My 2cts
M'avertir des nouveaux commentaires
Texte anti-spam :*

Entrez les deux mots ci-dessous, avec ou sans espace.
Les lettres ne sont pas sensibles à la casse.
Une difficulté pour lire ? Essayer un autre

Se souvenir de moi

Catégories

Popular post

About us

Bonjour et bienvenue sur le Blog ! Vous atterissez sur une nouvelle version porté par le html5 et css3. Malheureusement pour les utilisateurs d'IE des bugs peuvent encore arriver. Mais n'hésitez pas à me les remonter par mail.

Très bonne visite et à bientôt !

Twitter update

Pas de nouveaux tweets...

Flux de photos

Contact

Location: Paris
Email: vincent.royol@gmail.com
Twitter: dspe
Copyright © 2013 Pheelit.fr ! All rights reserved. W3C standard website. Valid (x)html / css
by Philippe VINCENT-ROYOL