Faire tourner un serveur Web en local

Sommaire

Un serveur Web est dit local quand il n’est pas accessible hors de notre réseau privé. On le fait tourner sur sa propre machine, par exemple pour tester un site sur lequel on travaille. D’autres machines de notre réseau peuvent éventuellement se connecter.

Pour se livrer à des expériences simples en local, il est probablement inutile de faire tourner des serveurs tels que Apache ou Nginx : bien que très utilisés, ils sont difficiles à prendre en main.

On se tournera plutôt vers le serveur fourni par le module http.server du langage Python 3, ou celui que propose PHP : il n’est besoin d’aucune configuration, une unique ligne de commande suffit à les lancer.

Attention : Les pages de documentation de Python et PHP insistent sur le fait que leur serveurs Web ne sont proposés qu’à des fins de développement, et qu’ils sont à proscrire pour un passage en production.

Les exemples fournis ici ont été testés sur Debian et sur macOS.

Un serveur avec Python

Consulter la page de documentation de Python concernant le module http. server

Lancer le serveur

On lance le serveur avec la ligne suivante :

$ python3 -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

(Avec Python 2, il faut utiliser la commande python2 -m SimpleHTTPServer.)

Par défaut, le serveur écoute sur le port 8000 et sert les fichiers depuis le répertoire courant.

On accède au site par les adresses http://0.0.0.0:8000, http://127.0.0.1:8000 ou http://localhost:8000.

Regarder les codes de réponse HTTP

Si on lance une requête pour un fichier qui existe, la ligne suivante s’affiche dans le terminal – on y retrouve le code 200 renvoyé par le serveur à son client :

127.0.0.1 - - [15/Feb/2023 20:18:32] "GET /fichier_qui_existe.html HTTP/1.1" 200 -

Une requête pour un fichier qui n’existe pas renvoie le code 404 :

127.0.0.1 - - [15/Feb/2023 20:20:24] "GET /fichier_qui_n_existe_pas.html HTTP/1.1" 404 -

Arrêter le serveur

On arrête le serveur avec la combinaison de touches Ctrl-C.

Changer de port ou de répertoire racine

On peut indiquer via la ligne de commande un port autre que 8000 :

$ python3 -m http.server 7999
Serving HTTP on 0.0.0.0 port 7999 (http://0.0.0.0:7999/) ...

Depuis la version 3.7 de Python, l’argument --directory permet d’indiquer un répertoire depuis lequel le site sera servi :

$ python3 -m http.server --directory /un/répertoire
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8001/) ...

Contacter le serveur depuis le réseau local

Si l’on connaît l’adresse IP locale de notre ordinateur , on peut consulter le site depuis un autre poste connecté au réseau : il suffit de remplacer, dans l’adresse de la page Web, le nom de domaine localhost par l’adresse de la machine sur laquelle tourne le serveur – par exemple http://192.168.1.54:8000.

(Sur Debian, on peut trouver son adresse IP locale en lançant les commandes ip a ou hostname -I dont la sortie est plus simple à lire.)

Un serveur avec PHP

Consulter la page de documentation de PHP concernant son serveur Web interne

Contrairement à Python, PHP est rarement installé par défaut sur un ordinateur. Mais son serveur Web, contrairement à celui de Python, peut – et ce n’est pas une grande surprise – interpréter du PHP. Aussi est-il parfois utile de l’avoir sous la main.

Installation minimale de PHP sur Debian

La documentation de PHP contient une page d’indications pour installer PHP sur Debian. N’ayant pas besoin de faire interagir PHP avec un serveur tel qu’Apache ou avec un système de gestion de base de données tel que MySQL, on peut se contenter d’installer le paquet php-cli :

$ sudo apt update && sudo apt install php-cli

La commande apt install signale qu’elle installera les paquets suivants (exemple d’une installation faite le 2024-11-12) :

Les NOUVEAUX paquets suivants seront installés :
  php-cli php-common php8.2-cli php8.2-common php8.2-opcache
  php8.2-readline

Lancer le serveur

On crée un répertoire vide, dont on fait le répertoire courant :

$ mkdir rep-site-php-local && cd $_

On crée une page d’accueil avec du code PHP :

printf '<?php echo "Bonjour !" ?>' > index.php

Puis on lance le serveur – il faut utiliser l’option -S et indiquer l’adresse et le port :

$ php -S localhost:8000
[Tue Nov 12 07:19:44 2024] PHP 8.2.24 Development Server (http://localhost:8000) started

On navigue à l’adresse http://localhost:8000 : si on lit le mot « Bonjour ! », c’est que le serveur fonctionne et peut interpréter du code PHP.

On arrête le serveur avec la combinaison de touches Ctrl-C.

Servir le site sur le réseau local

Pour rendre le site accessible aux autres machines du réseau local, il faut remplacer localhost par 0.0.0.0. Par exemple :

php -S 0.0.0.0:8000`.

Servir le site depuis un autre répertoire que le répertoire courant

L’option -t permet de servir le site depuis un autre emplacement que le répertoire courant :

$ php -S localhost:8000 -t /un/répertoire