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
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
Cela va aller très vite avec une simple ligne de commande
apt-get install mysql-server
Et hop c'est fini :)
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=0Je 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 ?
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
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 ;)
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.
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.
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à :)
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 !
Pas de nouveaux tweets...
Commentaires