Note : Pour pouvoir faire ce TP, il faut avoir fait les TP « héberger une page web », « enregistrer un nom de domaine pour votre conteneur », « virtualhost » et « TLS ». Les objectifs opérationnels et pédagogiques de ce TP sont décrits en bas de la page.
Un site web dynamique est un site dont les pages web ne sont pas de simples fichiers statiques, mais sont générées à la demande.
Le serveur web nginx
ne sait pas faire ça, il va déléguer à un autre processus la fabrication de la page avant de l'envoyer au client.
La communication entre le serveur web et ce processus peut se faire au moyen d'un socket UNIX ou un socket Berkeley.
Le cas le plus courant qu'on va traiter en premier est celui d'un script écrit dans le langage PHP. Un démon, nommé php-fpm
va tourner sur le conteneur. Lorsque un client HTTP demande au serveur web nignx
de lui servir une page dont le nom finit par .php
, celui-ci ne va pas lui envoyer le contenu de ce fichier, mais il va demander au démon php-fpm
de fabriquer une page HTML en interprétant le fichier écrit en PHP, et c'est cette page HTML qui sera envoyée au client.
php-fpm
.ss
, identifiez le ou les moyens de communication ouverts par défaut avec le processus correspondant à php-fpm
.ls -l
.nginx
contient un bloc commenté permettant de communiquer de deux façons évoquées plus haut.Vous pouvez écrire votre propre script PHP ou en trouver sur le web. Les sites web sont en général plus complexes qu'un seul script. Il y a en général des fichiers statiques directement envoyés par nginx
, des templates, des fichiers de données, des fichiers de configuration, et plusieurs scripts avec l'éxtension .php
qui vont être interptétes par php-fpm
. Il existe de nombreux générateurs de sites web écrits en PHP.
Voici quelques exemples de générateurs de sites web en PHP ne nécéssitant pas de base de données, trouvées au hasard sur le web et qui semblent faciles à installer :
Les données utilisées par les scripts (les articles du site, les pages de blog, les infos personnelles des users, etc) sont souvent stockées dans une base de données. Ces bases de données sont souvent accédées via un démon qui écoute sur le réseau (socket Berkeley) et répond à des requêtes. C'est le cas par exemple des systèmes de gestion de bases de données comme MySQL, PostgreSQL, MariaDB,
Redis, MongoDB, ...
. L'utilisation de sockets Berkeley plutôt que socket UNIX est liée au fait que souvent le serveur web et le gestionnaire de base de données ne sont pas exécutés sur le même système. Il y a plusieurs raisons : d'une part on peut imaginer que plusieurs serveurs web utilisent la même base de données. Par ailleurs, on veut éviter que si le serveur web se fait attaquer, les données soient mises en danger (en général le système qui héberge le gestionnaire de bases de données n'est pas directement accessible depuis internet).
Pour pouvoir être réactif, ce démon conserve souvent beaucoup de données en RAM (cache). Pour ne pas surcharger la machine hôte avec 140 tels démons, on peut essayer d'éviter de dépendre de telles bases de données. Les alternatives sont :
sqlite3
, qui ne réside pas en RAM, mais dans un fichier régulier.flat files
, no
database
.Bien sur, si vous voulez utiliser une application qui repose sur un système de gestion de bases de données, n'hésitez pas !
Wordpress est le générateur de sites web le plus déployé au monde. Il est écrit en PHP. Si vous voulez le déployer sur votre conteneur, essayez de le faire marcher avec une base de données sqlite3
et tenez-nous au courant : https://make.wordpress.org/core/2022/12/20/help-us-test-the-sqlite-implementation/
Le démon php-fmp
permet uniquement d'exécuter des scripts écrits dans le langage PHP.
Or il existe d'autres langages pour la programmation web, par exemple Javascript/nodejs, Python, etc
Un démon plus flexible que php-fpm
est par exemple uwsgi
(très utilisé pour les applications écrites en Python).
Il est aussi possible que le générateur de site web écoute directement sur un socket UNIX ou un port réseau (souvent le cas pour les applications écrites en nodejs
).
Lorsque vous avez un site web dynamique qui tourne, vous pouvez ajouter webdynamique
à vos tags.
Objectifs du TP :
objectifs opérationnels du TP :
- finir l'année en beauté, en hébergeant un site web dynamique
objectifs pédagogiques du TP :