I.   Présentation

 

Nous allons monter un serveur web complet faisant tourner WordPress. Ce qui implique du PHP et une base de donnée de plus nous utiliseront un système pour faire du cache.

Détaillons un peu: Le serveur web se fera par le biais de Nginx, le PHP tournera grâce à HHVM, la base de donnée sera une Mariadb et Varnish s’occupera du cache. Cette infrastructure tournera uniquement sur des conteneurs LXC (implémenté dans Proxmox).

Nous allons avoir 3 conteneurs:

  • Nginx + HHVM
  • Mariadb
  • Varnish

Voici schématiquement ce que cela donnera:

 


II.   Préparation des conteneurs

 

Si vous ne savez pas comment en créer, petite piqûre de rappel ici.

 

Nous créons donc 3 conteneurs Debian 8 jessie. Puis nous installons nos différents services dessus.

  • Conteneur mariadb: ct-mariadb | 192.168.1.11
  • Conteneur varnish: ct-varnish | 192.168.1.14
  • Conteneur nginx-hhvm: ct-nginx-hhvm | 192.168.1.15

 

On met à jour à jour nos debians en utilisant cette technique pour accélérer cette étape.

 


III.   ct-mariadb

 

Pour installer Mariadb, il faut ajouter les sources, et la il suffit d’aller sur leur site et de suivre les instructions: Mariadb

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://ftp.igh.cnrs.fr/pub/mariadb/repo/10.1/debian jessie main'

Puis on recharge les sources et on installe mariadb:

apt-get update
apt-get install mariadb-server

 

On sécurise l’installation:

mysql_secure_installation

 

On créé notre base de donnée pour notre futur wordpress:

mysql -u root -p
create database wordpress;
create user wpuser@localhost identified by 'wordpress';
grant all privileges on wordpress.* to wpuser@localhost identified by 'wordpress';
flush privileges;
exit;

 

On donne à l’utilisateur wpuser le droit de se connecter à la base de donnée depuis le conteneur ct-nginx-hhvm en 192.168.1.15 et la futur ct-varnish  en 192.168.1.14

grant all privileges on wordpress.* to wpuser@192.168.1.15 identified by 'wordpress';
grant all privileges on wordpress.* to wpuser@192.168.1.14 identified by 'wordpress';
flush privileges;
exit;

 

On va autoriser mariadb à être accessible à distance:

nano /etc/mysql/my.cnf

Les valeurs inportantes:

  • port = 3306 | vous pouvez le changer pour plus de sécuritée
  • bind-address = 192.168.1.11 | On fait écouter mariadb sur son ip et non plus sur le local (localhost)

On redemarre mariadb:

service mysql restart

 


IV.   ct-nginx-hhvm

 

Pour l’installation de nginx et hhvm  je vous renvoi directement à un de mes précédemment articles qui traite du sujet. (Oui je suis un peu fainéant 😛 )

 

Nous allons créer le fichier de conf pour notre site wordpress:

nano /etc/nginx/conf.d/wordpress.conf

server {
listen 80 ;

root /usr/share/nginx/html/wordpress;
index index.php index.html index.htm;

access_log /var/log/nginx/wordpress-access.log;
error_log /var/log/nginx/wordpress-error.log;

server_name wordpress;
include /etc/nginx/hhvm.conf;

location / {
try_files $uri $uri/ /index.php?$args;
}
}

 

on va télécharger WordPress et le mettre dans le bon dossier:

cd /usr/share/nginx/html

wget https://fr.wordpress.org/wordpress-4.6.1-fr_FR.tar.gz
tar -xvf wordpress-4.6.1-fr_FR.tar.gz
chown www-data:www-data -R wordpress

 

On vérifie la configuration de notre nginx puis on le redémarre

nginx -t
/etc/init.d/nginx restart

 

On va aller sur notre navigateur et accéder à http://192.168.1.15

La nous devons tomber sur la configuration de WordPress. Ici je vous laisse faire, penser que votre base de donnée n’est pas en localhost mais en 192.168.1.11

 

 


V.   ct-varnish

 

Une fois le WordPress fonctionnel on passe à Varnish

 

Nous allons ajouter les sources pour avoir la dernière version:

nano /etc/apt/sources.list.d/varnish.list
deb https://repo.varnish-cache.org/debian/ jessie varnish-4.1

 

On installe le support du https pour les sources et on installe la clé:

apt-get install curl apt-transport-https
curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add -

 

On recharge les sources puis on install varnish:

apt-get update && apt-get install varnish -y

 

On va configurer varnish pour qu’il écoute sur le port 80 et configurer quelques options:

nano /etc/default/varnish

DAEMON_OPTS= »-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-p thread_pools=2 \
-p thread_pool_min=25 \
-p thread_pool_max=250 \
-p thread_pool_add_delay=2 \
-p timeout_linger=0.050 \
-p cli_timeout=40 \
-s malloc,256m »

Je suis très loin d’être un expert et de maîtriser varnish je vous laisse surfer sur le web pour récolter les infos nécessaires comme j’ai pu le faire 😉

 

Maintenant nous allons configurer le fichier vcl qui permet de faire le cache ici encore je me suis servi tu tuto de nicolargo et surtout de son example de fichier vcl pour wordpress ici

On va renommer le fichier par défaut pour conserver l’original :

cd /etc/varnish/

mv default.vcl default.vcl.bak

 

il ne vous reste plus qu’a copier coller ou télécharger le fichier vcl et le renommer en default.vcl

On redémarrer varnish:

/etc/init.d/varnish restart

 

Et voila tout est prêt votre WordPress est maintenant accessible sur http://192.168.1.14

 


VI.   Test de performance

 

Sur un autre conteneur (tant qu’à faire) j’ai installer un les deux outils suivants:

  • ab (apache benchmark)
  • siege

et j’ai donc créer deux pages dans mon WordPress:

  • test-light | juste du texte
  • test-big | du texte est des photos

Pour les photos il y en a 5 :

  • 1024×768 = 122 Kb
  • 1920×1080 = 577 Kb
  • 3840×2560 = 1Mb
  • 5760×3840 = 3Mb
  • 12000×6660 = 31Mb (Ouai je me suis enflammé 😀 )

 

Pour le test avec ab: 

  • ab -k  -n 1000  -c 100  http://192.168.1.14/test-light/
  • ab -k  -n 1000  -c 100  http://192.168.1.15/test-light/
  • ab -k  -n 1000  -c 100  http://192.168.1.14/test-big/
  • ab -k  -n 1000  -c 100  http://192.168.1.15/test-big/

-n = nombre de requêtes que l’on va envoyer et -c = Nombre de connexion simultanées

 

Pour le test avec siege:

  • siege -d1 -c50 -r100 -t24S http://192.168.1.14/test-light/
  • siege -d1 -c50 -r100 -t24S http://192.168.1.15/test-light/
  • siege -d1 -c50 -r100 -t24S http://192.168.1.14/test-big/
  • siege -d1 -c50 -r100 -t24S http://192.168.1.15/test-big/

Où -d1 = 1 seconde de delai entre chaque cycle -c = nombre de connexions simultanées -r100 = on refais le test 100 fois -t24S = test pendant 24 secondes

 

Et sans plus attendre voici les résultats:

ab:

   

 

siege: