Comment créer un serveur Raspberry Pi pour le développement
Publié: 2022-03-11Le Raspberry Pi est un petit ordinateur que vous pouvez obtenir pour aussi peu que 5 USD et sur lequel vous pouvez exécuter de nombreux types de logiciels différents et créer de nombreux projets différents.
Dans cet article, je vais vous guider tout au long du processus de configuration en tant que serveur de développement domestique et de déploiement d'une application JavaScript complète à laquelle vous pouvez accéder depuis l'extérieur de votre réseau. C'est idéal pour configurer votre propre espace de travail numérique à distance ou simplement pour contrôler le matériel que vous utilisez pour le développement.
De quoi avez-vous besoin pour ce serveur domestique Raspberry Pi ?
Bien qu'il s'agisse maintenant d'un didacticiel Raspberry Pi 3 en particulier, il devrait toujours fonctionner avec des modèles remontant à la première génération. Si vous avez un modèle plus ancien ou un Raspberry Pi Zero, veuillez nous faire part de votre expérience dans les commentaires ci-dessous.
En plus de la carte Raspberry Pi elle-même, vous aurez besoin de :
- Un chargeur Micro USB
- Un câble Ethernet
- Une carte microSD (minimum 8 Go et les cartes jusqu'à 32 Go semblent bien fonctionner)
Ceux-ci seront également utiles lors de la configuration initiale :
- Un clavier USB
- Un câble HDMI et un moniteur
Le système d'exploitation Raspberry Pi : Raspbian
L'installation d'un système d'exploitation sur un Raspberry Pi est simple. Tout d'abord, à l'aide de votre ordinateur, installez l'image de démarrage sur une carte microSD. Ensuite, insérez simplement la carte dans le Raspberry Pi et démarrez à partir de là.
Raspbian est une distribution Linux portée à partir de Debian 7.0 ( Wheezy ), et est le système d'exploitation officiel pour Raspberry Pi optimisé pour l'architecture de l'appareil. Bien qu'il existe d'autres options pour exécuter votre système d'exploitation préféré sur le Pi, nous utiliserons Raspbian en raison de sa simplicité.
Ce tutoriel a été mis à jour pour fonctionner avec cette version (ou ultérieure) de Raspbian :
Kernel version : #1 SMP Debian 4.9.110-3+deb9u4 (2018-08-21) Kernel release : 4.9.0-8-amd64
Pour installer Raspbian, rendez-vous sur la page de téléchargement officielle et téléchargez le fichier zip avec la dernière version de Raspbian.
Ensuite, insérez la carte microSD dans la fente ou l'adaptateur de carte SD de votre ordinateur. Selon le système d'exploitation de votre ordinateur, suivez les instructions fournies sur le site Web de Raspberry pour Linux, Mac OS ou Windows.
Une fois le processus terminé, éjectez la carte SD de votre ordinateur et insérez-la dans le Raspberry Pi. Connectez le Raspberry Pi à votre routeur à l'aide du câble Ethernet et branchez le chargeur micro USB, ce qui lancera le démarrage du Raspberry Pi.
Pour la configuration initiale, il existe deux options :
- Si vous avez un clavier USB et un moniteur HDMI, vous pouvez les brancher sur le Raspberry Pi pour la configuration initiale.
- Votre Pi devrait reconnaître ces appareils dès qu'ils sont branchés.
- La première fois que le Pi démarre, il exécute automatiquement
raspi-config
. Après le premier démarrage, vous devrez exécuter vous-mêmesudo raspi-config
afin de configurer l'appareil.
- Si vous ne les avez pas, vous pouvez vous connecter à votre Raspberry Pi pendant qu'il utilise SSH :
- Tout d'abord, vous devez trouver l'adresse IP de votre Raspberry Pi dans votre réseau local. Cela peut être fait en vous connectant à la page d'administration de votre routeur ou en utilisant un outil réseau comme
nmap
. - Une fois que vous avez l'adresse IP de l'appareil, connectez-vous en utilisant SSH depuis votre terminal (ou via Putty si vous utilisez Windows). L'utilisateur par défaut est
pi
et le mot de passe par défaut estraspberry
. Ainsi, par exemple, si l'adresse IP est 192.168.1.16, exécutezssh [email protected]
et entrez le mot de passe lorsque vous y êtes invité. - Lorsque vous êtes connecté, exécutez
sudo raspi-config
.
- Tout d'abord, vous devez trouver l'adresse IP de votre Raspberry Pi dans votre réseau local. Cela peut être fait en vous connectant à la page d'administration de votre routeur ou en utilisant un outil réseau comme
raspi-config
vous guidera à travers la configuration finale. Vous pouvez configurer toutes les options, mais les plus importantes sont les deux premières : étendre le système de fichiers, en veillant à ce que tout le stockage de la carte SD soit disponible pour le système d'exploitation, et modifier le mot de passe de l'utilisateur Pi par défaut, afin que votre serveur soit à l'abri des intrus.
Installer un serveur Web (Nginx) sur votre Raspberry Pi
Ensuite, vous allez installer le serveur Web. Je préfère Nginx parce qu'il a une petite empreinte mémoire et parce qu'il fonctionne bien avec Node.js (que vous configurerez plus tard). D'autres serveurs Web, tels qu'Apache ou lighttpd, fonctionneraient également, mais nous utiliserons Nginx pour cette démonstration.
Avant de commencer à installer quoi que ce soit, vous devez vous assurer que tout est à jour en exécutant ces commandes sur le Pi :
sudo apt-get update sudo apt-get upgrade
Ensuite, vous pouvez installer Nginx en utilisant apt-get
:
sudo apt-get install nginx
Une fois l'installation terminée, démarrez le serveur en exécutant :
sudo service nginx start
Si vous n'aviez pas à déterminer l'adresse IP locale de votre Raspberry Pi à l'étape précédente, il est temps de le découvrir en exécutant ifconfig
. La sortie de votre adaptateur Ethernet sera sous eth0
, et avec son adresse IP locale étiquetée inet addr
.
Une fois que vous connaissez l'adresse IP, vous pouvez y pointer le navigateur de votre ordinateur, où vous devriez voir le message par défaut "Bienvenue à Nginx".
Ouverture sur le Web : redirection de port
Vous pouvez ignorer cette étape si vous ne prévoyez pas d'accéder à votre Raspberry Pi depuis l'extérieur de votre réseau local. Mais pour ceux qui souhaitent accéder à leur serveur depuis d'autres endroits, assurons-nous que c'est possible.
Dans un réseau domestique typique, les appareils connectés au routeur sont invisibles pour le monde extérieur. Seul votre routeur est accessible de l'extérieur, en utilisant l'adresse IP externe de votre réseau. Votre routeur est chargé de déterminer quel trafic entrant est autorisé sur le réseau et à quel appareil il doit être envoyé.
Lorsqu'un appareil du réseau local établit une connexion (par exemple, lorsque vous ouvrez un site Web sur votre navigateur), le routeur reconnaît le trafic de réponse entrant comme faisant partie de cette connexion et l'autorise. Cependant, si le routeur reçoit du trafic entrant qui ne fait pas partie d'une connexion ouverte (par exemple, lorsqu'un périphérique extérieur tente d'établir une connexion avec un périphérique interne), il empêchera le trafic entrant de traverser le réseau. Il s'agit d'une fonction de sécurité importante pour protéger le réseau !
Alors, comment pouvez-vous vous connecter à votre Pi de l'extérieur ? La réponse est la redirection de port. Le routeur doit être configuré pour permettre aux connexions entrantes sur des ports spécifiques de passer et d'être envoyées au bon périphérique. Par défaut, le protocole HTTP utilise le port 80 et SSH utilise le port 22. Ce sont donc les deux ports que vous devez ouvrir sur votre routeur pour accéder à votre application Web et permettre des connexions sécurisées pour la gestion de votre serveur.
Les étapes de configuration de votre routeur pour ouvrir et transférer les ports peuvent varier en fonction de votre fournisseur d'accès Internet et de la marque de votre routeur, mais dans tous les cas, vous devriez pouvoir le faire via les options de configuration avancées de la page d'administration de votre routeur. Recherchez simplement une option avec un nom comme "Transfert", "Redirection de port" ou "Traduction d'adresse réseau".
Vous devez ouvrir un port pour les connexions HTTP et un autre pour SSH. L'idée de base consiste à transférer les données adressées à ces deux ports externes vers votre Raspberry Pi, le trafic Web allant au port 80 où Nginx écoute, et le trafic SSH allant au port 22, où le serveur SSH accepte les connexions d'ordinateurs externes. Voici un exemple de ce à quoi cela pourrait ressembler dans la page de configuration de votre routeur :
192.168.1.16
. Tout le trafic entrant à destination des ports 80 ou 22 est transmis à cette adresse interne. Vous pouvez déterminer l'adresse IP externe de votre routeur en tapant simplement "quelle est mon adresse IP" dans Google. Si vous sortez ensuite du réseau de votre routeur, vous pouvez tester le fonctionnement de la redirection de port en ouvrant une connexion SSH avec ssh pi@{external IP address}
. De même, la redirection de port HTTP peut être testée en saisissant l'adresse IP externe dans la barre d'adresse de votre navigateur. N'oubliez pas que la redirection de port permet à quiconque de l'extérieur d'accéder à l'appareil sur ces ports s'il connaît l'adresse IP externe de votre routeur.

Si vous n'avez pas d'adresse IP statique, vous pouvez configurer un DNS dynamique. C'est une étape très simple et facile. Vous pouvez configurer un DNS dynamique à partir de votre routeur ou vous pouvez configurer votre Raspberry Pi pour cela. Je ne vais pas expliquer comment configurer DDNS ici, mais BitPi.co a un bon tutoriel sur le sujet si nécessaire.
Installer le Framework : JavaScript full-stack
Vous pouvez exécuter la plupart des frameworks Web sur Nginx, mais voyons comment passer à la pile complète avec JavaScript. Pour ce faire, vous devez installer Node.js et MongoDB.
De nos jours, Node.js s'installe facilement sur un Raspberry Pi avec :
sudo apt-get install nodejs
Une fois l'installation terminée, vous pouvez vérifier s'il fonctionne en exécutant node -v
.
Vous pouvez maintenant installer MongoDB simplement en tapant :
sudo apt-get install mongodb
Sachez simplement que si jamais vous avez besoin d'éteindre le Raspberry Pi, vous devez d'abord arrêter le service afin d'éviter la corruption de la base de données :
sudo service mongodb stop
Déployez votre application
Vous pouvez développer sur votre ordinateur local, puis transférer vos modifications vers un référentiel Git sur BitBucket. Étant donné que Raspbian est livré avec Git préinstallé, vous pouvez ensuite extraire votre dernier code d'application sur l'appareil et l'exécuter.
Échafauder le projet
Configurons d'abord du code d'application et transférons-le dans un référentiel Git. Il existe de nombreuses façons de démarrer une application, mais l'une de mes préférées est generator-angular-fullstack, qui échafaude à la fois le code serveur et le code client.
Installez generator-angular-fullstack
sur votre ordinateur :
npm install -g generator-angular-fullstack
Créez un nouveau répertoire pour votre application :
mkdir my-app cd my-app
Et échafaudez l'application :
yo angular-fullstack my-app
Créer le référentiel et pousser le code
Créez maintenant un référentiel dans BitBucket, comme décrit ici. Configurez ensuite votre répertoire local :
git init git remote add origin [email protected]:USER/REPO.git
Vous pouvez donc valider et pousser le code :
git add . git commit -m 'Initial commit' git push -u origin master
Le générateur est livré avec le plug-in grunt-build-control, qui vous permet de valider le code de construction dans une branche spécifique de votre référentiel. Ajoutez simplement la configuration de BitBucket à Gruntfile.js
dans le répertoire racine de votre application :
buildcontrol: { options: { dir: 'dist', commit: true, push: true, connectCommits: false, message: 'Built %sourceName% from commit %sourceCommit% on branch %sourceBranch%' }, bitbucket: { options: { remote: '[email protected]:USER/REPO.git', branch: 'build' } } }, // ...
Exécutez maintenant :
grunt build
…pour créer le dossier de distribution, suivi de ceci :
grunt buildcontrol:bitbucket
… pour valider et envoyer le code à la branche de construction de votre référentiel.
Générer la clé SSH
Votre code est maintenant hébergé. Avant de pouvoir le déployer sur votre Raspberry Pi, vous devez générer une clé SSH pour le Raspberry Pi et l'ajouter à votre compte BitBucket. Nous allons parcourir cette étape rapidement, mais si vous rencontrez des problèmes, veuillez suivre le guide BitBucket. Alors, reconnectez-vous à votre terminal Raspberry Pi et générez la paire de clés publique/privée :
ssh-keygen
Ensuite, démarrez l'agent :
ssh-agent /bin/bash
Et ajoutez la clé à l'agent :
ssh-add /home/pi/.ssh/id_rsa
Il ne vous reste plus qu'à afficher le contenu de la clé publique :
cat /home/pi/.ssh/id_rsa.pub
… afin que vous puissiez le copier et le coller dans BitBucket.
Dans BitBucket, cliquez sur votre photo de profil et accédez à Gérer le compte . Sous SÉCURITÉ , recherchez les clés SSH et cliquez sur le bouton Ajouter une clé .
Cloner le référentiel
Il n'y a pas de convention pour savoir où placer le code de vos applications, mais vous pouvez créer un répertoire /var/www
et y placer tous vos projets.
cd /var sudo mkdir www
Pour éviter l'utilisation de sudo
lorsque vous souhaitez placer des fichiers dans la racine Web, vous pouvez changer le propriétaire en votre utilisateur Pi et le groupe en www-data
, qui est utilisé par Nginx :
sudo chown -R pi:www-data www cd www
Maintenant, vous pouvez cloner la branche build de votre dépôt et installer les dépendances :
git clone [email protected]:USER/REPO.git --branch build --single-branch cd REPO npm install --production
Une fois terminé, vous pouvez démarrer votre application en définissant l'environnement sur production :
export NODE_ENV=production; node server/app.js &
Maintenant, pointez le navigateur de votre ordinateur vers l'adresse IP de l'appareil pour vérifier si cela fonctionne.
Configurer le proxy inverse Nginx
Il reste une étape supplémentaire pour rendre votre application accessible de l'extérieur. Bien que Nginx écoute sur le port 80, où il recevra les requêtes HTTP pour votre Pi, l'application Node elle-même écoute sur un port différent (par exemple, le port 8080). Par conséquent, vous devez configurer Nginx pour qu'il agisse en tant que proxy inverse, en reconnaissant les requêtes destinées à votre application et en les transmettant à Node.
Nginx conserve le fichier de configuration de chaque application qu'il dessert dans le dossier sites-available
:
cd /etc/nginx/sites-available/
Ici, vous pouvez copier le fichier de configuration default
et le modifier à votre convenance :
sudo cp default my-app sudo nano my-app
Le fichier de configuration final devrait ressembler à ceci, avec Nginx agissant comme un proxy pour le serveur Node.js :
server { listen 80; root /var/www/my-app/; # identifies the location of the application you are configuring server_name my-app.dev; # identifies the hostname used by this application's traffic location / { proxy_pass http://localhost:8080/; # configures the back-end destination for this traffic } }
Afin d'activer cette configuration, vous devez créer un lien symbolique dans le dossier sites-enabled
, où Nginx recherche les configurations actives pendant l'exécution :
sudo ln -s /etc/nginx/sites-available/my-app /etc/nginx/sites-enabled/my-app
Et rechargez le service pour activer ces modifications :
sudo service nginx reload
À ce stade, votre application est prête à recevoir le trafic HTTP destiné au domaine my-app.dev
(grâce à la directive server_name my-app.dev
que vous avez configurée ci-dessus). Le dernier problème que vous devez résoudre est de savoir comment faire en sorte que le trafic que vous envoyez de l'extérieur corresponde à ce nom de domaine. Bien que vous puissiez acheter un nom de domaine et le faire pointer vers votre adresse IP, le fichier hosts
vient à la rescousse et rend cela inutile.
Sur le poste de travail à partir duquel vous accéderez au site, ajoutez simplement l'adresse IP externe de votre routeur et faites-la correspondre au nom d'hôte my-app.dev
. Tout trafic HTTP que vous générez pour my-app.dev
sera ensuite envoyé directement à votre routeur, avec le nom d'hôte correct dans l'en-tête Host
HTTP.
Sous Windows, avec des privilèges d'administrateur, vous pouvez modifier le fichier situé dans c:\windows\system32\drivers\etc\hosts
avec le bloc-notes. Sur Linux et Mac, vous pouvez utiliser le terminal avec sudo nano /etc/hosts
et sudo nano /private/etc/hosts
respectivement.
## # Host Database # # localhost is used to configure the loopback interface # when the system is booting. Do not change this entry. ## 127.0.0.1 localhost 255.255.255.255 broadcasthost ::1 localhost 212.124.126.242 my-app.dev # add your host name to the list
Et après?
Maintenant que tout est configuré, vous pouvez déployer autant d'applications que vous le souhaitez sur votre Raspberry Pi, et installer pour toujours ou pm2 pour maintenir vos serveurs Node.js en vie.
Et n'oubliez pas que si quelque chose ne va pas, vous pouvez simplement effacer la carte SD et recommencer à zéro !