Raspberry pi to Web server
Si vous faites preuve d'un sacré sens de l'observation (indice: le nom de l'article 🙃) vous pourriez vous doutez que ce site est auto-hébergé non pas sur un serveur appartenant à un tiers mais bien sur un Raspberry Pi, tranquillement branché à ma box internet de la maison.
En attendant le jour où celui-ci implosera lorsque plus de 3 personnes essaieront de se connecter au même moment sur ce site, je m'en vais vous rédiger un tutoriel sur comment héberger un serveur web sur un Raspberry Pi à la maison. Bonne lecture!
Pourquoi un Raspberry Pi?
Avant d'entamer les hostilités, il est selon moi important d'expliquer en quelques mots les raisons qui justifient ce choix. Il s'avère que je possède des Raspberry Pi depuis fort longtemps.
En l’occurrence, ma première expérience avec un Raspberry Pi fut avec le modèle 1B commercialisé en 2011. Celui-ci, glorieusement doté pour l’époque de 512 Mo de RAM et d'un CPU ARM cadencé à 700Mhz me fut acquis après une longue bataille auprès de ma génitrice à vanter les bienfaits et les possibilités quasi illimités que pouvait offrir un Raspberry Pi. La victoire me vint grâce au projet de transformer le Raspberry Pi en serveur multimédia sous XBMC (aujourd'hui renommé KODI) grâce à la distribution gnu/linux OpenElec. Le projet était de pouvoir lire des films dans le salon depuis l'unique PC familial directement depuis le réseau via le protocole UPnP (spoiler: celui-ci à finit dans ma chambre).
Seulement, avec l’avènement des services de streaming, l'idée d'un serveur multimédia peut aujourd'hui sembler anecdotique. Le Raspberry Pi a lentement mais surement commencé à prendre la poussière sous le meuble télévision en attendant sagement une seconde vie.
Ma deuxième expérience avec un Raspberry Pi fut cette fois ci à l'aide d'un Raspberry Pi modèle 3B commercialisé en 2016 doté d'un CPU quad cœur cadencé à 1,2Ghz et doté de 1Gb de RAM. Celui-ci fut impliqué dans différents projets d'apprentissage notamment système, à l'aide de la distribution gnu/linux Raspbian, dérivé de la très connu distribution Debian, mais également dans des projets plus axés réseaux avec l'installation d'OpenWRT, distribution gnu/linux historiquement conçu pour remplacer le firmware de différents routeurs.
Pour conclure cette partie, les Raspberry Pi sont de formidable outils qu'il s'agissent d'apprendre ou pour des projets plus conséquents. Je vous invite donc vivement à vous y intéressez plus amplement si vous ne connaissiez pas l'existence de ces petites machines, les articles parlant des milles et une façons d'exploiter son Raspberry Pi sont légions sur internet.
De mon côté, l'idée de rédiger un blog étant un projet de longue date, couplé avec mon attrait naturel pour les systèmes et réseaux en font un support idéal car peut consommateur d'énergie pour en apprendre plus sur les serveur web, et une superbe occasion de mêlée l'utile à l'agréable.
Petit disclaimer : le raspberry Pi est un micro-ordinateur, n'espérer donc pas pouvoir heberger un site web ayant le traffic du périphérique de Paris en heure de pointe. Celui-ci imploserait sur place. Si vous comptez heberger une application web subissant de lourds traitement, je vous invite à vous dirigez vers des services professionnels, ou d'heberger votre solution sur un ordinateur dédié ayant la puissance requise pour ce type de traitement.
Pré-requis:
- Un Raspberry Pi (modèle 3B minimum recommandé)
- Une carte SD (avec Raspbian ou Ubuntu Serveur)
- Une connexion Internet (privilégié le filiaire ethernet RJ45)
- Une connexion électrique
- (Optionnel) Un nom de domaine
- (Optionnel) Une addresse IP publique
Architecture
Etape 1 - Installation de l'OS
La première étape consiste à installer le système d'exploitation de votre Raspberry Pi sur votre carte SD.
Heureusement, cette étape est largement simplifié par la superbe équipe de la Raspberry Pi Fundation. Il vous suffit de vous rendre sur le site officiel de Raspberry Pi et d'y telecharger leur utilitaire d'installation d'ISO.
Une fois celui-ci installer, il vous suffit de selectionner votre carte SD fraichement inséré dans votre lecteur et d'y choisir l'OS de votre choix.
Dans mon cas, j'ai choisis Ubuntu Server 64bits sans interface graphique pour des raisons de compatibilités avec le CMS Open Source Ghost et afin d'alleger le serveur d'une interface graphique encombrante en terme de ressources utilisés, libre à vous d'installer l'interface graphique, mais pour le reste de ce tutoriel, je passerai par SSH afin d'administrer le serveur.
Une fois l'installation de votre OS sur votre carte SD terminé, il vous sera peut-être nécessaire de configurer le réseau wifi avant d'inserer la carte SD dans le raspberry pi. Si vous comptez vous brancher en filiaire ethernet, vous pouvez passer à l'étape suivante.
Pour cela, il vous suffit d'editer le fichier network-config localisé à la racine de votre carte SD et d'y ajouter le nom de votre réseau wifi ("home network) ainsi que la clé de sécurité ("123456789").
wifis:
wlan0:
dhcp4: true
optional: true
access-points:
"home network":
password: "123456789"
Il vous suffit maintenant d'inserer votre carte SD dans votre Raspberry Pi et d'allumer celui-ci.
Vous pouvez également recuperer l'addresse IP attribué à Raspberry Pi depuis l'interface de votre box internet et vous connectez directement en ssh via la commande:
ssh ubuntu@<IP>
Etape 2 - Configuration de base du serveur
Vous voici donc sur un Ubuntu Serveur fraichement installé.
Par defaut, l'utilisateur 'root' est désactivé sur Ubuntu. Le compte par default sur Ubuntu Serveur est l'utilisateur 'ubuntu' et son mot de passe est 'ubuntu'.
Il convient donc en premier lieu, pour des raisons de sécurité, de modifier le mot de passe de l'utilisateur ubuntu. Pour cela, il faudra rentrer la commande suivante:
sudo passwd ubuntu
Je ne saurais que fortement vous recommandez d'utiliser un mot de passe fort (8 charactères minimum, majuscules, minuscules, caractères Spéciaux, aucun mot entier) car votre Raspberry Pi sera exposé sur internet et donc potentielle proie de bots ou hackeurs malveillants.
La seconde etape consiste à mettre à jour votre raspberry pi à l'aide de la commande suivante:
sudo apt update && sudo apt upgrade
Votre serveur est maintenant configuré et à jour. Si vous utilisez votre Raspberry Pi directement depuis un écran, nous allons maintenant voir comment mettre en place le SSH pour nous connecter sur la console depuis un autre ordinateur.
Etape 3 - Installation du SSH
Pour les néophyte, le SSH est est à la fois un programme informatique et un protocole de communication sécurisé qui permet aux utilisateurs de contrôler et de modifier leurs serveurs distants sur Internet.
Le SSH pour Secure Shell devrait théoriquement être installé par défaut sur votre serveur, néanmoins, il convient de verifier si c'est le cas. Pour cela, vous pouvez utiliser la commande suivante:
systemctl status ssh.service
ou
systemctl is-active ssh.service
Si le serveur SSH est actif et installé, vous devriez obtenir le resultat suivant:
Dans le cas contraire, il vous faudra installé un serveur SSH. Dans ce cas, utilisez la commande suivante dans le terminal:
sudo apt install openssh-server
Si le SSH est correctement installé, il vous suffit maintenant d'obtenir l'addresse IP attribué à votre Raspberry Pi.
Pour cela utilisé la commande: ip a
Le resultat de notre commande nous renvoie 3 réseaux:
- Lo > Localhost, signifiant cet ordinateur, moi-même.
- Eth0 > Ethernet, réseau par cable Ethernet.
- Wlan0 > Wireless, réseau par wifi.
Noter l'adresse IP attribué (Eth ou Wlan). Elle vous permettra de vous connectez sur votre serveur depuis votre réseau local.
Pour cela, il vous suffit de taper la commande suivante depuis un autre PC de votre réseau local.
ssh ubuntu@<votre-addresse-ip>
Il ne vous reste qu'à rentrer le mot de passe utilisé lors de l'etape 2 et vous voila maintenant connecter en SSH sur votre serveur Raspberry Pi.
Etape 4 - Installation de Nginx
Maintenant que votre Raspberry Pi est accessible, il est maintenat nécessaire d'installer un logiciel de serveur web.
Pour les néophytes, un serveur web est un ordinateur qui stocke les fichiers qui composent un site web et qui s'occupe de renvoyer ses éléments à l'utilisateur qui visite le site.
En règle générale, on associe un domaine (ex: blog.noobtoroot.xyz) au serveur web.
Pour transformer votre Raspberry Pi en serveur Web, il vous faut donc installer un logiciel afin de transformer votre Raspberry Pi en serveur web.
Il en existe une multitude, les plus utilisés aujourd'hui sont:
- Apache
- ISS
- Nginx
Dans notre cas, nous utiliserons Nginx qui est selon moi, plus simple d'utilisation.
Pour installer nginx, il suffit d'utiliser le gestionnaire de package:
sudo apt install nginx
Nginx est maintenant installé sur votre serveur. Vous pouvez essayer d'entrer l'addresse IP de votre Rasperry Pi dans un navigateur en reseau local. Vous devriez voir apparaitre la page suivante: