Installation automatique de NGinx, PHP-FPM, MemCached sous Debian

Date: 27/01/2011 | Catégories: Open-source,Planet-libre,Reseau,Web | Tags: ,,,,

Au début du mois nous avons vu ensemble l'installation d'un serveur NGinx sous Ubuntu. Sous Debian,  il faut mettre un peu plus les mains dans le cambouis, en effet il est parfois utile de partir des sources plutôt que des dépôts officiels (notamment au niveau de la présence ou non d'un module).

J'ai donc développé un petit script shell pour automatiser l'installation (ou la mise à jour) d'un serveur Web rapide, léger et performant sous une Debian (Squeeze ou Lenny).

Ce script va effectuer les choses suivantes:

Il est bien sûr possible d'adapter ce script à vos besoins et de l'utiliser comme bon vous semble. Si vous rencontrez des erreurs ou que vous avez en tête des améliorations possibles, merci de laisser un commentaire en bas de ce billet.

Récupération du script

Le script est disponible dans mon GitHub:

NGinxAutoInstall.sh

Vous pouvez également faire ces actions en ligne de commande dans un terminal:

Il faut ensuite le rendre exécutable:

Lancement du script

Il faut lancer le script en root (droit d'administration):

Si tout se passe correctement, le script devrait afficher:

Validation et test de performances

Votre serveur est maintenant opérationnel, il vous reste à mettre vos page HTML et scripts PHP dans le répertoire /var/www et tester le tout en entrant l'URL suivante dans un navigateur Web: http://@devotreserveur/.

Vous pouvez également tester les performances brutes de votre serveur en utilisant HTTPerf (disponible dans les dépôts Debian). Sur mon serveur de test (VPS Gandi 1 part), j'obtiens les perfos suivantes:

httperf --client=0/1 --server=localhost --port=80 --uri=/ --send-buffer=4096 --recv-buffer=16384 --num-conns=5000 --num-calls=10

Request rate: 6833.4 req/s (0.1 ms/req)

Conclusion

Avec NGinx, on obtient rapidement de très bonnes performances et le couple PHP-FPM, MemCached permet d'avoir une bonne base pour héberger, par exemple, votre blog WordPress (lire l'article sur le sujet dans ce blog).

Je suis bien sur preneur de tous commentaires/remarques sur le script.

  • Bonjour,

    je suis tenté d’installer votre script sur mon serveur debian squeeze ( distrib ispconfig3) mais en cas de problème peut-on revenir en arrière?

    Merci 🙂

  • pihug12

    Merci pour le script super pratique !

    Pour installer Shaarli, je dois activer « session.save_path » dans le php.ini. Quel paramètre recommandes-tu ? Est-ce que « /tmp » convient au niveau de la sécurité ?

    As-tu prévu de mettre le script à jour pour la version 1.4 de Nginx ?

    Merci pour tout encore une fois. 🙂

    • Salut, pour le save_path je prefére niveau sécurité le mettre dans un répertoire dédié, utilisé uniquement pour ce besoin.

      Le script est déjà compatible 1.4, il suffit d’éditer le début du script. Par contre il faudra ajouter les options qui vont bien également dans le script.

      De base je préfère utiliser la version stable de NGINX (donc pas encore la v1.4)…

      • pihug12

        Voici ce que j’ai fait pour le répertoire de session :
        mkdir /etc/php5/fpm/session
        chown www-data /etc/php5/fpm/session
        chgrp www-data /etc/php5/fpm/session
        chmod 1733 /etc/php5/fpm/session

        Avec la configuration par défaut, $_SERVER[‘SERVER_NAME’] retourne une valeur erronée qui empêche Shaarli de fonctionner. J’ai corrigé ça en ajoutant une ligne dans le /etc/nginx/sites-enabled/default-site :
        ligne 22 : fastcgi_param SERVER_NAME $http_host;

        D’après le site de Nginx, la dernière version stable est la 1.4.0 depuis le 24 avril 2013.

  • Script utilisé sur Wheezy sans problèmes 🙂

    J’aurais quelques petites questions pour toi :

    Y’a t’il une raison particulière pour préférer compiler les sources plutôt que d’installer Nginx depuis les dépôts Dotdeb par exemple ?

    Je n’ai pas rajouté les règles IpTables (j’utilise ton script de firewall) et je ne suis pas sûr de bien comprendre leur intérêt. Pourrais-tu m’éclairer sur le sujet ?

    Y’a t’il un intérêt à utiliser un socket plutôt qu’une connexion TCP/IP entre Nginx et PHP-FPM (j’imagine qu’un socket est plus rapide…) ?

    Merci d’avance 🙂

    • >> Y’a t’il une raison particulière pour préférer compiler les sources plutôt que d’installer Nginx depuis les dépôts Dotdeb par exemple ?

      En effet le mainteneur des dépots Dotdeb est très réactif et l’on dispose d’une version vraiment à jour de NGinx, Cependant, le fait de compiler depuis les sources me permet de pouvoir customiser au plus juste les plugins que j’utilise.

      >>> Je n’ai pas rajouté les règles IpTables (j’utilise ton script de firewall) et je ne suis pas sûr de bien comprendre leur intérêt. Pourrais-tu m’éclairer sur le sujet ?

      Les règles permettent de rendre visible le serveur depuis Internet.

      Y’a t’il un intérêt à utiliser un socket plutôt qu’une connexion TCP/IP entre Nginx et PHP-FPM (j’imagine qu’un socket est plus rapide…) ?

      >>> C’est effectivement dans un but de perfo. Cependant sur un site à fort trafic, il est plutôt conseillé d’utiliser des connexion TCP qui sont plus « scalable ».

  • Salut, j’ai utilisé ton script sur une Debian toute fraiche sur une VM.

    J’ai créer un index.php dans /var/www/ et j’aimerais y acceder depuis mon windows. Je met donc l’ip dans mon browser mais j’ai un 502 Bad Gateway.

    quel est le problème ?

    Merci !

    • Guicara

      Bonjour,

      Même problème me concernant. Les pages HTML sont bien retournées, mais dès qu’il s’agit d’un .php le serveur retourne une erreur 502.

      La solution est décrite ici :
      http://stackoverflow.com/questions/10003978/php-fpm-and-nginx-502-bad-gateway

      Dans le vhost remplacer « fastcgi_pass 127.0.0.1:9000 » par « fastcgi_pass unix:/var/run/php5-fpm.sock; »

      Autre « problème » qui n’a rien à voir : après l’execution du script d’installation automatique, le dossier « sites-availalbe » n’était pas présent. J’ai du le créer manuellement. Aucun site par défaut dans /var/www.

      • La configuration doit également fonctionner avec « fastcgi_pass 127.0.0.1:9000 », il faut juste faire attention aux règles de Firewall (IpTables) comme l’indique le script en fin de traitement. Le port 9000 étant bloqué par défaut.

        • Guicara

          Merci ! J’avais complètement oublié IPtables…

  • Prestaspirit

    Salut, merci pour ce script, je vais le tester de suite, j’aurais juste voulu savoir si il était possible de choisir la version de php à installer, je voudrais php 5.5 pour pouvoir utiliser opcache, d’ailleurs est-ce que opcache fonctionne avec nginx et faut il ajouter une ligne lors de sa compilation?

    Merci
    Franck

  • Pingback: Installation automatique de NGinx, PHP-FPM, Mem...()

  • Mickael Cogerino

    salut je rencontre un probleme actuellement , lorsque j’essaye de lancer le script en root il me dit authentification failure alors que mon mdp root est bon vue qu’il fonctionne sur tout le reste … j’ai bien fait les étapes comme indiqué … une idée d’ou ça peu venir ?

  • Sébastien

    Bonjour, merci pour ce post, le lien l’exemple du fichier de configuration Nginx pointe vers une page qui n’existe plus, et j’aimerai la récupérer, pouvez vous la mettre ? merci par avance

  • o2c

    Bonjour, super script, mais existe t’il aussi une version avec PHP 7 ?