Créer un serveur Web

Un serveur Web nécessite un logiciel serveur qui répond aux requêtes formulées par un internaute sous le forme d'une url dans son navigateur.
Pour le Raspeberry Pi, le plus simple est d'utiliser la distribution Apache2, car elle fait partie des paquets installables par apt-get.

Installer Apache

L'installation du logiciel Apache est très simple. Il se peut même qu'il soit déjà installé sur le Raspberry Pi. Pour s'en assurer, on va extraire la liste des services déjà installés sur Rasbian :
pi@slave02:~ $ sudo service --status-all
 [ - ]  alsa-utils
 [ + ]  apache-htcacheclean
 [ + ]  apache2
 [ + ]  avahi-daemon
 [ - ]  bluetooth
 [ - ]  console-setup.sh
 [ + ]  cron
 [ + ]  dbus
 [ + ]  dhcpcd
 [ + ]  dphys-swapfile
 [ + ]  fake-hwclock
 [ - ]  hwclock.sh
 [ - ]  keyboard-setup.sh
 [ + ]  kmod
 [ + ]  netfilter-persistent
 [ + ]  networking
 [ - ]  nfs-common
 [ - ]  paxctld
 [ - ]  plymouth
 [ - ]  plymouth-log
 [ + ]  procps
 [ + ]  proftpd
 [ + ]  raspi-config
 [ - ]  rpcbind
 [ - ]  rsync
 [ + ]  rsyslog
 [ - ]  screen-cleanup
 [ + ]  ssh
 [ - ]  sudo
 [ + ]  triggerhappy
 [ + ]  udev
pi@slave02:~ $
Dans la liste ci-dessus, le service apache2 est installé et actif (à cause du plus entre crochets).
Si ce n'est pas le cas, il n’apparaît pas dans la liste. Il faut donc l'installer.
pi@slave02:~ $ sudo apt-get install apache2
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances
Lecture des informations d'état... Fait
The following additional packages will be installed:
  apache2-bin apache2-data apache2-utils libapr1 libaprutil1
  libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.2-0 ssl-cert
Paquets suggérés :
  www-browser apache2-doc apache2-suexec-pristine | apache2-suexec-custom
  openssl-blacklist
Les NOUVEAUX paquets suivants seront installés :
  apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1
  libaprutil1-dbd-sqlite3 libaprutil1-ldap liblua5.2-0 ssl-cert

. . .

Created symlink /etc/systemd/system/multi-user.target.wants/apache2.service → /lib/systemd/system/apache2.service.
Created symlink /etc/systemd/system/multi-user.target.wants/apache-htcacheclean.service → /lib/systemd/system/apache-htcacheclean.service.
Traitement des actions différées (« triggers ») pour libc-bin (2.24-11+deb9u3) ...
Traitement des actions différées (« triggers ») pour systemd (232-25+deb9u2) ...
pi@slave02:~ $

Tester l'installation

Pour tester si l’installation est correcte, il suffit de taper http://slave02 (slave02 étant le nom du Pi Zero sur lequel a été effectuée l'installation)  ou http://192.168.1.112 (l'adresse IP du serveur slave02) dans un navigateur connecté sur le même réseau que le Raspberry Pi. Si tout se passe bien, cela devrait afficher quelque chose qui ressemble à ceci, avec le traditionnel « It works » d’Apache :

Configurer Apache

