Comment Installer un Serveur Web sur Raspberry Pi ?


C’est une question de base que vous risquez de vous poser souvent, pour des projets variés
En tant que développeur web, cela m’arrive souvent de me lancer dans des projets web et je suis habitué à cette installation, mais je peux comprendre que ce ne soit pas évident pour tout le monde

Comment installer un serveur web sur Raspberry Pi ? (Apache / PHP / MySQL)
Afin de transformer votre Raspberry Pi en serveur LAMP complet, il vous faudra installer 3 services : Apache, PHP et MySQL
Apache pour répondre aux requêtes HTTP, PHP pour générer du contenu dynamique et MySQL pour lire et stocker dans une base de donnée
Tout est disponible dans les dépôts Raspbian directement

Dans ce tutoriel, je vais vous expliquer comment installer et configurer tout cela pour qu’ils fonctionnent ensemble
Je vous donnerai aussi quelques astuces suivant ce dont vous avez besoin

Comment ça marche ?

Avant d’aller plus loin dans l’installation des logiciels, j’aimerais m’assurer que tout le monde comprend ce qu’on est en train de faire, et donc le fonctionnement d’un serveur web

Apache

L’objectif principal du service Apache sera de répondre aux requêtes HTTP et HTTPS qui arriveront sur le Raspberry Pi
HTTP et HTTPS sont les protocoles principaux pour le surf sur le web
Cela fonctionne car Apache est là pour répondre aux demandes des navigateurs sur les ports 80 et 443

Apache reçoit une requête sur http://IP et doit afficher quelque chose en réponse, suivant comment il a été configuré
Par exemple, c’est la page HTML du site ou de l’application que vous utilisez sur votre Raspberry Pi

HTML est un langage de programmation, qu’Apache va retourner et que les navigateurs web sont capables de lire afin de les transformer en page web compréhensible pour nous

PHP

PHP apporte du contenu dynamique aux pages web
HTML est un langage statique que vous pouvez améliorer avec du code PHP pour que votre page soit différente suivant certains facteurs (langue du visiteur, historique du visiteur, date du jour, etc.)

Voilà ce qu’il se produit lorsqu’un visiteur vient sur votre page :

  • PHP compile le code PHP présent sur la page
  • PHP génère un code HTML à partir de ce code PHP
  • Apache affiche toujours du code HTML, mais cette fois PHP sera passé avant pour l’affiner suivant les besoins

Je vous donnerai des exemples plus concrets par la suite pour vous aider à bien comprendre

MySQL

MySQL est une façon de gérer une base de donnée sur un serveur web, pour enregistrer les données nécessaires au fonctionnement du site
Par exemple sur RaspberryTips il y a une base de donnée qui contient tous les articles, tous les liens des images, etc.

MySQL se décompose en 3 éléments :

  • Un serveur, pour enregistrer les données dans des fichiers et répondre aux requêtes
  • Un client, pour se connecter au serveur, que ce soit en local ou à distance
  • Un langage spécifique (SQL), qui permet par exemple d’écrire les requêtes nécessaires afin de récupérer les données voulues

Comment installer les éléments d’un serveur Web ?

À cette étape, vous savez déjà à quoi sert chaque paquet, et si vous avez besoin de tout ou non
Si vous souhaitez simplement afficher des pages web statiques par exemple, alors Apache seul est suffisant
Ou si vous voulez des pages dynamiques, mais sans stockage de données, alors Apache et PHP suffiront, MySQL ne sera pas nécessaire pour vous
Je vous laisse faire votre choix et passer les étapes inutiles dans votre cas

Avant de démarrer, voici les deux pré-requis :

Installer Apache

La première étape sera d’installer Apache sur votre Raspberry Pi
Pour ce faire, utilisez apt de cette manière :
sudo apt install apache2

Vérifions ensuite que cela fonctionne correctement :

Comme vous pouvez le voir sur cette page, les pages web sont à placer dans le dossier /var/www/html sur le Raspberry Pi
Vous pouvez éditer le fichier index.html pour changer cette page, ou en ajouter de nouvelles dans le même dossier

Vous pouvez aussi simplement supprimer cette page et envoyer vos fichiers dans ce dossier
Par exemple, si vous souhaitez juste partager des logiciels sur votre réseau, supprimez le fichier index.html et transférés les logiciels dans /var/www/html
Apache générera automatiquement une page web avec la liste des fichiers et les liens pour les télécharger

