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

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.

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.

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)

[pastacode lang=”bash” manual=”apt-get%20update%0Aapt-get%20upgrade” message=”Mise à jour de la bête” highlight=”” provider=”manual”/]

Très bien nous allons pouvoir commencer !

Installation de NGINX

Nous allons tout d’abord installer NGINX sur notre machine

[pastacode lang=”bash” manual=”apt-get%20install%20nginx” message=”Installation de NGINX : Valider l’installation par O ou Y” highlight=”” provider=”manual”/]

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 :

[pastacode lang=”bash” manual=”cd%20%2Fetc%2Fnginx%0Als” message=”Affichage du dossier NGINX” highlight=”” provider=”manual”/]

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 à pour but de les lancer en production.

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.

[pastacode lang=”bash” manual=”cd%20%2Fetc%2Fnginx%2Fsites-available%0Arm%20default%0Anano%20VOTRESITE” message=”Création du fichier de configuration” highlight=”” provider=”manual”/]

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

[pastacode lang=”bash” manual=”server%20%7B%0A%23Permet%20d’%C3%A9couter%20sur%20le%20port%2080%20de%20l’IPv4%20de%20votre%20serveur%0A%20%20%20%20%20%20%20listen%2080%3B%0A%23Permet%20d’%C3%A9couter%20sur%20le%20port%2080%20de%20l’IPv6%20de%20votre%20serveur%0A%20%20%20%20%20%20%20listen%20%5B%3A%3A%5D%3A80%3B%0A%0A%23Vous%20devez%20renseigner%20le%20nom%20de%20domaine%20de%20votre%20site%20internet%0A%20%20%20%20%20%20%20server_name%20moniste.fr%3B%0A%0A%23D%C3%A9fini%20le%20r%C3%A9pertoire%20qui%20va%20accueillir%20les%20fichiers%20de%20votre%20site%20internet%0A%20%20%20%20%20%20%20root%20%2Fvar%2Fwww%2FVOTRESITE%3B%0A%0A%23Permet%20de%20d%C3%A9finir%20l’ordre%20d’ex%C3%A9cution%20de%20votre%20index.%20Ici%2C%20s’il%20y%20a%20deux%20index.php%2Fhtml%20%C3%A0%20la%20racine%20du%20site%2C%20index.php%20sera%20ex%C3%A9cut%C3%A9%20en%20priorit%C3%A9%0A%20%20%20%20%20%20%20index%20index.php%20index.html%3B%0A%0A%23Ici%2C%20on%20donne%20l’ordre%20d’afficher%20une%20page%20404%20sur%20la%20totalit%C3%A9%20du%20site%20si%20un%20fichier%20n’existe%20pas%20%20%20%0A%20%20%20%20%20%20%20location%20%2F%20%7B%0A%20%20%20%20%20%20%20%20%20try_files%20%24uri%20%24uri%2F%20%3D404%3B%0A%20%20%20%20%20%7D%0A%7D” message=”CTRL+X pour enregistrer et fermer” highlight=”” provider=”manual”/]

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.

[pastacode lang=”markup” manual=”ln%20-s%20%2Fetc%2Fnginx%2Fsites-available%2FVOTRESITE%20%2Fetc%2Fnginx%2Fsites-enabled%2FVOTRESITE” message=”” highlight=”” provider=”manual”/]

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

[pastacode lang=”bash” manual=”cd%20%2Fvar%2Fwww%0Amkdir%20VOTRESITE” message=”” highlight=”” provider=”manual”/]

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

[pastacode lang=”bash” manual=”cd%20VOTRESITE%2F%0Anano%20index.php” message=”” highlight=”” provider=”manual”/]

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

On test notre configuration sur NGINX :

[pastacode lang=”bash” manual=”nginx%20-t” message=”” highlight=”” provider=”manual”/]

Si c’est ok, on redémarre :

[pastacode lang=”bash” manual=”service%20nginx%20restart” message=”” highlight=”” provider=”manual”/]

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 !

Installation de PHP-FPM (PHP 7.0)

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

[pastacode lang=”bash” manual=”apt-get%20install%20php-fpm” message=”Installation de PHP-FPM : Valider l’installation par O ou Y” highlight=”” provider=”manual”/]

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

[pastacode lang=”bash” manual=”cd%20%2Fetc%2Fphp%2F7.0%2Ffpm%2Fpool.d%0Anano%20www.conf” message=”Le dossier 7.0 peut différer en fonction de la version” highlight=”” provider=”manual”/]