Le contenu du site web se situe dans le dossier /var/www/html. Ce répertoire a été créé automatiquement à l'installation d'Apache. Mais il ne possède pas tous les droits pour qu'un utilisateur en modifie le contenu. Aussi est-il nécessaire lancer quelques commandes de configuration.
pi@slave02:~ $ sudo  chown -R www-data:www-data /var/www/html
pi@slave02:~ $ sudo usermod -a -G www-data pi
pi@slave02:~ $ groups pi
pi : pi adm dialout cdrom sudo audio www-data video plugdev games users input netdev spi i2c gpio
pi@slave02:~ $ sudo chmod -R g+ws /var/www/html
pi@slave02:~ $ ls -l /var/www
total 4
drwxrwsr-x 2 www-data www-data 4096 avril 28 16:46 html
pi@slave02:~ $ ls -l /var/www/html
total 12
-rw-rwSr-- 1 www-data www-data 10701 avril 28 16:46 index.html
pi@slave02:~ $

  • La première commande modifie le propriétaire du répertoire /var/www/html et de tout son contenu (option –R) pour que ce soit le groupe www-data.
  • La deuxième affecte le groupe www-data à l’utilisateur pi (pi est l'utilisateur par défaut du Raspberry Pi) 
  • La troisième commande permet de vérifier que l’utilisateur pi est bien membre du groupe www-data.
  • La quatrième commande modifie les droits sur le répertoire /var/www/html pour que les membres du groupe www-data puisse en modifier, voir en exécuter (dans le cas de PHP), le contenu.
  • La cinquième et la sixième commande permet de vérifier que les droits sont bien accordés au groupe www-data.

Modifier la page d'accueil

La page d'accueil d'un site web est la page web qui est appelée par défaut lorsque aucune page n'est mentionnée dans l'url de la requête. Pour Apache, c'est la page index.html. Par exemple, lorsque l'internaute  tape l'url http://slave02, Apache comprend http://slave02/index.html.
Il existe déjà une page index.html dans le répertoire /var/www/html. C'est celle qui a été créée à l'installation et qui affiche le fameux « It works » . Il vaut mieux faire une sauvegarde de cette page plutôt qu'en modifier le contenu, car elle contient des informations qui peuvent se révéler utiles pour l'utilisation et la configuration d'Apache. 
pi@slave02:~ $ cd /var/www/html
pi@slave02:/var/www/html $ mv index.html index.apache2.html
pi@slave02:/var/www/html $ ls
index.apache2.html
pi@slave02:/var/www/html $ nano index.html
pi@slave02:/var/www/html $
Puis, avec nano ou avec Geany, créer un nouveau fichier index.html et taper dedans le code html ci-dessous :
<html>
        <head>
        </head>
        <body>
                <h1>Page d'accueil de Slave02</h1>
        </body>
</html>
Si tout se passe bien, en tapant l’url http://slave02 dans un navigateur connecté au même réseau que le serveur slave02, le contenu de la page devrait s’affiche comme ci-dessous.

Modifier le port d'écoute

Le port d’écoute d’un serveur Web par défaut est le port 80. Cependant, on peut vouloir modifier ce port pour le remplacer par un port alternatif, en général 8080. C’est le cas pour un cluster de serveurs Web où les serveurs qui composent le cluster ne doivent pas répondre sur le port 80, mais sur un autre port, le proxy installé sur le contrôleur du cluster se chargeant de la redirection sur les serveurs et leurs ports d’écoute respectifs.
La première chose à faire c’est de signifier à Apache d’écouter le port 8080. Pour cela il faut modifier le contenu du fichier /etc/apache2/ports.conf.
# If you just change the port or add more ports here, you will likely also
# have to change the VirtualHost statement in
# /etc/apache2/sites-enabled/000-default.conf

Listen 8080

<IfModule ssl_module>
        Listen 443
</IfModule>

<IfModule mod_gnutls.c>
        Listen 443
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Tous les sites Web qui utilisent le port par défaut ne répondrons plus que sur le port 8080.
Malheureusement (ou heureusement), Apache2 permet la création d’hôtes virtuel dans la configuration desquels on peut aussi indiquer le port d’écoute. Si on veut aussi que tous les hôtes virtuels ne répondent que sur le port 8080, il faut, comme le suggère le commentaire du fichier ports.conf, aussi modifier les configurations de ces services dans le répertoire sites-available et sites-enabled. Les fichiers ont un nom de la forme xxx-default.conf.
L'utilisation des hôtes virtuels est suffisamment complexe pour faire l'objet d'article dédié. Ce qui sera fait ultérieurement.
<VirtualHost *:8080>
        # The ServerName directive sets the request scheme, hostname and port that
        # the server uses to identify itself. This is used when creating
        # redirection URLs. In the context of virtual hosts, the ServerName
        # specifies what hostname must appear in the request's Host: header to
        # match this virtual host. For the default virtual host (this file) this
        # value is not decisive as it is used as a last resort host regardless.
        # However, you must set it for any further virtual host explicitly.
        #ServerName www.example.com

        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html

        # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
        # error, crit, alert, emerg.
        # It is also possible to configure the loglevel for particular
        # modules, e.g.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined

        # For most configuration files from conf-available/, which are
        # enabled or disabled at a global level, it is possible to
        # include a line for only one particular virtual host. For example the
        # following line enables the CGI configuration for this host only
        # after it has been globally disabled with "a2disconf".
        #Include conf-available/serve-cgi-bin.conf
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Commentaires

Posts les plus consultés de ce blog

Gérer la mise en veille

Configurer VSCode pour programmer et déboguer à distance sur Raspberry Pi

Créer un nouvel utilisateur Raspbian