Installer PHP

Ensuite nous devons installer PHP pour ajouter la possibilité de créer du contenu dynamique sur notre serveur web

Installation

Pour installer PHP, vous aurez besoin de 2 paquets supplémentaires :
sudo apt install php libapache2-mod-php

Le premier ajoute le paquet de base pour PHP et la possibilité de lancer des scripts PHP depuis le terminal
Le second va vous permettre d’inclure du code PHP dans vos pages web

Votre première page PHP

Nous allons maintenant vérifier que tout fonctionne bien avec notre installation avant d’aller plus loin
Suivez les étapes suivantes pour créer un fichier PHP et le tester dans votre navigateur :

  • Rendez-vous dans le dossier web d’Apache
    cd /var/www/html
    Vous pouvez aussi utiliser un logiciel comme FileZilla ou WinSCP, et créer le fichier sur votre ordinateur avant de le transférer ici (pour ceux qui ont du mal avec les commandes)
  • Créez un fichier PHP :
    sudo nano test.php
  • Copiez les lignes suivantes à l’intérieur :
    <?php
    phpinfo();
    ?>

    Il s’agit d’une fonction de base affichant la configuration PHP dans le navigateur
  • Sauvegardez et quittez nano (CTRL+O, CTRL+X)
  • Rendez-vous ensuite dans votre navigateur, et ouvrez la page http://IP/test.php
  • Cela devrait afficher quelque chose du genre :

Si vous avez pu voir cette page, c’est que tout est OK, vos serveurs Apache et PHP sont prêts
Continuons avec MySQL (si nécessaire)

Installer MySQL

La dernière partie de notre serveur est MySQL, et à nouveau nous allons utiliser apt pour l’installer :
sudo apt install mysql-server php-mysql

Le second paquet ajouter la possibilité d’utiliser MySQL dans votre code PHP directement
Il faudra redémarrer Apache pour appliquer les changements :
sudo service apache2 restart

Créer le premier utilisateur MySQL

MySQL permet d’enregistrer des données. Une authentification est nécessaire pour être sûr que seul les personnes autorisées puissent y accéder
Afin de démarrer rapidement, nous allons créer un super utilisateur que vous utiliserez ensuite dans le code PHP
Mais il est conseillé de créer des utilisateurs différents, avec uniquement les privilèges nécessaires

  • Connectez-vous à la console MySQL
    sudo mysql
  • Créez une première base de donnée
    CREATE DATABASE test;
  • Créer votre premier utilisateur
    CREATE USER 'webuser' IDENTIFIED BY 'password';
    Pensez bien à remplacer « password » par un mot de passe compliqué dès maintenant, vous risquez d’oublier ensuite
  • Ajoutez-lui les permissions d’accéder à la base de donnée test :
    GRANT ALL PRIVILEGES ON test.* To 'webuser'@'localhost' IDENTIFIED BY 'password';
  • Appliquer les modifications :
    FLUSH PRIVILEGES;
  • Quittez la console MySQL
    quit

Créer une première table dans la base de donnée

Maintenant que nous avons notre base de donnée et un utilisateur autorisé, nous allons vérifier que tout fonctionne en créant une première table dans cette base de donnée, afin de l’utiliser plus tard dans du code PHP

Si vous êtes débutant concernant les concepts de base de donnée, imaginez qu’une base de donnée et un fichier Excel, et que chaque page est un onglet différent. Chaque table nous permettra de stocker des données différentes

  • Retournez dans la console MySQL, cette fois en utilisant notre nouveau compte :
    mysql -uwebuser -ppassword test
  • Créer une table toute simple :
    CREATE TABLE IF NOT EXISTS test (
    line_id INT AUTO_INCREMENT,
    data VARCHAR(255) NOT NULL,
    PRIMARY KEY (line_id)
    );

    Évidemment, cette table est inutile, c’est juste pour le test. Mais si vous souhaitez commencer par une table dont vous avez besoin, n’hésitez pas
    Appuyez sur « Entrée » pour exécuter la requête
  • Insérez une ligne dedans :
    INSERT INTO test (data) VALUES ("This is a test string in my database");
    Nous avons donc ajouté notre première ligne dans cette table, avec le mot « test » dans le champ « data »
    Oui oui je suis très créatif 🙂
  • Quittez MySQL :
    quit

