Tutoriel : héberger un site sur un Raspberry Pi

2022-06-28
Dans l’article de la semaine dernière, nous avons vu que le Raspberry Pi, grâce à son prix abordable et sa consommation électrique raisonnable, pouvait être une très bonne alternative à la location d’un serveur pour héberger nos projets web. Il est maintenant temps de rentrer un peu dans les détails techniques ! Nous allons voir ensemble comment charger le système d’exploitation sur votre Raspberry Pi, quels logiciels nous devons installer & comment les configurer, et comment rendre notre site accessible depuis Internet !

Matériel nécessaire pour suivre ce tutoriel :

  • Un Raspberry Pi
  • Son câble d’alimentation
  • Une carte microSD
  • Un clavier, une souris, un câble ethernet, un écran ou une TV et un câble HDMI (on peut se passer de ces accessoires, mais c’est un peu plus compliqué)

💡 Vous pouvez vous procurer un Raspberry Pi d’occasion ! En plus d’être une démarche écologique, ce sera peut-être la seule solution pour vous procurer un Raspberry Pi au moment où j’écris ces lignes : en effet, la pénurie de semi-conducteurs que nous subissons depuis plusieurs mois a fortement impactée la production et donc la disponibilité du Raspberry Pi.

Nous allons voir dans cet article comment installer une pile LAMP, pour Linux, Apache, MariaDB et PHP. GNU/Linux est le système d’exploitation, c’est le logiciel qui permet de faire fonctionner un ordinateur (comme Windows ou MacOS, donc). Apache est un serveur web, qui permet de servir des pages web aux visiteurs de notre site. MariaDB est un système de gestion de bases de données, utile si les projets que nous souhaiterons héberger auront besoin d’une base de données. Nous installerons aussi Adminer, qui permet d’administrer facilement MariaDB. Et pour finir, PHP est un langage de développement web, et nous devrons installer son interpréteur pour pouvoir héberger nos projets codés en PHP.

💡 Si vous souhaitez héberger des projets développés avec un autre langage que PHP (JavaScript, Python, Ruby, Rust, ce que vous voulez !) vous devrez installer des logiciels différents. Nous ne pourrons pas couvrir tous les langages dans un seul article, mais vous trouverez des ressources en ligne pour vous guider 😉

Charger le système sur la carte SD

La fondation Raspberry Pi met à disposition un outil pour charger Raspberry Pi OS sur la carte microSD : Raspberry Pi Imager. Vous pouvez le télécharger ici.

Une fois dans l’outil Raspberry Pi Imager, choisissez le système « Raspberry Pi OS (32-bit) », sélectionnez votre carte SD (⚠️ attention, ne vous trompez pas ! Si vous sélectionnez le mauvais périphérique celui-ci sera éffacé !) puis cliquez sur écrire.

raspberry pi page acceuil

Une fois le système installé sur la carte SD, vous pourrez l’éjecter, l’insérer dans votre Raspberry Pi, et connecter l’alimentation, le câble ethernet, un clavier et un écran.

Vous devriez arriver sur l’écran visible sur la capture d’écran ci-dessous. Ouvrez un terminal en cliquant sur l’icône entourée en rouge dans la barre du haut.

RPI écran ordi

Toutes les commandes données dans la suite de cet article seront à taper dans ce terminal.

set keyborad RPI

Pas d’écran ? Pas de câble ethernet ? Pas de problème !

Si vous n’avez pas d’écran, vous pourrez installer & configurer les différents logiciels sur votre Raspberry Pi par SSH. Pour activer le SSH par défaut, il faudra regarder du coté des options avancées de Raspberry Pi Imager.

Idem pour le WiFi, vous pourrez le configurer depuis les options avancées de Raspberry Pi Imager. Pour ne pas surcharger cet article, ces options de configuration avancées ne seront pas décrites ici (mais vous pourrez trouver de nombreuses ressources sur internet).

Configuration initiale

Avant d’aller plus loin, il faut qu’on configure un peu notre Raspberry Pi. Nous allons commencer par passer le clavier en Azerty (par défaut, il est en Qwerty).

Pour cela, ouvrez l’utilitaire Raspberry Pi Configuration depuis le menu en haut à gauche :

préférences RPI

Cliquez ensuite sur l’onglet Localisation, puis sur le bouton Set Keyboard…, sélectionnez French dans les deux menus déroulants, puis cliquez sur OK.

D’autres options utiles sont disponibles dans cet outil de configuration, mais nous ne les aborderont pas dans cet article. Vous pouvez maintenant fermer l’utilitaire de configuration.

⚠️ Par défaut, on peut se connecter au Raspberry Pi avec le nom d’utilisateur pi et le mot de passe raspberry. Pour plus de sécurité, nous allons changer le mot de passe de l’utilisateur pi.

Lancez la commande passwd dans le terminal que nous avons ouvert précedemment. Tapez votre mot de passe actuel (attention, les caractères n’apparaissent pas à l’écran) puis choisissez un nouveau mot de passe (vous devrez le taper deux fois).

RPI file edit

Nous pouvons maintenant passer à l’installation des différents logiciels de notre pile LAMP !

Installation & configuration des logiciels

Apache & PHP

Pour installer Apache, lancez les commandes suivantes dans le terminal :

sudo apt update
sudo apt install apache2 libapache2-mod-php php -y

À ce stade, Apache & PHP devraient être installés. Vous pouvez le vérifier en ouvrant un navigateur (en cliquant sur le bouton entouré en rouge sur la capture suivante) sur le Raspberry Pi et en vous rendant sur l’URL http://localhost.

Si tout s’est bien passé, vous devriez voir la page suivante :

apache RPI

Sur un autre PC ou smartphone connecté sur le même réseau, vous pouvez consulter cette page en vous rendant sur http://adresse-ip-rpi/.

Vous pouvez obtenir l’adresse IP de votre RPi sur votre réseau local avec la commande ip -4 a. L’adresse IP est surlignée dans la capture d’écran ci-dessous :

IP RPI

⚠️ Sur la capture d’écran ci-dessus et les suivantes, mon terminal ne ressemble pas à celui que vous aurez sur votre Raspberry Pi ! N’y prêtez pas attention, j’étais connecté en SSH pour la suite de ce tutoriel.

Pour vérifier que PHP est bien installé, nous allons créer un fichier de test à la racine du serveur d’Apache, dans le dossier /var/www/html.

Nous devons d’abord donner les droits d’écriture dans ce dossier à l’utilisateur pi avec les commandes suivantes :

sudo chown -R www-data:pi /var/www/html
sudo chmod -R 775 /var/www/html

Créez ensuite le fichier de test avec la commande echo "<?php phpinfo();" > /var/www/html/info.php, puis rendez-vous à l’adresse http://localhost/info.php depuis le navigateur sur votre RPi ou à l’adresse http://adresse-ip-rpi/info.php depuis un autre ordinateur sur votre réseau local.

Vous devriez arriver sur une page similaire à celle visible ci-dessous :

PHP version RPI

On peut remarquer qu’au moment où j’écris ces lignes, PHP est installé en version 7.4 par défaut sur Raspberry Pi OS. Il est aussi possible d’installer PHP 8, vous trouverez de nombreuses ressources expliquant comment le faire sur internet.

⚠️ Le fichier info.php que nous venons de créer ainsi que la page par défaut d’Apache index.html devront être supprimés par la suite. Pour des questions de sécurité, il faut absolument éviter de laisser de tels fichiers sur un serveur web, afin de ne pas divulguer trop d’informations à d’éventuels pirates. Pour ce faire, vous pouvez lancer les commandes suivantes :

rm /var/www/html/info.php
rm /var/www/html/index.html

MySQL & Adminer

Installons maintenant MySQL, ou plutôt son remplaçant MariaDB. Lancez pour cela la commande sudo apt install mariadb-server php-mysql -y.

Pour terminer la configuration de MariaDB, nous allons utiliser un utilitaire livré avec. Lancez la commande sudo mysql_secure_installation.

Cet utilitaire est interactif, et va commencer par vous demander l’actuel mot de passe root du serveur MariaDB. Nous n’en avons pas défini pour l’instant, appuyez donc simplement sur la touche entrée.

À la question « switch to unix_socket authentification », tapez n et appuyez sur entrée :

RPI Installation 1

La question suivante nous demandera si on veut changer le mot de passe de l’utilisateur root, à celle-ci nous allons répondre Y ! (tapez Y et appuyez sur entrée)

RPI installation 2

Vous allez devoir taper votre mot de passe deux fois, attention comme tout à l’heure les caractères du mot de passe ne s’affichent pas !

