Installation et configuration d'un raspberry en web server Lemp.
|
Bonjour à tous, cet article est dédié à la configuration d'un Raspberry comme serveur web. Pas besoin d'écrans ni de claviers, juste un Raspberry et votre ordinateur. Nous allons faire cela en ligne de commande, n'ayez pas peur je vous accompagnerai tout au long de ce tuto. Cet article est destiné aux personnes qui débutent tout comme moi dans le monde de linux et du Raspberry. Tout au long de l'article nous apprendrons à: -manipuler des commandes indispensables à l'utilisation de linux -piloter notre Raspberry avec une console SSH, -installer un service Web Nginx avec PHP -installer Mysql, adminer et Phpmyadmin -activer le SSL du HTTPS -partager un dossier sur notre réseau informatique -monter un disque dur pour sauvegarder nos données. A la fin de ce tuto nous aurons un serveur web fonctionnel, prêt à l'emploi.
|
Pour suivre ce tuto il nous faudra un minimum de matériel pour que notre raspberry fonctionne. Sur le mien j'ai installé un dissipateur thermique passif. Le but étant de créer un serveur web économique qui offre une bonne expérience de navigation, j'ai décidé de m'orienter vers ces choix.
|
L'OS est le système d'exploitation qui va gérer le micro ordinateur Raspberry, windows est un OS. Le Raspberry peut accueillir plusieurs types d'OS, Raspbian, Ubuntu,.... Ils sont basés sur la distribution Debian, seul l'interface graphique change réellement. Dans la suite nous allons choisir un OS le plus léger possible afin d'optimiser le fonctionnement de notre serveur Web, gardons nos objectifs en tête ;-). Rendons nous sur le site officiel du Raspberry pour télécharger l'utilitaire d'installation Raspberry pi imager.
Installons le logiciel, puis ouvrons celui-ci. Au préalable nous aurons branché la carte micro SD via l'adaptateur à notre ordinateur. Cliquons sur le bouton "choose SD card" pour sélectionner notre carte SD. Puis il vat nous falloir choisir l'OS que nous voulons installer. Pour l'application que nous voulons faire nous n'avons pas besoin d'interface graphique et nous souhaitons un OS léger, c'est pourquoi j'ai choisi l'OS Raspbian Lite. Gravons notre carte en cliquant sur write. Un message vous informera que l'installation est terminée. Ce n'est pas tout à fait fini, pour pouvoir communiquer avec notre Raspberry il faut activer le SSH. Il nous permettra de nous connecter à notre Raspberry. Pour cela il suffit de créer un fichier nommé ssh sans extension dans la racine boot de la carte SD. Déconnectons puis reconnectons l'adaptateur USB pour qu'il soit reconnu par Windows et ajoutons ce fichier. Après avoir inséré notre carte SD dans le Raspberry nous pouvons le connecter à notre réseau grâce au câble RJ45. La première mise en marche prend un peu de temps car l'OS s'installe.
|
Installation et configuration de la console putty
Nous avons besoin d'une console SSH pour nous connecter à notre Raspberry, rendons sur le site officiel Putty pour télécharger le logiciel puis l'installer.
Il faut que nous trouvions le raspberry sur le réseau. Pour cela assurez vous d'être connecté sur le même réseaux. Le groupe de travail du raspberry est par défaut le même que celui de windows (WORKGROUP), le host name du Raspberry est raspberrypi. Si vous êtes sur le même réseau il vous sera facile de vérifier sa présence en ouvrant l'invite de commande de Windows ( cmd dans le menu ) en envoyant un "ping raspberrypi" , il devrait vous retourner son adresse IP. Si vous rencontrez des difficultés, vous pouvez télécharger des scanners réseaux comme le macscanner de colasoft.
Maintenant ouvrons le logiciel Putty. Pour ne pas perdre vos habitudes de frappes, je vous propose de configurer la touche "del" de l'interface. Dans le cas contraire il vous faudra utiliser Ctrl-H pour effacer.
Ceci fait configurons la connexion dans l'onglet "Session". Vous pouvez enregistrer ces informations grâce au bouton "Save". Si votre nom d'hôte ne fonctionne pas vous pouvez le remplacer par son adresse ip 192.168.XXX.XXX.
Cliquer sur Open pour ouvrir la session, une fenêtre vous avertie de la création d'une clé de cryptage, valider la demande. Le PC est prêt, attaquons nous à la configuration du Raspberry.
|
L'invite de commande du Raspberry nous demande de nous logger. Pour cela nous allons utiliser l'utilisateur par défaut "pi". Son mot de passe par défaut est raspberry. Connectons-nous en informant ces deux informations.
Nous sommes maintenant connectés avec l'utilisateur pi de la machine Raspberrypi. Par mesure de sécurité nous allons immédiatement changer le mots de pass de l'utilisateur pi, pour cela taper ce qui suit, un nouveau mot de passe vous sera demandé. Pour coller les textes il suffit de les copier (ctrl-c) puis de faire un click droit dans la console pour les coller.
sudo : permet de passer en mode super utilisateur afin d'avoir les droits pour changer le mot de passe, il sera souvant utilisé par la suite. passwd: est une commande qui permet de changer le mot de passe d'un utilisateur, ici pi. Second point important avant de commencer notre configuration, nous allons mettre à jour notre raspberry. Contrairement à windows tous les logiciels ce trouvent dans des depots qui sont consultables sur internet. Cette mise à jour ce fait en deux étapes. La première consiste à mettre à jour le cache (un fichier) des paquets installés grace la commande apt-get update. Je rappelle que les commandes sont les mêmes sur tous les systèmes Debian (Ubuntu,..).
Puis de mettre à jour le raspberry, cela prendra quelques minutes.
Astuce: Avec la touche tabulation vous pouvez activer l'auto-complémentation. Cela permet de compléter automatiquement la frappe en cours en appuyant sur la touche tabulation. Cela fonctionne aussi bien pour les commandes que pour les noms de fichiers et de répertoires. Cela fait nous allons configurer notre raspberry, un utilitaire propre au Raspberry permet de nous aider.
L'utilitaire va nous permettre de régler notre raspberry, notamment le fuseau horaire.
Maintenant tous nos outils de travail sont prêts à être utilisés.
|
Installation du serveur web Nginx et de PHP
II existe plusieurs serveurs Web/html, open source. Vous avez certainement entendu parler d' Apache. Notre objectif étant d'optimiser les ressources, nous allons en utiliser un autre, il s'agit de Nginx, il est lui aussi largement utilisé et a l'avantage de consommer moins de ressources. En contrepartie certaines fonctionnalités tel que .httacces de apache ne seront pas disponibles. De plus nous allons utiliser une version alléger de PHP, celle-ci ce nomme php-fpm. Pour installer Nginx et PHP je me suis largement inspiré de ce tuto. Nous allons une nouvelle fois utiliser la commande apt-get suivit de install , il est possible d'installer plusieurs packages en une seule commande.
Note: Il est possible d'afficher une aide pour chaque commande, pour cela il faut d'utiliser la synthase man suivit de la commande. exemple: man apt-get Voilà on ne peut pas faire plus simple, Nginx est maintenant installé, il ne nous reste plus qu'à le configurer. Pour cela nous allons utiliser un éditeur de texte. Il s'appelle nano. Pour nous aider à l'utiliser nous allons commencer par changer un peu sa configuration. Mais d'abord un peu de formations sur des commandes qui vont nous permettre de naviguer. Lors de l'installation de l'OS, plusieurs répertoires ont été créés, chaque répertoire à une fonction bien définit. home->fichiers utilisateur, etc->fichiers de configuration, bin->fichiers programme, var->variables... Lorsque vous vous connectez à un utilisateur vous êtes automatiquement diriger vers votre répertoire personnel soit /home/pi, noté aussi ~, sur l'invite de commande . La commande "ls" vous permet de lister les fichiers et dossiers qui sont présents sous le dossiers où vous êtes. Pour naviguer dans les répertoires vous pourrez utiliser la commande cd. cd utilisé seul vous dirige vers votre répertoire utilisateur /home/utilisateur cd nom_repertoire vous dirige sur le répertoire nommé (déplacement relatif) cd .. revient sur le répertoire précédent cd /home/pi l'écriture du chemin complet vous dirige vers celui-ci (déplacement absolu) Si vous voulez en connaître plus et être à l'aise avec Lunix en particulier les distributions Debian, je vous conseille vivement ce cours d'openclassrooms. Maintenant que nous avons intégré le fonctionnement de ces outils de base nous allons pouvoir facilement ouvrir le fichier de configuration de nano grâce à cette commande.
Note: ce pas une étape obligatoire, elle permet juste d'améliorer l'interface de l'éditeur nano Le symbole # permet de commenter une ligne pour quelle ne soit pas prise en compte par le système. En nous déplaçant avec l'aide des flèches de notre clavier nous allons supprimer ce symbole pour activer des fonctionnalités bien pratiques. set mouse : qui permet d'activer la souris set autoindent : qui permet une indentation automatique, bien pratique lorsque l'on modifie du code. set smarthome : qui permet de mettre le curseur en début de ligne Vous les trouverez facilement car elles sont rangées par ordre alphabétique. Une fois modifié , la commande ctrl x nous permet de sortir, l'éditeur nous propose d'enregistrer tapez Y pour valider. Au besoin l'éditeur nano affiche une aide en bas de l'écran. Maintenant notre éditeur est configuré........Ha oui !configurons notre serveur web Nginx. Pour cela nous allons utiliser notre éditeur customisé. Comme vous pouvez le remarquer le fichier de configuration se trouve sous le répertoire /etc ce sera le cas de la plupart des fichiers de configuration.
Si vous avez configurer votre éditeur il vous est maintenant possible de vous positionnez avec la souris. Nous allons activer la possibilité d'utiliser un index PHP en modifiant la ligne:
par:
Puis nous allons activer PHP en remplaçant ces lignes:
par, prêtez attention à la version de php, ici php7.3-fpm:
Après enregistrement (CtrlX puis Y+ Entré) il faut redémarrer le service Nginx pour que la configuration soit prise en compte. Il existe plusieurs méthodes. En voici une.
Maintenant nous allons modifier les droits du dossier web afin de pouvoir le modifier depuis l'utilisateur pi. Pour cela nous mettons le dossier accessible au groupe pi (appartient à pi).
chown: attribue l'appartenance du fichier ( www-data propriaitaire pi groupe). chmod: permet d'attribuer les droits (user, group, guest) sur un dossier ou un fichier. Nous allons ajouter un fichier sous la racine /var/www/html pour tester si l'installation de PHP fonctionne bien.
echo permet d'écrire <?php phpinfo(); ?> dans le fichier index.php qui sera automatiquement créé. Maintenant notre serveur web est prêt si nous tapons sur notre navigateur ce lien vous devriez avoir ce message.
|
Installation de Mysql et Adminer
La base de données Mysql n'est plus libre. Elle est souvant remplacée par Mariadb qui est une base de données open source et compatible Mysql. Nous allons l'installer avec un utilitaire qui permet d'avoir une interface graphique pour faciliter sa gestion. Il s'agit d' Adminer, il permet à l'instar de Phpmyadmin de gérer des bases de données. J'ai choisi Adminer car son installation est plus simple et plus fiable que celle de Phpmyadmin. Cependant, si vous le souhaitez, à la fin de l'article il y a un tuto pour l'installation de PhpMyAdmin. Revenons à nos moutons, comme tout à l'heure nous allons installer Mariadb et un pluging php {jcomments on}avec la commande apt-get.
Puis l'utilitaire de gestion Adminer.
Adminer s'installe sur /usr/share/adminer il vous faudra donc créer un lien symbolique pour y accéder depuis votre site. Pour cela nous allons utiliser la commande ln qui crée un lien (un raccourci) symbolique (-s) qui nous permettra d'accéder au dossier depuis le dossier web.
Maintenant nous sommes en mesure de nous connecter à l'interface de Adminer par cette adresse. Si vous essayez de vous connecter avec l'utilisateur root vous observerez qu'il n'est pas possible de ce connecter sans mots de passe. Nous allons donc créer un mot de passe pour l'utilisateur root de la base de données. Pour cela nous nous connectons à la base de données.
Dans un premier temps nous effaçons l'utilisateur root pour ensuite le créer avec un mot de passe et lui donner des droits de super utilisateur. Finissez avec la commande exit pour sortir. Attention de ne pas sortir avant d'avoir créé un utilisateur. ;-) vous ne pourriez plus vous connectez à votre base de données.
Note vous pouvez créer d' autres utilisateurs. DROP permet de supprimer un utilisateur CREATE USER créer un utilisateur avec ou sans mot de passe. GRANT attribue les droits d'utilisation
|
Pour créer notre site nous aurons besoin de modifier régulièrement les fichiers de celui-ci. Nous pourrions les administrer via la console et les éditeurs disponibles sur la console, tel que Vim. Mais personnellement je ne trouve pas cela super confortable, je préfère utiliser des éditeurs comme sublimText. La manière la plus simple et la plus transparente est de partager le dossier www sur le réseau afin d'y accéder facilement depuis un PC. J'en profiterai ensuite pour passer Adminer en mode dark en remplaçant son fichier CSS. Dans un premier temps nous allons créer un nouvel utilisateur qui pourra accéder au répertoire du site web. Pour cela nous allons utiliser la commande adduser suivit de l'identifiant. Ensuite le système demandera un mot de passe et des informations complémentaires. Un dossier sous /home/utilisateur est automatiquement créé.
Nous plaçons l'utilisateur dans un groupe que nous créons au préalable. cela permettra de déployer les mêmes droits pour plusieurs utilisateurs.
Maintenant nous allons confirmer www-data (nginx) propriétaire de /var/www/ et attribuer le groupe webmaster à ce même répertoire ainsi qu'aux sous-répertoires (-R).
Nous appliquons des droits d'accès au répertoire grâce à la commande chmod 7 (4+2+1 , écriture, lecture, exécuter) pour le propriétaire, 7 pour les groupes et 0 pour les invités.
Pour partager le dossier sur le réseau nous allons utiliser l'outil samba. Pour cela il faut l'installer. Durant l'installation il demandera si nous voulons utiliser la résolution WINS, nous répondrons oui.
Il est nécessaire de configurer des utilisateurs de Samba, il doivent t'être les mêmes que ceux de l'OS, avec les mêmes mots de passe. Malheureusement ils ne sont pas synchronisés entre eux. Il faudra les mettre à jour manuellement. Créons l'utilisateur fabrice, le même que celui de l'OS.
Nous allons maintenant configurer samba, pour cela il faut ouvrir le fichier de configuration. Là encore il ce trouve sous /etc/
Dans la rubrique #Authentification# ajouter la ligne pour définir la méthode d'identification.
Puis informer à la fin du fichier les informations du dossier que l'on souhaite partagé. [nom du partage]
Pour nous connecter il nous suffira de créer une connexion réseau à l'adresse \\raspberrypi\innogreentech avec comme utilisateur fabrice. Cela permettra de travailler sur le site comme si les fichiers étaient installés sur le PC. Nous allons pouvoir passer Adminer en mode sombre ( j'aime beaucoup les dark mode (-; ) en copiant le fichier de ce lien sous www puis en exécutant cette commande qui déplacera ce fichier ver le dossier d'Adminer.
|
Le ssl va permettre de sécuriser la communication entre le client web et le server. L'échange des données sera crypté grâce à une clé privée de chiffrement. Pour cela nous allons installer le packet Openssl qui va nous permettre de générer la clé.
Rendons nous dans le répertoire de configuration du ssl. (he oui toujour sous /etc/)
Grâce à openssl nous allons générer une clé de 2048 bytes dans le fichier server. key.
Maintenant il nous faut créer un certificat pour notre clé. Ce certificat est autogénéré, il ne sera donc pas reconnu fiable par les navigateurs. Cependant la communication sera tout de même sécurisé. Une fois validé nous informerons les renseignements qui nous sont demandés.
Nous venons donc de créer notre certificat dans le fichier server.csr, Nous avons maintenant besoin de le signer, toujours avec l'aide de openssl:
La clé privée est maintenant certifiée et signée pour 365 jours. Pour finaliser la démarche reprenons la configuration de notre site pour changer les règles d'accès à celui-ci.
Dans un premier temps nous désactivons l'accès au site via le port 80 en commentant les lignes suivantes.
Puis nous activons la connexion ssl en décommentant ces lignes, et en informant le lien vers la clé et la certification que nous avons créé.
Pour finir nous allons rediriger les requêtes du port 80 vers le port https. Pour cela nous créons un nouveau serveur à la fin du fichier qui redirige les demandes vers le lien https.
Une fois enregistré nous devons relancer le service nginx pour que ces modifications soient prises en compte. Nouvelle méthode plus simple pour relancer un service ;-).
Nous pouvons maintenant accéder à notre site en https. Le navigateur nous informera que le site n'est pas sûr car le certificat n'est pas reconnu. Nous devons faire confiance au site pour pouvoir naviguer. Il est possible d'enregistrer cette préférence dans les paramètres du navigateur. Comme la procédure est différente pour chaque navigateur, je ne développerai donc pas de méthodes dans ce tuto. |
Le sytème d'exploitation est installé sur une carte micro SD. Malheureusement ce type de cartes a un nombre d'écritures limité (10 000 environ), ce qui induit une durée de vie limitée. C'est pour cela que je vous invite à installer rapidement un disque dur externe pour pouvoir effectuer des sauvegardes et y enregistrer les process qui demandent beaucoup d'écritures. Connectons notre disque dur et retrouvons le grâce à la commande fdisk, elle liste les partitions. Pour ma part il ce trouve en /dev/sda
Dans un premier temps, nous allons le formater au format linux ext4.
Maintenant nous devons partitionner le disque en une ou plusieurs partitions. Pour cela lancer fdisk, puis il suffit d'envoyer les commandes qui nous permettrons de créer une nouvelle partition. m: pour avoir de l'aide sur les différentes commande n: pour informer que l'on veut créer une partition |__ p: pour créer des partitions primaires |___ Validez les choix par défaut pour créer la partition. w: Ecrire la table des partitions, faire cette commande avant de sortir pour enregistrer votre travail. q: permet de sortir de la commande
Notre disque est prêt à être exploité. Nous n'en avons pas encore parlé mais il y a un point important à comprendre sur Linux. Le positionnement des répertoires n'est pas lié au support d'enregistrement. Il est donc possible de trouver plusieurs disques sous une même racine, l'arborescence des dossiers est donc virtuelle. Commençons par créer un dossier de sauvegarde. Je vais le positionner sous la racine média.
Nous allons monter le disque vers ce répertoire. Physiquement tout ce qui sera sur le répertoire /media/backup_innogreentech sera sur le disque dur externe. Pour monter le disque il faut que le répertoire soit vide.
Malheureusement ce montage n'est pas permanent, si le Raspberry redémarre le montage sera perdu. Pour le rendre persistant il nous faut enregistrer ce montage dans le fichier fstab (files system table). Il sera lu au démarrage de notre Raspberry. Récupérons l' UUID de notre disque afin qu'il soit reconnu quelque soit la prise USB utilisée, UUID ne changera pas contrairement à son nom matériel (/dev/std). Pour cela nous utilisons la commande blkid.
Vous trouverez l'UUID facilement: celui de mon disque est UUID="26b9f305-f2aa-4321-bfc2-6531689df2ae " Nous pouvons maintenant faire le montage du disque dans le fichier fstab.
Ajoutons cette ligne pour monter notre disque dur définitivement.
Une fois enregistré, nous pouvons tester notre montage avec la commande suivante, en cas d'erreur vous en serez informés.
Tout c'est bien passé? Vous pouvez naviguer sur votre disque dur via le dossier que nous avons créé.
Notre raspberry est prêt à être utilisé comme serveur web. |
Précédemment nous avons installé Adminer pour avoir une interface graphique permettant de manager notre base de données. Cependant PhpMyAdmin est souvant utilisé pour faire cela et il est vrai qu'il a des fonctionnalités que n'a pas Adminer. Malheureusement je ne suis pas arrivé à l'installer via le depot du raspberry. J'ai donc employé une autre méthode dont je vous faits part ici. Elle est un peu plus compliquée, mais après ce que l'on vient de faire plus rien ne peut nous arrêter ;-). Tout d'abord nous devons télécharger le fichier compresser de Phpmyadmin depuis leur site officiel. Avant cela nous allons nous positionner sur la racine de l'utilisateur puis lancer le téléchargement du fichier, de la dernière version avant la 5.
wget permet de transférer des fichiers depuis ou vers une adresse réseaux. Une fois le téléchargement terminer, nous décompressons le dossier grâce à la commande tar, l'archive est enregistrée dans le dossier phpMyAdmin-4.9.7-all-languages
Avec la commande mv nous allons déplacer et renommer le dossier vers le dossier d'exploitation de l'application.
Tout comme pour adminer il nous faut créer un lien symbolique vers le répertoire web.
Il nous faut configurer Phpmyadmin, pour cela nous allons copier et renommer un fichier exemple de configuration avec l'aide de la commande cp. Ce nouveau fichier contiendra notre configuration. sudo cp /usr/share/phpmyadmin/config.sample.inc.php /usr/share/phpmyadmin/config.inc.php Editons le fichier créé. sudo nano /usr/share/phpmyadmin/config.inc.php Dans le paramètre Blowfish_secret, nous devons informer une phrase de 32 caractères qui permettra de crypter les cookies d'authentification. $cfg['blowfish_secret'] = 'innogreentechentreprisedepartage'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ Informer un utilisateur de la base de données avec suffisamment de droits pour modifier celle-ci. Précédemment nous avons attribué un mot de passe a root, vous pouvez informer cet utilisateur. $cfg['Servers'][$i]['controluser'] = 'root'; Nous devons maintenant décommenter les lignes suivantes pour activer Phpmyadmin. /* Storage database and tables */ Nous avons finit la première partie de la configuration, Phpmyadmin est maintenant opérationnel. Vous pouvez le tester à cette adresse. Nous pouvons nous connecter avec n'importe quel utilisateur informé dans la base de donnée. Comme notre œil est aussi vif que notre esprit nous remarquons cette alerte. Bon c'est certainement vrai sur la plupart des installations. Mais notre mémoire tout aussi vive que notre esprit nous rappelle que nous devons préserver notre carte micro SD des écritures. C'est pour cela que nous allons créer un dossier temporaire sur notre disque dur afin de préserver notre carte SD. Pour cela dans un premier temps nous allons créer un dossier sur le montage que nous avons fait précédemment. Maintenant vous savez faire: Nan! je vous donne un petit coup de main, créons dans un premier temps un dossier grâce à la commande mkdir dans lequel nous allons accueillir le cache. sudo mkdir -p /media/backup_innogreentech/phpmyadmin_cache Ensuite ouvrons de nouveau le fichier de configuration. sudo nano /usr/share/phpmyadmin/config.inc.php Puis nous ajoutons à la fin du fichier l'adresse du fichier temporaire. $cfg[‘TempDir’] = ‘/media/backup_innogreentech/phpmyadmin_cache’; Dernière étape nous donnons les droits au service web d'accéder au répertoire que nous venons de créer en le rendant propiétaire. sudo chown -R www-data:fabrice /media/backup_innogreentech/phpmyadmin_cache Une fois fermé et enregistré vous pouvez accéder à votre interface PHP l'erreur disparaît. Honnêtement le transfert du cache sur le disque externe ralenti un peu la navigation. Mais ici j'utilise un disque qui date et qui utilise le protocole USB2, je pense que nous pouvons faire mieux. jPhpMyAdmin vous demandera de créer une base de données PhpMyAdmin. Faites le pour profiter pleinement de ses fonctionnalités. Good way, keep contact like and share. |