JGachelin.fr

VPS OVH Debian 8 : Serveur web LEMP

Nginx

Pour la création de ce serveur web, l’idée est la suivante : créer un utilisateur spécifique pour le web (par exemple : web), qui n’aura pas d’accès administrateur, et dont les fichiers des différents hôtes virtuels seront placés dans /home/web/www/, on peut imaginer une arborescence comme ceci :

Cet utilisateur aura également un accès SSH, qui lui permettra de se connecter en SFTP à son répertoire personnel (/home/web/) de manière sécurisée. Sachez qu’avec une connexion en FTP, donc non sécurisée comme on a l’habitude de voir sur certains hébergements mutualisés, il est très simple de récupérer vos identifiants avec un logiciel d’analyse des paquets, comme Wireshark. Il n’y a besoin d’aucune configuration supplémentaire pour l’accès en SFTP depuis un logiciel comme FileZilla par exemple.

On commence donc avec la création d’un nouvel utilisateur :

sudo adduser web

Pour pouvoir tester par la suite la bonne configuration du serveur web, je me connecte avec cet utilisateur fraîchement créé et je crée toute mon arborescence (commande mkdir), avec des fichiers index.html (avec nano) dans chaque répertoire qui affiche seulement le lieu où je me trouve (monsite.fr pour le répertoire www/monsite/, dev.monsite.fr pour le répertoire www/monsite/dev, etc.). La commande pour changer d’utilisateur (web étant l’utilisateur) :

sudo su - web

Maintenant que tout est prêt de ce côté là, on repasse avec l’utilisateur qui a les droits administrateurs avec la commande exit, puis on peut commencer l’installation du serveur web nginx :

sudo apt-get install nginx

On peut faire une vérification de l’installation en se rendant sur l’adresse du VPS (vpsxxxxxx.ovh.net) dans un navigateur web pour vérifier. Pour vérifier en ligne de commande, on peut utiliser le programme curl, sur l’adresse du VPS ou bien en localhost :

sudo apt-get install curl
curl vpsxxxxxx.ovh.net
curl localhost

Et le code HTML de la page par défaut (Welcome to nginx on Debian) s’affichera dans la console.
Ensuite pour qu’il n’y ai pas de problèmes de droits, on va ajouter l’utilisateur « web » au groupe www-data et on va appliquer les droits 775 au répertoire web, récursivement :

sudo ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/monsite
sudo unlink /etc/nginx/sites-enabled/monsite

Pour créer un premier virtualhost, il faut donc faire :

sudo nano /etc/nginx/sites-available/monsite.fr

J’ai commencé avec une configuration très basique :

# dev.monsite.fr
server {
        listen 80;
        listen [::]:80;

        server_name dev.monsite.fr;

        root /home/webuser/www/monsite.fr/dev;
        index index.html index.htm index.php;

        location / {
                try_files $uri $uri/ =404;
        }

        location ~ /\.ht {
                deny all;
        }

        location ~ \.(ht|sql|bat|git|ini|sh|svn[^.]*|tpl)$ {
                deny all;
        }

        location ~ \.php$ {
                try_files $uri =404;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }

        access_log /var/log/nginx/dev.monsite.fr.acc.log;
        error_log /var/log/nginx/dev.monsite.fr.err.log;
}

On oubli pas de créer le lien symbolique ensuite. Avant de redémarrer le serveur, on peut faire une petite vérification de la syntax et de la configuration, ça évitera de mettre nginx en carafe. Quand il sera nécessaire de l’appliquer en production, c’est très utile :

sudo nginx -t
sudo nginx reload

Si ce n’est pas déjà fait, il faut également penser à lier le domaine à l’adresse IP du serveur dans le Manager OVH (onglet DNS zone). Pour l’instant je n’applique le changement qu’au domaine dev.monsite.fr. Étant donné que j’utilise chaque sous-domaine pour des usages précis, je créé un fichier par sous-domaine où la configuration sera adaptée selon les besoins.

PHP-FPM

Maintenant il est temps d’installer PHP :

sudo apt-get install php5-fpm

Il y a une configuration à faire, il faut modifier ce fichier :

sudo nano /etc/php5/fpm/pool.d/www.conf

Et changer cette ligne comme ceci :

listen = 127.0.0.1:9000

Car il peut y avoir un problème de droits et vous tombez sur une erreur 502 (Bad Gateway). Ensuite on redémarre le service PHP :

sudo service php5-fpm restart

On va également modifier deux fichiers pour que Nginx et PHP utilisent le bon utilisateur pour créer les fichiers. Tout d’abord le nom d’utilisateur et le groupe pour Nginx :

sudo nano /etc/nginx/nginx.conf
user web www-data;

Ensuite dans la configuration de PHP on va également modifier cet utilisateur :

sudo nano /etc/php5/fpm/pool.d/www.conf
user web

Puis on recharge les configurations.

sudo service nginx reload
sudo service php5-fpm reload

Pour vérifier le bon fonctionnement de PHP, il suffit d’insérer cette ligne dans un fichier, qui affichera toutes les informations à propos de PHP. Par contre, n’oubliez pas de retirer ce fichier une fois le serveur en production, question de sécurité. N’oubliez pas que le fichier doit être au format .php.

<?php phpinfo(); ?>

MySQL

On commence par installer les paquets nécessaires :

sudo apt-get install mysql-server php5-mysql

Il faut définir un mot de passe pour l’utilisateur root. Une fois ceci fait, on peut lancer la sécurisation de MySQL avec la commande :

sudo mysql_secure_installation

Pas besoin de modifier le mot de passe de root si vous en avez mis un fort à l’étape précédente, supprimez les utilisateurs anonymes, désactivez l’accès distant avec root, supprimez la table test et rechargez les privilèges pour appliquer les changements immédiatement. Ensuite, pour procéder de façon sécurisée, nous allons créer un utilisateur pour chaque site, qui n’aura accès qu’à la base de donnée de son site. Il faut se loguer dans le prompt MySQL :

mysql -u root -p

Ensuite création des bases de données, puis des utilisateurs, puis on donne les droits aux utilisateurs, puis on quitte le prompt de MySQL :

CREATE DATABASE monsite;
CREATE DATABASE autresite;
CREATE USER 'monsite'@'localhost' IDENTIFIED BY 'm0nPa$$w0rD';
CREATE USER 'autresite'@'localhost' IDENTIFIED BY 'autr€Pa$$w0rD';
GRANT ALL PRIVILEGES ON monsite.* TO 'monsite'@'localhost' IDENTIFIED BY 'm0nPa$$w0rD';
GRANT ALL PRIVILEGES ON autresite.* TO 'autresite'@'localhost' IDENTIFIED BY 'autr€Pa$$w0rD';
EXIT;

Pour voir les privilèges d’un utilisateur, il faut se connecter avec puis faire la commande suivante :

SHOW GRANTS;

Adminer

Concernant le management des bases de données via le navigateur, je ne vous conseil pas phpMyAdmin mais plutôt Adminer. C’est un équivalent, sauf qu’il ne tient qu’en un seul petit fichier, et offre des fonctionnalités suffisantes, en tout cas pour ce dont j’ai besoin. Vous pouvez même télécharger puis supprimer le fichier après chaque usage, ce sera une sécurité supplémentaire face à phpMyAdmin et un accès en moins pour les hackers.

Voilà c’est terminé pour cette partie !

Laisser un commentaire

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