[tuto][linux][novice] Serveur Web avec Lighttpd + PHP + MariaDB

Tu connais les bases et tu veux en apprendre d'avantage.
Avatar de l’utilisateur
N4T0R4
Administrateur
Messages : 42
Inscription : 09 décembre 2023, 21:45

[tuto][linux][novice] Serveur Web avec Lighttpd + PHP + MariaDB

Message par N4T0R4 »

lighttpd (ou « lighty ») est un logiciel de serveur Web (ou HTTP) sécurisé, rapide et flexible.

Sommaire

- Étape 1 - Installer Lighttpd
- Étape 2 - Installer et configurer PHP-FPM
- Étape 3 - Configurer Lighttpd et PHP-FPM
- Étape 4 - Test
- Étape 5 - Installer et configurer le serveur MySQL

Prérequis

Avant d'installer le serveur, commencons par mettre à jour le référentiel et les packages logiciels :

Code : Tout sélectionner

apt update
apt upgrade
Étape 1 - Installer Lighttpd

Code : Tout sélectionner

apt install lighttpd
Une fois l’installation terminée, rendez-vous dans le répertoire /etc/lighttpd ou vous pouvez retrouver les fichiers de configuration :

Code : Tout sélectionner

cd /etc/lighttpd
  • lighttpd.conf et le fichier de configuration principale dans lequel sont chargées les instructions principales.
  • conf-available est un répertoire contenant les fichiers de configurations des modules installés sur le serveur.
  • conf-enabled est le dossier contenant les fichiers des modules activés.
Commençons par éditer le fichier de configuration lighttpd.conf (option -l pour afficher les numéros de lignes) :

Code : Tout sélectionner

nano -l lighttpd.conf

Code : Tout sélectionner

 1 server.modules = (
 2         "mod_indexfile",
 3         "mod_access",
 4         "mod_alias",
 5         "mod_redirect",
 6 )
 7
 8 server.document-root        = "/var/www/html"
 9 server.upload-dirs          = ( "/var/cache/lighttpd/uploads" )
10 server.errorlog             = "/var/log/lighttpd/error.log"
11 server.pid-file             = "/run/lighttpd.pid"
12 server.username             = "www-data"
13 server.groupname            = "www-data"
14 server.port                 = 80
15
16 # features
17 #https://redmine.lighttpd.net/projects/lighttpd/wiki/Server_feature-flagsDetails
18 server.feature-flags       += ("server.h2proto" => "enable")
19 server.feature-flags       += ("server.h2c"     => "enable")
20 server.feature-flags       += ("server.graceful-shutdown-timeout" => 5)
21 #server.feature-flags       += ("server.graceful-restart-bg" => "enable")
22
23 # strict parsing and normalization of URL for consistency and security
24 # https://redmine.lighttpd.net/projects/lighttpd/wiki/Server_http-parseoptsDetails
25 # (might need to explicitly set "url-path-2f-decode" = "disable"
26 #  if a specific application is encoding URLs inside url-path)
27 server.http-parseopts = (
28   "header-strict"           => "enable",# default
29   "host-strict"             => "enable",# default
30   "host-normalize"          => "enable",# default
31   "url-normalize-unreserved"=> "enable",# recommended highly
32   "url-normalize-required"  => "enable",# recommended
33   "url-ctrls-reject"        => "enable",# recommended
34   "url-path-2f-decode"      => "enable",# recommended highly (unless breaks app)
35  #"url-path-2f-reject"      => "enable",
36   "url-path-dotseg-remove"  => "enable",# recommended highly (unless breaks app)
37  #"url-path-dotseg-reject"  => "enable",
38  #"url-query-20-plus"       => "enable",# consistency in query string
39 )
40
41 index-file.names            = ( "index.php", "index.html" )
42 url.access-deny             = ( "~", ".inc" )
43 static-file.exclude-extensions = ( ".php", ".pl", ".fcgi" )
44
45 # default listening port for IPv6 falls back to the IPv4 port
46 include_shell "/usr/share/lighttpd/use-ipv6.pl " + server.port
47 include_shell "/usr/share/lighttpd/create-mime.conf.pl"
48 include "/etc/lighttpd/conf-enabled/*.conf"
49
50 #server.compat-module-load   = "disable"
51 server.modules += (
52         "mod_dirlisting",
53         "mod_staticfile",
54 )
55
Les premières lignes (lignes 1 à 5) permettent d’identifier les modules activés sur le serveur. Nous ne nous attardons pas plus sur ces lignes car nous reviendrons sur ces modules par la suite.