Maintenant que nous avons tout ce qu’il nous faut (utilisateur, base, table), nous pouvons passer à la partie PHP

Votre premier script PHP en lien avec MySQL

Voici comment créer un fichier PHP qui affichera les données de la base :

  • Rendez-vous à nouveau dans le dossier Apache :
    cd /var/www/html
  • Créez un nouveau fichier PHP :
    sudo nano test-mysql.php
  • Coller les lignes suivantes à l’intérieur :
<?php
$link = mysqli_connect("127.0.0.1", "webuser", "password", "test");
if($link) {
  $query = mysqli_query($link, "SELECT * FROM test");
  while($array = mysqli_fetch_array($query)) {
    echo $array['data']."<br />";
  }
}
else {
  echo "MySQL error :".mysqli_error();
}
?>

Éditez la première ligne afin de mettre à jour l’utilisateur et le mot de passe si nécessaire
Sauvegardez et quittez (CTRL+O, CTRL+W)
Testez à nouveau dans votre navigateur : http://IP/test-mysql.php
Cela devrait afficher le contenu de votre table

Nous y voilà, vous savez maintenant comment installer un serveur web basique et créer une première page pour vous connecter à MySQL et afficher quelque chose provenant de la base de donnée
À vous de jouer maintenant, adaptez le code PHP et la base de donnée pour faire ce dont vous avez besoin

Astuces supplémentaires

Pour terminer, je vais vous donner deux astuces pour améliorer votre serveur web ou le rendre plus simple à gérer

PhpMyAdmin

Dans cet article, nous avons fait toutes les modifications dans la base de donnée MySQL manuellement, en exécutant les requêtes permettant de créer les utilisateurs, de leur donner des droits ou d’insérer des données
Mais il existe un outil très répandu et beaucoup plus rapide / pratique pour faire cela : PhpMyAdmin

Il s’agit d’un outil gratuit, vous donnant accès à une page web pour la gestion de votre serveur MySQL
Voici comment l’installer :

  • Installez le paquet avec apt :
    sudo apt install phpmyadmin
  • Pendant l’installation, choisissez ces deux options :
    • Choisir Apache2 (appuyez sur espace puis entrée)
    • Configurer la base de donnée PhpMyAdmin avec db-common: non
  • Après l’installation, rendez-vous sur http://IP/phpmyadmin
  • Connectez-vous avec l’utilisateur créé précédemment
  • Vous trouverez ici notre base de donnée dans le menu, avec la table « test » à l’intérieur, et les données s’affichent à droite
    Cela ressemble à ça :
  • Vous trouverez également à droite un menu intuitif pour faire ce que vous voulez dans cette base de donnée

Virtual hosts

Si vous avez besoin d’héberger plusieurs sites ou applications sur votre Raspberry Pi, il existe deux possibilités :

  • Créer des sous dossiers dans /var/www/html et y accéder via une url qui inclue le dossier en question
    Par exemple : http://IP/dossier1 et http://IP/dossier2
  • Ou alors utiliser les virtual hosts de Apache pour avoir des adresses plus propres comme http://app1.mondomaine.com et http://app2.mondomaine.com

Si vous souhaitez utiliser les virtual hosts, vous aurez besoin de :

  • Créer les sous-domaines dans votre serveur DNS ou dans le fichier hosts de votre ordinateur
  • Puis créer les virtual hosts dans la configuration Apache, un pour chaque sous-domaine

La configuration est à faire dans le dossier /etc/apache2/sites-enabled
Vous trouverez plus d’informations ici concernant la syntaxe à utiliser

Conclusion

J’espère que cet article vous aura été utile et que vous avez compris comment installer un serveur Web sur votre Raspberry Pi
Il s’agit d’un guide principalement pour les débutants (ou en rappel), mais j’essayerai d’écrire davantage sur le sujet à l’avenir

Patrick Fromaget

Je suis l'auteur principal et le créateur de RaspberryTips. Mon but est de vous aider sur tous vos problèmes qui concernent Raspberry Pi and publiant des guides détaillés et des tutorials rapides. Dans la vraie vie, je suis administrateur système (Linux principalement) avec un expérience dans le développement web.

Recent Content