Rendez-vous à la ligne listen, est remplacé là comme ceci :

[pastacode lang=”bash” manual=”listen%20%3D%20127.0.0.1%3A9000″ message=”” highlight=”” provider=”manual”/]

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

[pastacode lang=”bash” manual=”cd%20%2Fetc%2Fnginx%2Fsites-available%0Anano%20VOTRESITE” message=”” highlight=”” provider=”manual”/]

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

[pastacode lang=”bash” manual=”%20%20%20%20%20%20%20location%20~%20%5C.php%24%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try_files%20%24uri%20%3D404%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fastcgi_index%20index.php%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fastcgi_pass%20127.0.0.1%3A9000%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fastcgi_param%20SCRIPT_FILENAME%20%24document_root%24fastcgi_script_name%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20include%20%2Fetc%2Fnginx%2Ffastcgi_params%3B%0A%20%20%20%20%20%20%20%20%7D” message=”” highlight=”” provider=”manual”/]

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 :

[pastacode lang=”bash” manual=”service%20php7.0-fpm%20restart%0Aservice%20nginx%20restart” message=”php7.0 peut différer en fonction de la version” highlight=”” provider=”manual”/]

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

[pastacode lang=”bash” manual=”cd%20%2Fvar%2Fwww%2FVOTRESITE%0Anano%20index.php” message=”” highlight=”” provider=”manual”/]

Vous ajoutez :

[pastacode lang=”php” manual=”%3C%3Fphp%0Aphpinfo()%3B%0A%3F%3E” message=”” highlight=”” provider=”manual”/]

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 !

Installation de MariaDB (« MySQL »)

On lance notre installation MariaDB…

[pastacode lang=”bash” manual=”apt-get%20install%20mariadb-server%0A” message=”Installation de MariaDB : Valider l’installation par O ou Y” highlight=”” provider=”manual”/]

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

[pastacode lang=”bash” manual=”mysql_secure_installation” message=”Script de sécurisation” highlight=”” provider=”manual”/]

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 !

[pastacode lang=”bash” manual=”NOTE%3A%20RUNNING%20ALL%20PARTS%20OF%20THIS%20SCRIPT%20IS%20RECOMMENDED%20FOR%20ALL%20MariaDB%0A%20%20%20%20%20%20SERVERS%20IN%20PRODUCTION%20USE!%20%20PLEASE%20READ%20EACH%20STEP%20CAREFULLY!%0A%0AIn%20order%20to%20log%20into%20MariaDB%20to%20secure%20it%2C%20we’ll%20need%20the%20current%0Apassword%20for%20the%20root%20user.%20%20If%20you’ve%20just%20installed%20MariaDB%2C%20and%0Ayou%20haven’t%20set%20the%20root%20password%20yet%2C%20the%20password%20will%20be%20blank%2C%0Aso%20you%20should%20just%20press%20enter%20here.%0A%0AEnter%20current%20password%20for%20root%20(enter%20for%20none)%3A%0AOK%2C%20successfully%20used%20password%2C%20moving%20on…%0A%0ASetting%20the%20root%20password%20ensures%20that%20nobody%20can%20log%20into%20the%20MariaDB%0Aroot%20user%20without%20the%20proper%20authorisation.%0A%0A%23%20set%20root%20password%0ASet%20root%20password%3F%20%5BY%2Fn%5D%20Y%0ANew%20password%3A%0ARe-enter%20new%20password%3A%0APassword%20updated%20successfully!%0AReloading%20privilege%20tables..%0A%20…%20Success!%0A%0ABy%20default%2C%20a%20MariaDB%20installation%20has%20an%20anonymous%20user%2C%20allowing%20anyone%0Ato%20log%20into%20MariaDB%20without%20having%20to%20have%20a%20user%20account%20created%20for%0Athem.%20%20This%20is%20intended%20only%20for%20testing%2C%20and%20to%20make%20the%20installation%0Ago%20a%20bit%20smoother.%20%20You%20should%20remove%20them%20before%20moving%20into%20a%0Aproduction%20environment.%0A%23%20remove%20anonymous%20users%0ARemove%20anonymous%20users%3F%20%5BY%2Fn%5D%20Y%0A%20…%20Success!%0A%0ANormally%2C%20root%20should%20only%20be%20allowed%20to%20connect%20from%20’localhost’.%20%20This%0Aensures%20that%20someone%20cannot%20guess%20at%20the%20root%20password%20from%20the%20network.%0A%0A%23%20disallow%20root%20login%20remotely%0ADisallow%20root%20login%20remotely%3F%20%5BY%2Fn%5D%20Y%0A%20…%20Success!%0A%0ABy%20default%2C%20MariaDB%20comes%20with%20a%20database%20named%20’test’%20that%20anyone%20can%0Aaccess.%20%20This%20is%20also%20intended%20only%20for%20testing%2C%20and%20should%20be%20removed%0Abefore%20moving%20into%20a%20production%20environment.%0A%0A%23%20remove%20test%20database%0ARemove%20test%20database%20and%20access%20to%20it%3F%20%5BY%2Fn%5D%20Y%0A%20-%20Dropping%20test%20database…%0A%20…%20Success!%0A%20-%20Removing%20privileges%20on%20test%20database…%0A%20…%20Success!%0A%0AReloading%20the%20privilege%20tables%20will%20ensure%20that%20all%20changes%20made%20so%20far%0Awill%20take%20effect%20immediately.%0A%0A%23%20reload%20privilege%20tables%0AReload%20privilege%20tables%20now%3F%20%5BY%2Fn%5D%20Y%0A%20…%20Success!%0A%0ACleaning%20up…%0A%0AAll%20done!%20%20If%20you’ve%20completed%20all%20of%20the%20above%20steps%2C%20your%20MariaDB%0Ainstallation%20should%20now%20be%20secure.%0A%0AThanks%20for%20using%20MariaDB!” message=”Entrez votre mot de passe (2x) et Y partout ” highlight=”” provider=”manual”/]

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 :

