Web dynamique

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.

Introduction

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.

PHP et PHP-FPM

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.

  1. Installez le paquet php-fpm.
  2. À l'aide de la commande ss, identifiez le ou les moyens de communication ouverts par défaut avec le processus correspondant à php-fpm.
  3. Vérifiez votre hypothèse à l'aide de la commande ls -l.
  4. La configuration par défaut de nginx contient un bloc commenté permettant de communiquer de deux façons évoquées plus haut.
  5. Faites un nouveau virtualhost en ajoutant le bloc de configuration adapté à la situation.

Générateurs de sites web

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 :

  1. choisissez un générateur de sites web écrit en PHP et ne demandant pas de base de données, et faites le fonctionner sur votre conteneur. Vous pouvez en chercher vous-même sur le web.

Base de données

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 :

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 !

Mais moi je veux un wordpress

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/

Au delà de PHP

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

  1. Si vous hébergez un site web dynamique, notez son URL sur votre page wiki en indiquant quel générateur vous avez installé.

Lorsque vous avez un site web dynamique qui tourne, vous pouvez ajouter webdynamique à vos tags.

Objectifs du TP :