Répondez Y à la question suivante, qui propose de supprimer l’utilisateur anonymous sur le serveur.

RPI installation 3

Répondez n à la question Disallow root login remotely. Attention, cela implique que l’utilisateur root pourra se connecter à votre serveur de base de données depuis n’importe quelle machine, et pas seulement depuis le Raspberry Pi. Choisissez donc un mot de passe root solide ! Il vaudrait mieux répondre Y à cette question et créer d’autres utilisateurs sur le serveur si des accès à distance sont nécessaires.

RPI installation 4

Pour finir, répondez Y aux deux dernières questions :

RPI installation 5

Pour administrer notre serveur de base de données, nous allons installer le logiciel Adminer. Lancez les commandes suivantes :

wget https://github.com/vrana/adminer/releases/download/v4.8.1/adminer-4.8.1-mysql.php
mkdir -p /var/www/html/adminer
mv adminer-4.8.1-mysql.php /var/www/html/adminer/index.php

Avant de pouvoir utiliser Adminer, nous devons relancer le serveur Apache. On va en profiter pour activer l’extension PDO de PHP. Lancez les commandes suivantes :

sudo sed -i '/;extension=pdo_mysql/c\extension=pdo_mysql' /etc/php/7.4/apache2/php.ini
sudo systemctl restart apache2

Pour accéder à Adminer, rendez-vous à l’adresse http://localhost/adminer depuis le navigateur sur votre RPi ou à l’adresse http://adresse-ip-rpi/adminer depuis un autre ordinateur sur votre réseau local.

Vous devriez pouvoir vous connecter avec l’utilisateur root et le mot de passe que vous avez choisi à l’étape précédente.

Base de donnés RPI

Déploiement de votre site

Notre pile LAMP est prête, on peut maintenant déployer notre site dessus ! Pour cela, libre à vous de choisir comment vous voulez procéder : via Git, via FTP, manuellement via une clé USB, etc.

⚠️ Cette section n’est pas couverte dans cet article, et sera l’objet d’un autre tuto !

 

Rendre votre site accessible depuis Internet

Il reste une dernière étape, et pas des moindre : il faut rendre accessible notre site depuis internet ! Pour l’instant, ce n’est pas le cas : seul les machines connectées à notre réseau local peuvent visiter le site.

Redirection de port

⚠️ Cette étape dépend de votre fournisseur d’accès à internet et de votre box internet. Les instructions ci-après ne fonctionneront que pour l’opérateur Free.

Connectez-vous au Freebox OS en vous rendant sur http://192.168.1.254, identifiez-vous avec votre mot de passe.

Rendez-vous dans les paramètres de la freebox (1.), sélectionnez le mode « avancé » (2.), cliquez sur « gestion des ports » (3.), puis sur « Ajouter une redirection » (4.). Sélectionnez votre raspberry pi dans la liste déroulante (l’adresse IP sera différente de cette affichée), puis remplissez les champs (5.) comme indiqué sur la capture d’écran ci-dessous, et enfin cliquez sur « Sauvegarder » (6.) pour enregistrer la redirection de ports.

freebox RPI

Si vous souhaitez utiliser le protocole HTTPS, vous devrez refaire ces étapes pour créer une redirection du port 443 (à la place du port 80 sur la capture ci-dessus).

Toutes les box proposées par les différents opérateurs permettent de créer des redirections de ports, comme on vient de le faire. L’interface sera différente, mais la logique sera la même.

Un nom de domaine ?

À ce stade, votre site internet devrait être accessible depuis internet en utilisant l’adresse IP de votre box (que vous pouvez obtenir via des services en ligne, comme celui-ci par exemple).

Si vous souhaitez y accéder depuis un nom de domaine, il faudra en acheter un (auprès d’un registraire de nom de domaine) puis faire pointer une entrée DNS de type A sur votre adresse IP (cette configuration s’effectue depuis la page d’administration de votre nom de domaine, une fois ce dernier commandé).

Adresse IP non fixe ?

Gardez en tête que si vous n’avez pas d’adresse IP fixe, la configuration proposée ci-dessus ne fonctionnera pas. Vous devrez passer par un service dit de DNS dynamique (DDNS) tel que NoIP, DynDNS, etc.

Veuillez vous rapprocher de votre fournisseur d’accès à internet pour savoir si vous pouvez bénéficier d’une adresse IP fixe.