[pastacode lang=”bash” manual=”mysql%20-u%20root%20-p” message=”” highlight=”” provider=”manual”/]

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

[pastacode lang=”bash” manual=”CREATE%20DATABASE%20VOTREBASE%3B%0A%0AGRANT%20ALL%20ON%20VOTREBASE.*%20TO%20VOTREUSER%40localhost%20IDENTIFIED%20BY%20’VOTREMDP’%3B%0A%0Aexit” message=”A saisir ligne par ligne” highlight=”” provider=”manual”/]

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

Installation de phpMyAdmin

[pastacode lang=”bash” manual=”apt-get%20install%20phpmyadmin” message=”Installation de phpMyAdmin : Valider l’installation par O ou Y” highlight=”” provider=”manual”/]

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

[pastacode lang=”bash” manual=”cd%20%2Fetc%2Fnginx%2Fsites-available%0Anano%20phpmyadmin” message=”” highlight=”” provider=”manual”/]

Vous pouvez y insérer la configuration suivante :

[pastacode lang=”bash” manual=”server%20%7B%0A%23J’utilise%20le%20port%208080%20pour%20bien%20s%C3%A9parer%20le%20site%20internet%20de%20l’interface%20phpMyAdmin%0A%20%20%20%20%20%20%20listen%208080%3B%0A%20%20%20%20%20%20%20listen%20%5B%3A%3A%5D%3A8080%3B%0A%0A%20%20%20%20%20%20%20server_name%20VOTRESITE%3B%0A%0A%20%20%20%20%20%20%20root%20%2Fusr%2Fshare%2Fphpmyadmin%3B%0A%20%20%20%20%20%20%20index%20index.php%20index.html%3B%0A%0A%20%20%20%20%20%20%20location%20%2F%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try_files%20%24uri%20%24uri%2F%20%3D404%3B%0A%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20location%20~%20%5C.php%24%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20try_files%20%24uri%20%3D404%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fastcgi_index%20index.php%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fastcgi_pass%20127.0.0.1%3A9000%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20fastcgi_param%20SCRIPT_FILENAME%20%24document_root%24fastcgi_script_name%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20include%20%2Fetc%2Fnginx%2Ffastcgi_params%3B%0A%20%20%20%20%20%20%20%20%7D%0A%7D%0A” message=”” highlight=”” provider=”manual”/]

On oublie pas de mettre le site en production :

[pastacode lang=”bash” manual=”ln%20-s%20%2Fetc%2Fnginx%2Fsites-available%2Fphpmyadmin%20%2Fetc%2Fnginx%2Fsites-enabled%2Fphpmyadmin” message=”” highlight=”” provider=”manual”/]

On redémarre le tout :

[pastacode lang=”bash” manual=”service%20mysql%20restart%0Aservice%20nginx%20restart” message=”” highlight=”” provider=”manual”/]

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.

N’hésitez pas à poster un commentaire ci-dessous, si vous avez des questions ou problèmes !

A très vite !

%d blogueurs aiment cette page :