Ubuntu/Debian – Installation de WordPress avec Nginx, PHP-FPM et MySQL

WordPress est un système de gestion de contenu (CMS) qui permet de créer et gérer facilement l’ensemble d’un site web ou simplement un blog. Gratuit et libre, WordPress possède de nombreux avantages tels que sa simplicité d’utilisation et d’administration, sa facilité d’indexation dans les moteurs de recherche, une personnalisation importante grâce à de nombreux plugins disponibles et une communauté WordPress très active.

Prérequis

Notre choix se portera sur le serveur HTTP Nginx pour une question de performances. Nginx est reconnu pour ses hautes performances, sa stabilité, son ensemble de fonctionnalités, sa configuration simple ainsi que sa faible consommation de ressources.

Le module PHP-FPM permettra la communication entre le serveur Nginx et PHP, basée sur le protocole FastCGI. Ce module, écoutant sur le port 9000 par défaut ou sur un socket UNIX, permet notamment l’exécution de scripts PHP dans un processus indépendant de Nginx avec des UID et GID différents. Il sera alors possible, dans le cas de la gestion de plusieurs sites sur un même serveur, de créer et configurer un groupe (appelé aussi pool) de processus par site.

Lors de l’installation de MySQL Server 5.5, il vous sera demandé de définir un mot de passe pour l’utilisateur root ainsi que la confirmation de ce mot de passe.

Installez tout d’abord les paquets suivants :

Installation et Téléchargement de WordPress

  • Téléchargez la dernière version française de WordPress :
  • Décompressez l’archive :
  • Renommez le dossier :
  • Supprimez l’archive téléchargée :

Configuration

Droits Unix

Lors du déploiement basique d’un serveur HTTP, l’utilisateur sous lequel fonctionne ce serveur (Apache, Nginx…) est la plupart du temps « www-data », « nobody » ou « apache ». Cela signifie que si plusieurs sites existent sous la même instance d’Apache, tous utilisent le même utilisateur. Or si l’un des sites s’avère corrompu par un utilisateur malveillant alors l’assaillant peut profiter pleinement de tous les droits de l’utilisateur sous lequel tourne le serveur web. Tous les sites s’avèrent donc vulnérables.

Pour des raisons évidentes de sécurité, il est donc recommandé de cloisonner ces utilisateurs et d’avoir un utilisateur dédié à la gestion du dossier myblog. Cet utilisateur aura des droits aussi restreints que possible à ce répertoire.

Commencez par créer un utilisateur myblog.

L’utilisateur myblog sera le propriétaire du dossier /var/www/myblog. Ce dossier appartiendra au groupe www-data pour que Nginx puisse y accéder.

Nginx

Modifiez les directives suivantes du fichier de configuration Nginx /etc/nginx/nginx.conf :

  • worker_processes 8; : l’un des paramètres à ajuster immédiatement est le worker_processes. Pour profiter pleinement de la puissance de votre serveur, il est recommandé de mettre autant de worker_processes que de cœurs disponibles sur votre serveur. Pour connaître le nombre de cœurs sur votre serveur, il suffit de lancer la commande :
  • server_tokens off; : pour des raisons de sécurité, il est recommandé de désactiver l’envoi d’informations telles que le numéro de version de votre Nginx. Pour cela, décommentez cette ligne.

PHP-FPM

Créez le fichier de configuration suivant : /etc/php5/fpm/pool.d/myblog.conf

