Cet article décrit les étapes d’installation pour bénéficier d’un serveur web sous Debian hyper performant basé sur LNHM : Linux Nginx HHVM et MariaDB !
Avec ce type de serveur web, on est très très loin de l’ultra classique serveur LAMP… Cependant, ce n’est pas pour autant plus compliqué ! :-D
Juste un petit mot sur HHVM
HHVM est une machine virtuelle open source conçue pour exécuter des programmes écrits en PHP et en Hack (langage proche du PHP utilisé sur la quasi-totalité du site de Facebook). HHVM utilise un compilateur just-in-time (JIT) pour atteindre des performances supérieures, tout en conservant la souplesse de développement que fournit PHP.
Attention, HHVM ne remplace par entièrement le moteur PHP ! Pour WordPress, HHVM est entièrement compatible, donc aucun soucis. Par contre pour les autres plate-formes de CMS, je n’ai aucune idée pour la compatibilité.
Pré-requis pour un VPS fraîchement installé
Pour rappel, toutes les commandes décrites dans l’article sont exécutées en tant que root.
- Installations de quelques outils :
apt update && apt install unzip nano htop
dpkg-reconfigure tzdata
Nginx et HHVM
- Ajout des dépôts pour Nginx 1.9 et HHVM :
echo deb http://nginx.org/packages/mainline/debian/ jessie nginx | tee /etc/apt/sources.list.d/nginx.list echo deb http://dl.hhvm.com/debian jessie main | tee /etc/apt/sources.list.d/hhvm.list
cd /tmp/ wget -O - http://nginx.org/keys/nginx_signing.key | apt-key add - wget -O - http://dl.hhvm.com/conf/hhvm.gpg.key | apt-key add -
apt update && apt install -y nginx hhvm
systemctl enable hhvm
location ~ \.(hh|php)$ { fastcgi_keep_conn on; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
nano /etc/nginx/nginx.conf worker_processes 4;##Indiquer le nombre de thread cpu que dispose le serveur
Création du block serveur pour site1
rm /etc/nginx/conf.d/default.conf nano /etc/nginx/conf.d/site1.conf
Le block serveur :
server { listen 80; server_name domaine.tld; root /var/www/site1; index index.php index.html; access_log /var/log/nginx/default-access_log; error_log /var/log/nginx/default-error_log; location / { try_files $uri $uri/ /index.php?$args; } include /etc/nginx/hhvm.conf; }
systemctl restart nginx
Création d’un fichier info.php à la racine du serveur web :
touch /var/www/site1/info.php cat "<?php phpinfo(); ?>" > info.php
Test de l’url :
MariaDB
- Installation du serveur MariaDB :
apt install mariadb-server
mysql_secure_installation
mysql -u root -p create database wordpressdb; create user wpuser@localhost identified by 'mdpuser'; grant all privileges on wordpressdb.* to wpuser@localhost identified by 'mdpuser'; flush privileges; exit;
WordPress
- Installation de la dernière version de Worpress :
cd /var/www/site1/ wget wordpress.org/latest.zip unzip latest.zip mv wordpress/* . rm -rf wordpress/ rm latest.zip
find . -type d -exec chown www-data:www-data {} \; find . -type f -exec chown www-data:www-data {} \;
mv wp-config-sample.php wp-config.php nano wp-config.php
DB_NAME = wordpressdb DB_USER = wpuser DB_PASSWORD = mdpuser
systemctl restart nginx
Sauf que je ne vais pas plus loin, car je vais configurer Nginx pour que l’accès à la partie admin soit en HTTPS !
Nginx : HTTPS pour wp-admin
- Création du certificat ssl : voir l’article OpenSSL
- Configuration Nginx :
Voici le block serveur avec la partie en https :
server { listen 80; server_name domaine.tld; root /var/www/site1; index index.php index.html; access_log /var/log/nginx/default-access_log; error_log /var/log/nginx/default-error_log; location / { try_files $uri $uri/ /index.php?$args; } location ~ /wp-(admin|login) { return 301 https://$host$request_uri; } include /etc/nginx/hhvm.conf; } server { listen 443 ssl; server_name domaine.tld; access_log access-blog-wp.log main; error_log error-blog-wp.log error; ssl on; ssl_certificate /etc/nginx/ssl/cert.crt; ssl_certificate_key /etc/nginx/ssl/cert.key; root /var/www/site1; index index.php; include /etc/nginx/hhvm.conf; location ~ /wp-(admin|login) { auth_basic "Acces DENIED!"; auth_basic_user_file /home/fred/htpasswd; } location / { return 301 http://$host$request_uri; } }
systemctl restart nginx
L’installation continu en connexion chiffrée :-)
Comparaison entre HHVM et PHP-FPM
Un petit benchmark entre HHVM et PHP-FPM avec l’outil wrk :
- HHVM :
root@vps-02:/var/www/vps-02# wrk -t12 -c400 -d30s http://vps-02.memo-linux.com/ Running 30s test @ http://vps-02.memo-linux.com/ 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.50s 218.69ms 1.80s 85.57% Req/Sec 57.60 66.29 272.00 83.33% 7630 requests in 30.05s, 69.24MB read Requests/sec: 253.88 Transfer/sec: 2.30MB
root@vps-01:/opt/wrk# wrk -t12 -c400 -d30s https://memo-linux.com:8080/ Running 30s test @ https://memo-linux.com:8080/ 12 threads and 400 connections Thread Stats Avg Stdev Max +/- Stdev Latency 1.13s 508.92ms 1.98s 56.44% Req/Sec 9.36 8.26 70.00 73.75% 1684 requests in 30.05s, 693.71KB read Socket errors: connect 0, read 0, write 0, timeout 1583 Non-2xx or 3xx responses: 7 Requests/sec: 56.04 Transfer/sec: 23.08KB
Bon, je crois qu’il n’y a pas photo ! :mrgreen:
Ressources
https://www.howtoforge.com/tutorial/install-wordpress-nginx-mariadb-hhvm-debian-8/
https://www.abyssproject.net/2015/04/installation-de-nginx-hhvm-et-mariadb-sur-debian-8/
Et merci à Seboss666, qui m’a donné envie de tester HHVM avec son article.
Salut et merci à toi pour cet article que j’ai relayé ;) juste une question, pourquoi mariadb ?
Salut et merci pour le partage :-)
MariaDB est le fork libre de MySql…
reste a comparer avec php7 … http://www.monsiteestlent.com/dossiers/php-7-nouvelle-version-majeure-et-majeure-evolution-de-la-performance
Je ne suis pas encore passé à php7 mais ouai, dès que je peux je ferais un test comparatif :-)
Ca peut fonctionner en laissant php-fpm installé?
touch /var/www/site1/info.php
bloqué sur cette commande.
touch: cannot touch ‘/var/www/site1/info.php’: No such file or directory
@pascal piot il faut créer les répertoires www et site1 avec la commande mkdir
cd /var
mkdir www
cd www
mkdir site1
Pour voir le nombre de « cpu » pour nginx (c’est le nombre de thread en fait :
cat /proc/cpuinfo | grep processor | wc -l
Attention il manque un ; à la fin de la déclaration de votre serveur :
server_name domaine.tld ;
Merci pour le tuto ça marche nickel :-)
merci pour la petite coquille et le complément d’informations :-)