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

Quentin Beauvais

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.

Commentez

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

- Auteur : Quentin Beauvais

- Parution : 16 mai 2018

- Licence : Copyright ® 2018 Quentin Beauvais. Aucune reproduction, même partielle, ne peut être faite de ce site et 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.

Sommaire

- I. Présentation des outils

- II. Préparatifs

- III. Installation de NGINX

- III-A. Ajouter un site sous NGINX

- IV. Installation de PHP-FPM (PHP 7.0)

- V. Installation de MariaDB (« MySQL »)

- VI. Installation de phpMyAdmin

- VII. Remerciements

I - Présentation des outils

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

- 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).

- PHP, ou plutôt le packet php-fpm qui est l'interface pour communiquer avec le serveur NGINX et PHP.

- 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.

- 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 :

- un serveur dédié ou un VPS avec un accès SSH ;

- un peu de temps et de patience ;

- un café ;

- Une machine à jour avec le sources.list de base (https://wiki.debian.org/fr/SourcesList).

Mise à jour de la bête

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

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 :

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

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

1. cd /etc/nginx/sites-available

2. rm default

3. nano VOTRESITE

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

CTRL+X pour enregistrer et fermer

1. server {

2. #Permet d'écouter sur le port 80 de l'IPv4 de votre serveur

3. listen 80;

4. #Permet d'écouter sur le port 80 de l'IPv6 de votre serveur

5. listen [::]:80;

7. #Vous devez renseigner le nom de domaine de votre site internet

8. server_name moniste.fr;

10. #Définit le répertoire qui va accueillir les fichiers de votre site internet

11. root /var/www/VOTRESITE;

13. #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é

14. index index.php index.html;

16. #Ici, on donne l'ordre d'afficher une page 404 sur la totalité du site si un fichier n'existe pas

17. location / {

18. try_files $uri $uri/ =404;

19. }

20. }

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.

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 :

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é :

cd VOTRESITE/
nano index.php

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

On teste notre configuration sur NGINX :

nginx -t

Si c'est OK, on redémarre :

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

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

cd /etc/php/7.0/fpm/pool.d
nano www.conf

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

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 :

cd /etc/nginx/sites-available
nano VOTRESITE

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

1. location ~ \.php$ {

2. try_files $uri =404;

3. fastcgi_index index.php;

4. fastcgi_pass 127.0.0.1:9000;

5. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

6. include /etc/nginx/fastcgi_params;

7. }

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

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();

cd /var/www/VOTRESITE
nano index.php

Vous ajoutez :

1. <?php

2. phpinfo();

3. ?>

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

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

apt-get install mariadb-server

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

Script de sécurisation

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

1. NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB

2. SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

4. In order to log into MariaDB to secure it, we'll need the current

5. password for the root user.  If you've just installed MariaDB, and

6. you haven't set the root password yet, the password will be blank,

7. so you should just press enter here.

9. Enter current password for root (enter for none):

10. OK, successfully used password, moving on...

12. Setting the root password ensures that nobody can log into the MariaDB

13. root user without the proper authorisation.

15. # set root password

16. Set root password? [Y/n] Y

17. New password:

18. Re-enter new password:

19. Password updated successfully!

20. Reloading privilege tables..

21. ... Success!

23. By default, a MariaDB installation has an anonymous user, allowing anyone

24. to log into MariaDB without having to have a user account created for

25. them.  This is intended only for testing, and to make the installation

26. go a bit smoother.  You should remove them before moving into a

27. production environment.

28. # remove anonymous users

29. Remove anonymous users? [Y/n] Y

30. ... Success!

32. Normally, root should only be allowed to connect from 'localhost'.  This

33. ensures that someone cannot guess at the root password from the network.

35. # disallow root login remotely

36. Disallow root login remotely? [Y/n] Y

37. ... Success!

39. By default, MariaDB comes with a database named 'test' that anyone can

40. access.  This is also intended only for testing, and should be removed

41. before moving into a production environment.

43. # remove test database

44. Remove test database and access to it? [Y/n] Y

45. - Dropping test database...

46. ... Success!

47. - Removing privileges on test database...

48. ... Success!

50. Reloading the privilege tables will ensure that all changes made so far

51. will take effect immediately.

53. # reload privilege tables

54. Reload privilege tables now? [Y/n] Y

55. ... Success!

57. Cleaning up...

59. All done!  If you've completed all of the above steps, your MariaDB

60. installation should now be secure.

62. 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 :

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

1. CREATE DATABASE VOTREBASE;

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

5. 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

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.

cd /etc/nginx/sites-available
nano phpmyadmin

Vous pouvez y insérer la configuration suivante :

1. server {

2. #J'utilise le port 8080 pour bien séparer le site internet de l'interface phpMyAdmin

3. listen 8080;

4. listen [::]:8080;

6. server_name VOTRESITE;

8. root /usr/share/phpmyadmin;

9. index index.php index.html;

11. location / {

12. try_files $uri $uri/ =404;

13. }

14. location ~ \.php$ {

15. try_files $uri =404;

16. fastcgi_index index.php;

17. fastcgi_pass 127.0.0.1:9000;

18. fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

19. include /etc/nginx/fastcgi_params;

20. }

21. }

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

ln -s /etc/nginx/sites-available/phpmyadmin /etc/nginx/sites-enabled/phpmyadmin

On redémarre le tout :

service mysql restart
service nginx restart

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

VOTRE.IP:8080

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.