Site icon AranaCorp

Configurer un serveur Apache2 sur Raspberry Pi

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

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

Quitter la version mobile