Le Raspberry Pi permet de se connecter facilement à un réseau Wifi, pour cela il peut être intéressant de créer un serveur Apache2 afin de créer une interface Web permettant de gérer votre Raspberry Pi. Un serveur web vous permet notamment, d’envoyer et recevoir des commandes web, de développer un site web local ou global ou encore créer une interface web permettant de configurer ou piloter votre Raspberry Pi à distance depuis un ordinateur ou un smartphone.
Dans ce tutoriel, nous allons voir comment configurer un seveur web Apache2 sur Raspberry Pi et comment créer une interface HTML accessible localement.
Matériel
- Raspberry Pi avec distribution raspbian
- Ordinateur avec accès distant ou Ecran+clavier+souris
Récupérer l’adresse IP et le nom d’hôte du Raspberry Pi
Lorsque vous travailler sur un système de réseau, il est important de connaître l’identifiant des appareils que vous utilisez. Dans le cas d’un serveur Apache2, nous aurons besoin de l’adresse IP et du nom d’hôte.
Pour récupérer, l’adresse IP, entrez la commande:
ifconfig
L’adresse IP(inet) se trouve sous wlan0 si votre Raspberry Pi est connecté au réseau par Wifi et sous eth0 s’il est connecté en filaire. Ici l’adresse IP 192.168.1.9
Pour récupérer le nom d’hôte, entrez la commande suivante dans un terminal:
hostname
Par défaut, le Raspberry Pi renvoie « raspberrypi », Vous pouvez modifier ce paramètre dans l’assistant de configuration raspi-config.
N.B: Il est fortement conseillé de modifier le hostname si vous utilisez plusieurs Raspberry Pi sur le même réseau
Installation d’Apache2
Pour installer le paquet Apache, il vous suffit d’entrer la commande suivante dans un terminal
sudo apt-get install apache2 -y
N.B: l’option -y permet d’accepter automatiquement l’installation.
Pour désinstaller le paquet, vous pouvez entrer la commande
sufo apt-get remove apache2 --purge
A ce stade vous pouvez vérifier qu’Apache est bien activé en entrant dans la barre de tâche d’un navigateur
raspberrypi.local
ou
192.168.1.9
N.B: mettez à jour avec le hostname et l’adresse IP correspondant à votre appareil. Si l’adresse <hostname>.local ne fonctionne pas vous devez installer et activer le service avahi
sudo apt-get install avahi-daemon
Modification des droits
Avant de continuer, il faut donner les droits d’accès en lecture et écriture au serveur et à vous même. Nous pourrons alors modifier les fichiers sans avoir à passer par le super utilisateur root.
Tout d’abord, nous ajoutons l’utilisateur au groupe www-data (groupe par défaut d’Apache)
sudo usermod -a -G www-data pi
Puis, nous donnons la propriété du dossier au groupe www-data
sudo chown -R -f www-data:www-data /var/www/html
Résultat avec ls -l pour voir les droits d’accès
pi@raspberrypi:~ $ ls -l /var/www/
total 4
drwxr-xr-x 2 www-data www-data 4096 mai 16 17:33 html
Enfin, entrez cette ligne de code pour pouvoir créer et modifier les fichiers facilement
sudo chmod -R 775 /var/www/html/
Installation de PHP
Pour rendre votre page web dynamique, il est nécessaire d’utiliser l’interpréteur PHP
Pour installer les paquets nécessaires à l’utilisation de PHP, entrez la commande suivante
sudo apt-get install php7.3 php7.3-mbstring php7.3-mysql php7.3-curl php7.3-gd php7.3-zip -y
N.B: la version 7.3 est la dernière version disponible sur repo Raspbian. Il vous est possible d’installer des versions plus récentes de php en compilant vous-même les sources.
Si PHP ne fonctionne pas. Vous pouvez essayer ces deux lignes de code.
sudo a2dismod mpm_event
sudo a2enmod php7.3
sudo systemctl restart apache2
La première désactive mpm_event en conflit avec mpm_prefork et la deuxième active php qui dépend de mpm_prefork
Création d’une page Web
Pour tester l’installation, nous allons créer une simple page web qui affiche certaines info du Raspberry Pi. Pour cela, nous allons exécuter des commandes shell à l’aide de PHP et de la fonction exec().
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>MyRPi Webpage</title> <style> div{ display:block; margin:auto; } label{ display: inline-block; width:80px; } input[type=text]{ width:200px; } table, th, td { border: 1px solid black; border-collapse: collapse; padding:5px; } </style> </head> <body> <div style="width:90%;margin:auto;"> <div id="icon" style="border-bottom: 3px solid #3aaa35; "> <img src="https://i0.wp.com/www.aranacorp.com/wp-content/uploads/logo-100.png"/> </div> <div> <h1>RPi Info</h1> <p><?php echo "Date ".date('Y-m-d H:i:s') ; ?></p> <table> <tr> <th>Info</th> <th>Command</th> <th>Value</th> </tr> <!-- hardware and os info --> <tr> <td>Hardware</td> <td>cat /sys/firmware/devicetree/base/model</td> <td> <?php echo shell_exec('cat /sys/firmware/devicetree/base/model'); ?> </td> </tr> <tr> <td>OS</td> <td>uname -o</td> <td> <?php echo shell_exec('uname -o'); ?> </td> </tr> <tr> <td>Architecture</td> <td>uname -m</td> <td> <?php echo shell_exec('uname -m'); ?> </td> </tr> <tr> <td>OS version</td> <td>. /etc/os-release; echo $PRETTY_NAME</td> <td> <?php echo shell_exec('. /etc/os-release; echo $PRETTY_NAME'); ?> </td> </tr> <!-- hostname info --> <tr> <td>Hostname</td> <td>hostname</td> <td> <?php echo shell_exec('hostname'); ?> </td> </tr> <tr> <td>IP Address</td> <td>hostname -I</td> <td> <?php echo shell_exec('hostname -I'); ?> </td> </tr> <!-- GPU/CPU info --> <tr> <td>GPU temperature</td> <td>vcgencmd measure_temp</td> <td> <?php $output=exec('vcgencmd measure_temp'); $output = str_replace('temp=','',$output); $output = str_replace('\'C','',$output); echo $output;?> </td> </tr> <tr> <td>ARM CPU temperature</td> <td>cat /sys/class/thermal/thermal_zone0/temp</td> <td> <?php $output=exec('cat /sys/class/thermal/thermal_zone0/temp'); echo $output/1000; ?> </td> </tr> <tr> <td>ARM Clock</td> <td>vcgencmd measure_clock arm</td> <td> <?php $output=exec('vcgencmd measure_clock arm'); echo $output; ?> </td> </tr> </table> </div> </div> </body> </html>
Résultat
En entrant l’url raspberry.local/exemple.php dans le navigateur de votre ordinateur, la page suivante devrait apparaitre.
Résolutions des problèmes courants
Si Apache2 a du mal à redémarrer
vérifier que Nginx ne tourne pas en même temps
sudo systemctl stop nginx
Vous pouvez aussi le désinstaller, si vous n’en avez pas besoin
sudo apt-get purge nginx
Si les commandes Linux ne sont pas lancés par PHP
comme vcgencmd, vous pouvez ajouter www-data au groupe vidéo puis redémarrer
sudo usermod -G video www-data