Certaines valeurs sont très arbitraires et seront différentes d’un serveur à l’autre, des plugins installés sur votre WordPress et de l’affluence de votre blog… Cependant ces différentes directives respectent certaines conditions :

  • [myblog] : nom du pool. Il est possible de créer plusieurs pools par fichier. Chaque pool doit commencer par cette directive.
  • listen : interface d’écoute des requêtes. Les syntaxes acceptées sont ADRESSE_IP:PORT (ex: listen = 127.0.0.1:9000) et /path/to/unix/socket (ex: listen = /var/run/myblog.sock). Le socket est représenté comme un simple fichier sur le système et permet d’interfacer des processus entre eux sans passer par la couche réseau du système, ce qui est inutile lorsque Nginx et PHP-FPM sont hébergés sur le même serveur. Je vous conseillerais donc d’utiliser un socket.
  • listen.owner & listen.group : affecte l’utilisateur et le groupe au socket Unix si utilisé. Ces deux paramètres peuvent être associés au paramètre listen.mode qui définit les permissions du socket (660 par défaut). Il est important que Nginx ait les doits de lecture sur le socket Unix.
  • user & group : utilisateur et groupe sous lesquels le pool de processus sera exécuté. Cet utilisateur et ce groupe doivent bien sûr exister sur votre système et surtout accéder aux fichiers php de votre WordPress. Cela veut dire aussi que chaque fichier/répertoire créé dans WordPress appartiendra à cet utilisateur et à ce groupe.
  • pm : directive acceptant les 3 valeurs suivantes : static, dynamic et ondemand.
    • static : les processus, au nombre de pm.max_children, sont continuellement actifs (quelle que soit la charge) et sont susceptibles de consommer de la mémoire inutilement. Cette directive est recommandée si vous avez un seul site, donc un seul pool.
    • dynamic : le nombre de processus fils pourra varier suivant la charge. Cependant, nous gardons le contrôle sur le nombre de processus fils à créer au démarrage du serveur (pm.start_servers), le nombre de processus maximum (pm.max_children), en attente de requêtes (pm.min_spare_servers et pm.max_spare_servers), etc. Les directives suivantes deviennent obligatoires : pm.max_children, pm.start_servers, pm.min_spare_servers, pm.max_spare_servers. Cette directive est recommandée si vous avez plusieurs pools avec un fort trafic (plus de 10 000 requêtes/jour).
    • ondemand : aucun processus fils n’est lancé au démarrage du serveur, les processus s’activent à la demande et auront une durée de vie définie par la directive pm.process_idle_timeout. L’intérêt de cette directive est de libérer de la mémoire en cas de faible charge mais celle-ci peut légèrement augmenter le temps de réponse de votre blog. Cette directive est recommandée si vous avez plusieurs pools avec potentiellement une faible affluence.
  • pm.max_children : nombre de processus fils créés lorsque le paramètre pm est réglé sur static ou nombre maximum de processus fils créés lorsque le paramètre pm est réglé sur dynamic. La formule pour définir ce paramètre peut s’établir de cette façon : pm.max_children = RAM allouée à votre blog WordPress / RAM consommée par un processus fils. Nous allons prendre des valeurs arbitraires et partir du principe qu’un processus PHP consomme 60Mo (vous pourrez ajuster ces valeurs par la suite grâce au plugin WordPress : WP-Memory-Usage) pm.max_children = 2048Mo / 60Mo = 34
  • pm.max_spare_servers : nombre maximum de processus au repos. pm.max_spare_servers ne devra pas être réglé trop haut : un grand nombre de processus enfants consommera des ressources inutilement. Par convention, le nombre de pm.max_spare_servers peut être défini via la formule suivante : pm.max_spare_servers = pm.max_children / 2
  • pm.min_spare_servers : nombre minimum de processus au repos. Si pm.min_spare_servers est réglé trop bas et qu’un grand nombre de requêtes survient, PHP-FPM devra créer des processus enfants supplémentaires pour satisfaire ces nouvelles requêtes. Créer des processus enfants est relativement exigeant en ressources CPU, le serveur ne sera pas en mesure de prendre en charge les requêtes des clients immédiatement. Par convention, le nombre de pm.min_spare_servers peut être défini via la formule suivante : pm.min_spare_servers = pm.max_spare_servers / 2
  • pm.start_servers : nombre de processus fils à créer au démarrage. Utilisé seulement si pm est réglé sur dynamic. La valeur par défaut reste une valeur recommandée : pm.start_servers = min_spare_servers + (max_spare_serversmin_spare_servers) / 2
  • pm.max_requests : nombre de requêtes que chaque processus fils devra exécuter avant de disparaître. Cette valeur ne doit pas être trop élevée afin de contourner d’éventuelles fuites mémoires, ni trop faible pour ne pas solliciter régulièrement le CPU à chaque création de processus fils. 500 reste une valeur recommandée.

Virtual host

Créez le fichier suivant /etc/nginx/sites-available/myblog :

La nouvelle configuration sera prise en compte après redémarrage des services Nginx et PHP-FPM :

Création de la base de données MySQL

Tout d’abord, connectez-vous sur l’interface MySQL avec l’utilisateur root et grâce au mot de passe saisi lors de l’installation du paquet mysql-server-5.5 :

Créez la base de données myblog :

Tout comme pour la gestion du répertoire myblog et pour plus de sécurité, vous allez tout d’abord créer un utilisateur MySQL myblog dédié à la base de données myblog, renseigner un mot de passe et ensuite lui donner les droits sur cette base de données :

WordPress

Changez d’utilisateur pour pouvoir accéder au répertoire myblog :

Faites une copie du fichier wp-config-sample.php :

Editez le fichier wp-config.php et ne remplacer que les valeur suivantes :

Lancement du script d’installation

Lancez votre navigateur, rendez-vous à l’adresse suivante : http://www.myblog.com/wp-admin/install.php et créer votre utilisateur WordPress :

Pour terminer, il est toujours judicieux de suivre les conseils de GTmetrix pour optimiser votre WordPress et gagner en rapidité.

Bonne rédaction !

WordPress sur Android…

WordPress

Découvrez l’excellente application officielle de WordPress sur Android. Rédigez, éditez, publiez et accédez à vos articles et statistiques !

WordPressAutomattic, IncDisponible sur Google Play


Ubuntu 14.04.1 Server LTS (64bits)Nginx 1.4.6
PHP5-FPM 5.5.9
MySQL Server 5.5.35
WordPress 4.0

Auteur
AuteurEdouard WATTECAMPS

3 réponses
  1. Vinz
    Vinz dit :

    Bonjour,

    Merci pour ce tuto très didactique.
    Néanmoins ne vous manquerez t’il pas la directive « listen » dans le virtualhost Nginx ?

    Cordialement,

    Répondre
    • wared
      wared dit :

      Bonjour Vinz,

      Par défaut, Nginx écoute sur le port 80, cette directive n’est pas obligatoire. Mais vous avez raison, pour des raisons de clarté je modifie l’article. Merci !

      Cordialement,

      W.

      Répondre

Répondre

Se joindre à la discussion ?
Vous êtes libre de contribuer !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *