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).
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 :
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Â :
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.
2.
3.
cd /etc/nginx/sites-available
rm default
nano VOTRESITE
Et copier le fichier ci-dessous en modifiant les lignes nécessaires :
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.
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Â !
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.
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 :
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 :
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 :
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Â !
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…
apt-get install mariadb-server
Et on exécute le script de sécurisation du serveur en production :
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 !
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 :
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 :
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▲
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 :
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 :
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.