Ensuite, vous pouvez voir la configuration des répertoires et fichiers utilisés par Lighty (lignes 8 à 11) :

server.document-root : Cette ligne permet de choisir le répertoire dans lequel Lighty ira chercher vos pages. Par défaut, Lighty charge les fichiers contenus dans le répertoire /var/www/html. Si vous souhaitez changer de répertoire, pensez à le créer manuellement et à copier dedans les fichiers contenus dans /var/www/html avant de redémarrer le serveur après modification sur fichier de configuration.

Pour ce tutoriel, nous allons modifier le chemin pour /var/www :

Code : Tout sélectionner

server.document-root        = "/var/www"
server.upload-dirs : Cette option définit les répertoires dans lesquels seront envoyés les fichiers envoyés depuis un de vos sites (via un formulaire d’upload de fichiers). Si vous souhaitez modifier ce répertoire, comme pour le document-root, pensez à créer le dossier avant de redémarrer le serveur.
server.errorlog : Contient le chemin vers le fichier des logs du serveur.
server.pid-file :

Viennent ensuite les lignes server.username et server.groupname pour définir le propriétaire et le groupe utilisés par le serveur, ici 'www-data'.

server.port : Modifier cette ligne permet de changer le port d’écoute du serveur. Par défaut le serveur écoute sur le port 80 (HTTP).

La ligne 41 spécifie l'ordre de recherche des pages index, si le serveur ne trouve pas de page 'index.php', il ira chercher 'index.html' et ainsi de suite.

Vous pouvez par exemple placer index.html en premier et ajouter index.htm, ce qui donne :

Code : Tout sélectionner

index-file.names             = { "index.html", "index.htm", "index.php" }
Maintenant que vous avez configuré votre serveur, vous devez le redémarrer pour que les changements soient pris en compte :

Code : Tout sélectionner

sudo service lighttpd restart
Pour vérifier l'état du serveur :

Code : Tout sélectionner

sudo service lighttpd status
Si tout est ok, nous allons créer notre premier fichier index.html dans /var/www :

Code : Tout sélectionner

cd /var/www
ls -l
On supprime tout, les répertoires compris (-r) et avec force (-f) cad sans confirmation de suppression :

Code : Tout sélectionner

