Créer un serveur Web Nginx + PHP7 + Maria DB (Mysql) + PhpMyAdmin sous Debian 9 Stretch

Image non disponible

Voici un tutoriel vous permettant d'installer un serveur web NGINX avec la compagnie de PHP 7 ainsi qu'une base de données MariaDB (« MySQL ») sous Debian 9 Stretch.

Un hébergement mutualisé chez OVH peut vite devenir obsolète si vous recevez beaucoup de trafic sur votre site Internet. En effet, ces systèmes sont souvent programmés pour accueillir seulement une dizaine de connexions simultanées. Ce qui est embêtant si votre projet Internet prend de l'ampleur.

Pour ce tutoriel, je vais me servir d'un VPS que j'ai loué chez mon hébergeur Scaleway, une nouvelle filiale du groupe ONLINE (appartenant à Iliad, qui détient aussi la marque Free).

Pour information, j'ai choisi le VPS C1 à 2,99 €/mois HT avec 4 cœurs dédiés, 2 GB de RAM ainsi que 50 Go d'espace disque en SSD. Le tout sous Debian 9 Stretch.

3 commentaires Donner une note  l'article (5)

Article lu   fois.

L'auteur

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Présentation des outils

Tout d'abord, une rapide présentation des outils que nous allons utiliser.

Image non disponible
  • NGINX est un logiciel libre de serveur Web particulièrement adapté pour les sites Internet avec des forts trafics. Contrairement à Apache, il est léger et rapide mais comporte moins de modules qu'Apache (cela tend à s'infirmer au cours des années). NGINX est utilisé par environ 20 % du total des domaines français enregistrés (https://www.udomo.fr/statistiques-sur-linternet-francais).
Image non disponible
  • PHP, ou plutôt le packet php-fpm qui est l'interface pour communiquer avec le serveur NGINX et PHP.
Image non disponible
  • MariaDB est un fork du célèbre système MySQL racheté par Oracle. C'est un logiciel complètement libre et de plus en plus de sociétés et sites Internet migrent vers MariaDB.
Image non disponible
  • phpMyAdmin est une application web permettant de gérer les bases de données MySQL.

II. Préparatifs

Pour bien commencer ce tutoriel, vous devez avoir :

Mise à jour de la bête
Sélectionnez
apt-get update
apt-get upgrade

Très bien, nous allons pouvoir commencer !

III. Installation de NGINX

Nous allons tout d'abord installer NGINX sur notre machine :

Installation de NGINX : Valider l'installation par O ou Y
Sélectionnez
apt-get install nginx

Pour vérifier que tout fonctionne, essayez d'ouvrir l'IP (port 80) de votre serveur dans votre navigateur Internet. Vous devriez tomber sur cette page :

Image non disponible

Rien de bien compliqué pour l'instant.

Rendez-vous dans le dossier/etc/nginx afin de comprendre le contenu de NGINX :

Affichage du dossier NGINX
Sélectionnez
cd /etc/nginx
ls

Nous allons nous intéresser aux dossiers sites-enabled et sites-available.

Le dossier sites-available permet d'ajouter des sites dans notre NGINX et le dossier sites-enabled a pour but de les lancer en production.

III-A. Ajouter un site sous NGINX

Nous allons donc créer notre « premier site » sous NGINX. À l'instar d'Apache, il faut déclarer les paramètres de notre site que nous voulons héberger dans un fichier. Nous allons tout d'abord nous rendre dans le dossier sites-available, supprimer le fichier de configuration par défaut et créer le nôtre.

Création du fichier de configuration
Sélectionnez
1.
2.
3.
cd /etc/nginx/sites-available
rm default
nano VOTRESITE

Et copier le fichier ci-dessous en modifiant les lignes nécessaires :

CTRL+X pour enregistrer et fermer
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
server {
#Permet d'écouter sur le port 80 de l'IPv4 de votre serveur
       listen 80;
#Permet d'écouter sur le port 80 de l'IPv6 de votre serveur
       listen [::]:80;

#Vous devez renseigner le nom de domaine de votre site internet
       server_name moniste.fr;

#Définit le répertoire qui va accueillir les fichiers de votre site internet
       root /var/www/VOTRESITE;

#Permet de définir l'ordre d'exécution de votre index. Ici, s'il y a deux index.php/html à la racine du site, index.php sera exécuté en priorité
       index index.php index.html;

#Ici, on donne l'ordre d'afficher une page 404 sur la totalité du site si un fichier n'existe pas   
       location / {
         try_files $uri $uri/ =404;
     }
}

Avant de redémarrer NGINX, nous allons créer un lien ln -s permettant d'activer notre site en production dans le dossier sites-enabled.

 
Sélectionnez
ln -s /etc/nginx/sites-available/VOTRESITE /etc/nginx/sites-enabled/VOTRESITE

Le lien est correctement créé. Il nous reste à créer notre dossier qui accueillera les fichiers de notre site :

 
Sélectionnez
cd /var/www
mkdir VOTRESITE

On va créer un fichier index.php pour voir si notre configuration est fonctionnelle une fois NGINX redémarré :

 
Sélectionnez
cd VOTRESITE/
nano index.php

Dans cet index.php, mettez « test ok ».

On teste notre configuration sur NGINX :

 
Sélectionnez
nginx -t

Si c'est OK, on redémarre :

 
Sélectionnez
service nginx restart

Retournez sur votre serveur à l'aide de votre navigateur Internet, si vous tombez sur votre page index.php avec le contenu « test ok », c'est bon !

Notre serveur Web NGINX est installé, ça va, non ?

Nous allons par la suite installer PHP-FPM pour dynamiser tout notre site !

IV. Installation de PHP-FPM (PHP 7.0)

Il est l'heure d'installer notre PHP-FPM !

Installation de PHP-FPM : Valider l'installation par O ou Y
Sélectionnez
apt-get install php-fpm

Rien de bien compliqué, jusqu'ici. Maintenant nous allons devoir relier le module PHP-FPM à NGINX pour qu'ils puissent fonctionner ensemble.

Le dossier 7.0 peut différer en fonction de la version
Sélectionnez
cd /etc/php/7.0/fpm/pool.d
nano www.conf

Rendez-vous à la ligne listen, et remplacez-là comme ceci :

 
Sélectionnez
listen = 127.0.0.1:9000

PHP-FPM est configuré, nous allons nous rendre sur le fichier de configuration NGINX précédent pour ajouter de nouveaux paramètres :

 
Sélectionnez
cd /etc/nginx/sites-available
nano VOTRESITE

Il vous suffit d'ajouter ces lignes à la fin de votre fichier :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
location ~ \.php$ {
        try_files $uri =404;
         fastcgi_index index.php;
         fastcgi_pass 127.0.0.1:9000;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
         include /etc/nginx/fastcgi_params;
 }

Grâce à ces lignes, NGINX sait qu'il doit interpréter TOUS les fichiers PHP avec le module PHP-FPM qui est disponible sur 127.0.0.1:9000.

On va maintenant redémarrer nos deux modules pour valider la configuration :

php7.0 peut différer en fonction de la version
Sélectionnez
service php7.0-fpm restart
service nginx restart

Pour vérifier que PHP fonctionne, nous allons modifier notre index.php en y ajoutant la célèbre fonction phpinfo();

 
Sélectionnez
cd /var/www/VOTRESITE
nano index.php

Vous ajoutez :

 
Sélectionnez
1.
2.
3.
<?php
phpinfo();
?>

Rendez-vous sur l'adresse IP de votre navigateur et si vous voyez la configuration PHP de votre serveur, tout est OK !

Image non disponible

Nous avons donc maintenant notre NGINX couplé avec PHP-FPM, nous allons installer notre base de données !

V. Installation de MariaDB (« MySQL »)

On lance notre installation MariaDB…

Installation de MariaDB : Valider l'installation par O ou Y
Sélectionnez
apt-get install mariadb-server

Et on exécute le script de sécurisation du serveur en production :

Script de sécurisation
Sélectionnez
mysql_secure_installation

Quand il vous demande un mot de passe, vous en créez un, quand il vous pose des questions, vous répondez Y (pour yes)… même pas drôle !

Entrez votre mot de passe (2x) et Y partout
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none):
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