rm -rf /var/www/*
On écrit "Bienvenue" et on dirige la sortie vers fichier "index.html" :

Code : Tout sélectionner

echo "Bienvenue" > index.html
On donne les droits d'accès au serveur avec :

Code : Tout sélectionner

chown -R www-data:www-data /var/www
Il ne reste plus qu'à tester via votre navigateur : http://<ip-du-serveur> ou http://localhost si vous êtes sur la machine locale.

Pour connaitre l'adresse IP du serveur :

Code : Tout sélectionner

ip addr
Et regarder trouver votre IP qui devrait être de la forme :
192.168.x.x

Étape 2 - Installer et configurer PHP-FPM

FPM (FastCGI Process Manager) est une implémentation principale de PHP FastCGI contenant certaines fonctionnalités (pour la plupart) utiles pour les sites très chargés. Dans cette étape, nous allons installer les packages PHP-FPM et les configurer pour qu'ils fonctionnent avec le serveur Web Lighttpd.

Nous allons ici Installer seulement les packages nécessaires à PHP-FPM sur le système, d'autres modules PHP pourrons être installés (au besoin) dans le futur (voir en fin de tutoriel) :

Code : Tout sélectionner

apt install php-fpm
La commande installera automatiquement la dernière version de PHP-FPM 8.2 (au moment de ce tutoriel).

Code : Tout sélectionner

Les NOUVEAUX paquets suivants seront installés :
  php8.2-fpm php8.2-cli php8.2-common php8.2-opcache php8.2-readline php8.2-mysql
Souhaitez-vous continuer ? [O/n]
php-cli est l'outil autonome permettant d'exécuter des scripts PHP de la même manière que vous l'exécuteriez à partir de la ligne de commande : php monscript.php.

Vérifiez le service PHP-FPM à l'aide des commandes suivantes :

Code : Tout sélectionner

ps -ef | grep php
service php8.2-fpm status
Pour démarrez le service PHP-FPM et l'ajouter au démarrage du système :

Code : Tout sélectionner

systemctl start php8.2-fpm
systemctl enable php8.2-fpm
Le fichier de configuration php.ini se trouve dans le répertoire '/etc/php/8.2/fpm'.
Étape 3 - Configurer Lighttpd et PHP-FPM

Pour cette étape, nous allons configurer le Lighttpd avec PHP-FPM.

Allez maintenant dans le répertoire '/etc/lighttpd/conf-available' et vous obtiendrez quelques configurations.

Code : Tout sélectionner

cd /etc/lighttpd/conf-available/
Les configurations qui nous interresse sont « 10-fastcgi.conf » et « 15-fastcgi-php-fpm.conf », nous allons activer ces deux modules à l'aide de la commande lighttpd-enable-mod qui va créer un lien symbolique de la configuration du module dans '/etc/lighttpd/conf-available/' vers le répertoire '/etc/lighttpd/conf-enabled'.

Code : Tout sélectionner

sudo lighttpd-enable-mod fastcgi
sudo lighttpd-enable-mod fastcgi-php-fpm
Vous pouvez vérifier le répertoire '/etc/lighttpd/conf-enabled' et visualiser les nouvelles configurations :

Code : Tout sélectionner

ls -lah /etc/lighttpd/conf-enabled/
Pour appliquer cette nouvelle configuration, redémarrer le service Lighttpd :

Code : Tout sélectionner

sudo service lighttpd restart
Assurez-vous qu'il n'y a pas d'erreur.

Et par conséquent, la configuration de Lighttpd avec PHP-FPM s'est terminée avec succès.
Étape 4 - Test

On va maintenant tester la configuration de PHP, pour cela, nous allons créer un fichier "/var/www/info.php" dans lequel on va appeler une fonction PHP phpinfo() et on lui donne les droits d'accès au serveur :

Code : Tout sélectionner

echo "<?php phpinfo(); ?>" > /var/www/info.php
sudo chown -R www-data:www-data /var/www
Pour tester notre installation de PHP, appelons ce fichier dans le navigateur :

http://<ip-du-serveur>:<port-d-ecoute>/info.php ou par défaut http://localhost/info.php si vous êtes sur la machine locale.

Vous devriez voir apparaitre une page de votre configuration PHP-FPM.

Image

Étape 5 - Installer et configurer le serveur MariaDB

Dernière étapae, l'installation de MariaDB :

Code : Tout sélectionner

apt install mariadb-server
Une fois l'installation terminée, il est important de sécuriser votre installation MariaDB. La commande ci-dessous exécutera un script qui permet certaines mesures de sécurité :

Code : Tout sélectionner

mariadb-secure-installation
Lors de l'exécution du script ci-dessus, vous serez guidé à travers une série d'invites interactives conçues pour renforcer la sécurité de votre installation MariaDB. Ces invites incluent :

Définition d'un mot de passe root : Vous aurez la possibilité de définir un mot de passe pour le compte root, offrant ainsi une couche de protection supplémentaire.

Suppression des utilisateurs anonymes : le script vous aidera à supprimer tous les comptes d'utilisateurs anonymes, garantissant que seuls les utilisateurs authentifiés peuvent accéder aux bases de données, répondre Oui.

Interdire la connexion root à distance : vous serez invité à désactiver la connexion root à distance, empêchant ainsi tout accès non autorisé potentiel à partir de sources externes, répondre Oui.

Suppression de la base de données de test : le script aide à supprimer la base de données de test, qui est généralement accessible aux utilisateurs anonymes. Cette action élimine toutes les vulnérabilités de sécurité potentielles associées à la base de données de test, répondre Oui.

Rechargement des tables de privilèges : Une fois les mesures de sécurité nécessaires mises en œuvre, le script recharge les tables de privilèges pour appliquer efficacement les modifications, répondre Oui.

Pour connaître la version installée :

Code : Tout sélectionner

mariadb -v
[TODO]



Documentaion Lighttpd :
https://redmine.lighttpd.net/projects/1/wiki/docs

Documentation MariaDB :
https://mariadb.org/documentation/
Répondre