# set root password
Set root password? [Y/n] Y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!

By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
# remove anonymous users
Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

# disallow root login remotely
Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

# remove test database
Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

# reload privilege tables
Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

Maintenant que notre MariaDB est correctement initialisé, nous allons créer un utilisateur ayant tous les privilèges, cela évite d'utiliser l'utilisateur « root ». Pour cela :

 
Sélectionnez
mysql -u root -p

Faites entrer et saisissez le mot de passe que vous avez préalablement créé.

Il vous reste à créer une base de données avec un utilisateur et un mot de passe avec tous les privilèges :

À saisir ligne par ligne
Sélectionnez
1.
2.
3.
4.
5.
CREATE DATABASE VOTREBASE;

GRANT ALL ON VOTREBASE.* TO VOTREUSER@localhost IDENTIFIED BY 'VOTREMDP';

exit

Voilà notre base de données est créée. Pour vérifier visuellement que tout fonctionne, nous allons installer phpMyAdmin.

VI. Installation de phpMyAdmin

Installation de phpMyAdmin : Valider l'installation par O ou Y
Sélectionnez
apt-get install phpmyadmin

Une fois installé, nous allons créer un nouveau fichier de configuration de site sous NGINX pour permettre d'accéder à phpMyAdmin.

 
Sélectionnez
cd /etc/nginx/sites-available
nano phpmyadmin

Vous pouvez y insérer la configuration suivante :

 
Sélectionnez
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
server {
#J'utilise le port 8080 pour bien séparer le site internet de l'interface phpMyAdmin
       listen 8080;
       listen [::]:8080;

       server_name VOTRESITE;

       root /usr/share/phpmyadmin;
       index index.php index.html;

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

On n'oublie pas de mettre le site en production :

 
Sélectionnez
ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enabled/phpmyadmin

On redémarre le tout :

 
Sélectionnez
service mysql restart
service nginx restart

Vous pouvez accéder à phpMyAdmin depuis votre navigateur sous la forme suivante :

VOTRE.IP:8080

Image non disponible

Voilà votre serveur web est fonctionnel ! Un bon petit tutoriel pour commencer la création d'un serveur web. Je ferai un article prochainement pour sécuriser sa machine ainsi que NGINX et PHP.

VII. Remerciements

Nous remercions Quentin Beauvais qui nous a autorisés à publier ce tutoriel.

Nous remercions également Winjerome pour la mise au gabarit et Fabien pour la relecture orthographique.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2018 Bernard AMADE. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.