Projet Numérologie (Cours Linux)
- MON
- 2024-2025
- temps 2
- Manuela Barreto
L'objectif de ce travail est de suivre le « Projet Numérologie » créé par le Professeur François Brucker pour découvrir les bases du développement des services web.
Sommaire
Comment se Connecter au Serveur
Installer WSL
La première étape pour utiliser Linux sur Windows est d’installer WSL (Windows Subsystem for Linux). Pour cela, ouvrez le terminal et exécutez la commande suivante :
wsl --install
Cette commande activera les fonctionnalités nécessaires pour exécuter WSL et installera par défaut la distribution Linux Ubuntu.
Une fois l’installation terminée, vous devrez redémarrer votre ordinateur.
Si vous rencontrez des problèmes pendant l’installation, consultez la documentation officielle de WSL pour obtenir de l’aide.
Après le redémarrage, Ubuntu se lancera automatiquement. À cette étape, vous pourrez configurer votre nom d’utilisateur. Il est conseillé de choisir un nom simple et qui correspond à votre propre nom.
Générer un agent et une clé
Une fois le système Linux initialisé, il est nécessaire de configurer un agent SSH et de générer une clé pour s'authentifier auprès des serveurs.
Un agent SSH est un programme qui gère vos clés privées et facilite l'authentification sur des serveurs sans avoir à saisir votre mot de passe à chaque fois. Il stocke les clés privées en mémoire de manière sécurisée et les utilise automatiquement lorsque cela est nécessaire.
Les clés SSH se composent de deux parties :
- Clé privée : Elle doit rester confidentielle, car elle sert à prouver votre identité.
- Clé publique : Elle peut être partagée avec les serveurs pour qu’ils puissent vous authentifier.
Voici les étapes pour configurer l'agent et générer vos clés :
-
Lancez l’agent SSH avec la commande suivante :
eval "$(ssh-agent -s)"
Cette commande active l’agent, qui commencera à gérer vos clés.
-
Générez une paire de clés (publique et privée) avec la commande :
ssh-keygen
Pendant l’exécution, il vous sera demandé de fournir un nom pour le fichier de clé et, éventuellement, de définir un mot de passe supplémentaire pour sécuriser la clé privée.
-
Ajoutez la clé privée à l’agent SSH :
ssh-add
Cela permet à l’agent de stocker la clé privée en mémoire, ce qui simplifie son utilisation pour les connexions futures.
Après avoir suivi ces étapes, vos clés seront prêtes à être utilisées pour des connexions sécurisées aux serveurs.
Comment se connecter au serveur de l'École
Tout d'abord, nous devons copier notre clé publique qui sera utilisée pour l'authentification. Suivez ces étapes :
-
Accédez au répertoire où vos clés SSH sont stockées :
cd ~/.ssh
-
Affichez le contenu de la clé publique :
cat id_rsa.pub
-
Copiez la sortie affichée dans le terminal (le contenu de votre clé publique).
Ensuite, nous allons nous connecter au serveur de l'École. Les ordinateurs de l'École ne sont accessibles que si vous êtes déjà connecté au réseau interne de l'établissement. Cependant, pour accéder au serveur à distance (par exemple depuis chez vous), vous devez passer par le serveur intermédiaire sas1.ec-m.fr
, qui est accessible depuis Internet. Pour vous connecter à ce serveur, vous devrez utiliser votre identifiant de l'École.
La commande est la suivante :
ssh votre_identifiant@sas1.ec-m.fr
Par exemple, dans mon cas :
ssh mda-silveira@sas1.ec-m.fr
En exécutant cette commande, il vous sera demandé d'entrer votre mot de passe et d'accepter d'ajouter le serveur à la liste des hôtes connus (uniquement lors de la première connexion). Une fois la connexion établie avec le serveur sas1
, nous devrons ajouter notre clé publique à la liste des clés autorisées :
-
Accédez au répertoire
.ssh
sur le serveur :cd ~/.ssh
-
Éditez le fichier
authorized_keys
, qui contient les clés publiques autorisées :nano authorized_keys
-
Dans l'éditeur de texte qui s'ouvre, collez votre clé publique copiée précédemment à la fin du fichier.
-
Pour enregistrer le fichier dans l'éditeur nano, suivez ces étapes :
- Appuyez sur
Ctrl + O
pour sauvegarder. - Appuyez sur
Entrée
pour confirmer le nom du fichier. - Appuyez sur
Ctrl + X
pour fermer l'éditeur.
- Appuyez sur
Désormais, le serveur sas1
reconnaîtra votre clé publique, et vous pourrez vous y connecter sans avoir à entrer votre mot de passe.
Après avoir configuré la clé publique sur le serveur sas1
, vous pouvez l'utiliser comme passerelle pour accéder aux autres ordinateurs de l'École. Par exemple, pour vous connecter à l'ordinateur vauban43
, vous pouvez exécuter la commande suivante :
ssh vauban43
Notez que vous n’avez pas besoin de spécifier à nouveau votre identifiant, car il est déjà associé à la session active sur le serveur sas1
. Le SSH utilisera automatiquement le même utilisateur pour établir la connexion avec l’ordinateur cible.
Pour le cours de Linux, nous devons nous connecter au serveur aioli.ec-m.fr
. Cependant, l'accès à ce serveur nécessite une étape supplémentaire : vous devez envoyer votre clé publique (de votre identifiant de l'école) par e-mail à l'administrateur du serveur. L'administrateur utilisera cette clé pour créer un utilisateur associé à votre compte.
Une fois que l'administrateur aura terminé cette configuration, vous pourrez vous connecter directement au serveur aioli
.
En suivant toutes ces étapes, vous serez prêt à démarrer les projets du cours. Pour commancer, nous allons exit
des serveurs.
Configuration Bonus
Il est assez fastidieux de devoir taper tout le chemin pour se connecter à une machine, par exemple votre_identifiant@sas1.ec-m.fr
. Heureusement, il existe une manière de simplifier ce processus.
Sur votre système Linux, dans votre compte utilisateur (sans être connecté à un serveur), vous pouvez créer un fichier de configuration dans ~/.ssh/config
. Dans ce fichier, ajoutez le code suivant (en personnalisant avec vos informations) :
Host nom_du_raccourci_souhaité
HostName nom_de_la_machine
User nom_de_l_utilisateur
Host nom_du_raccourci_souhaité
Hostname nom_de_la_machine
User nom_de_l_utilisateur
ProxyJump nom_de_la_machine_intermediaire
Que se passe-t-il dans le fichier config
?
-
Host nom_du_raccourci_souhaité : C'est la configuration d'un raccourci pour une machine distante. Lorsque vous tapez
ssh nom_du_raccourci_souhaité
, SSH utilise les configurations suivantes pour se connecter à la machine spécifiée. -
HostName nom_de_la_machine : Ici, vous définissez le nom complet ou l'adresse IP de la machine à laquelle vous souhaitez vous connecter. Lorsque vous utilisez un raccourci dans le champ
Host
,HostName
est la machine réelle à laquelle vous vous connecterez. -
User nom_de_l_utilisateur : Ici, vous définissez le nom de l'utilisateur utilisé pour la connexion SSH. Plutôt que de taper le nom d'utilisateur à chaque fois, vous l'indiquez dans le fichier de configuration, et la connexion utilisera ce nom automatiquement.
-
ProxyJump nom_de_la_machine_intermediaire : Si vous devez passer par une machine intermédiaire pour accéder à votre destination finale (comme dans le cas de serveurs avec des accès restreints),
ProxyJump
définit le "saut" vers cette machine intermédiaire. Cela signifie que vous pouvez accéder à des serveurs internes qui ne sont pas directement accessibles de l'extérieur en passant par une machine intermédiaire (également appelée "jump host").
Pour rendre cela plus clair, je vais partager mon propre fichier ~/.ssh/config
en exemple :
Host sas1
HostName sas1.ec-m.fr
User mda-silveira
Host aioli
Hostname aioli.ec-m.fr
User agastache
ProxyJump sas1
Dans mon exemple :
-
sas1 : Il s'agit du raccourci que j'ai utilisé pour me connecter au serveur
sas1.ec-m.fr
avec l'utilisateurmda-silveira
. Lorsque j'exécutessh sas1
, le système sait qu'il doit se connecter àsas1.ec-m.fr
et utiliser l'utilisateurmda-silveira
. -
aioli : De la même manière,
aioli
est un raccourci qui se connecte au serveuraioli.ec-m.fr
avec l'utilisateuragastache
. Cependant, lorsque j'utilise le raccourciaioli
, le système se connecte d'abord au serveursas1.ec-m.fr
(grâce àProxyJump
), puis effectue le "saut" vers le serveuraioli.ec-m.fr
. Cela est utile lorsque certaines machines ne peuvent pas être accessibles directement.
Avec cette configuration, vous simplifiez la vie. Plutôt que de taper ssh mda-silveira@sas1.ec-m.fr
et ssh agastache@aioli.ec-m.fr
, je peux simplement taper ssh sas1
ou ssh aioli
dans le terminal.
Projet
Ce projet consiste à créer un site web qui associe chaque nom à un numéro en se basant sur une table de correspondance. Pour en savoir plus sur les détails du projet, consultez le site du projet.
Le projet est divisé en cinq étapes, avec une complexité croissante. Chaque étape explore un aspect différent du développement web.
Dans ce MON, je ne détaillerai pas la construction du code, car cela est déjà bien expliqué sur le site du projet. L'objectif ici est de montrer comment se connecter o serveur et comment récupérer le code prêt et l'exécuter sur le serveur, afin qu'il soit mis en ligne.
Je recommande vivement, tout au long de la lecture de ce MON, de consulter également l'explication du code, car cela vous permettra de mieux comprendre les concepts et la structure du projet. De cette manière, vous aurez une vision complète et claire du fonctionnement du système, depuis sa mise en œuvre jusqu'à sa mise en ligne.
Projet : Partie 1
Dans cette première partie du projet, nous avons mis en place tout ce qui est nécessaire pour le faire fonctionner côté frontend. La structure du projet à ce stade est la suivante :
.
├── index.html
├── main.css
├── mes_tests.js
└── numérologie.js
Pour cet exercice, axé sur les bases du développement de services web avec un focus particulier sur le déploiement sur des serveurs, nous n’allons pas nous concentrer sur la manière dont ce code a été écrit. L'objectif principal est de comprendre comment rendre ce site accessible sur le web.
Pour commencer, rendez-vous sur le répertoire GitHub de ce projet et téléchargez-le sur votre ordinateur.
La première modification que nous allons effectuer concerne le fichier numérologie.js
. Nous allons :
- Retirer l’accent du nom du fichier, en le renommant
numerologie.js
. - Mettre à jour la référence à ce fichier dans
index.html
pour pointer versnumerologie.js
au lieu denumérologie.js
.
Une fois ces ajustements faits, déplacez le dossier du projet vers votre environnement Linux.
Transférer le dossier vers le serveur souhaité
Suivez les étapes ci-dessous pour transférer et configurer le projet sur le serveur final :
-
Compresser le dossier du projet
Avant de transférer, nous allons compresser le dossier pour simplifier l’envoi :tar czvf projet_numerologie.tgz projet_numerologie
-
Transférer le fichier compressé vers le serveur
Dans cet exemple, nous utilisons le serveur aioli, mais il est nécessaire de passer par un serveur intermédiaire sas1 pour y accéder.- Transférez le fichier vers le serveur aioli ("directemente" grâce au fichier
~/.ssh/config
) :scp projet_numerologie.tgz aioli:.
- Transférez le fichier vers le serveur aioli ("directemente" grâce au fichier
-
Décompresser le fichier sur le serveur final
-
Connectez-vous au serveur final aioli :
ssh aioli
-
Extrayez le contenu du fichier compressé :
tar xzvf projet_numerologie.tgz
-
Supprimez le fichier compressé du serveur final :
rm projet_numerologie.tgz
-
Une fois ces étapes terminées, le projet sera décompressé et prêt à être mis en ligne sur le serveur final.
Aqui está a versão traduzida e melhorada em francês:
Mettre le projet en ligne
-
Vérifier le port du serveur :
Ouvrez votre navigateur et accédez à l’adresse de votre utilisateur :https://votre_utilisateur.aioli.ec-m.fr/
Vous verrez probablement une erreur 502 Bad Gateway, car aucun service n’est actuellement actif sur ce port.
-
Créer un test basique :
-
Connecté au serveur aioli, dans le répertoire
~/
, créez un dossier nomméstatic
:mkdir static
-
Accédez à ce dossier :
cd static
-
Créez un fichier
index.html
contenant le texte "Hello world" à l’aide d’un éditeur commenano
:nano index.html
-
Accédez au site statique de votre utilisateur :
https://votre_utilisateur.aioli.ec-m.fr/static
Vous devriez maintenant voir le texte "Hello world" dans le navigateur. Cela montre que le serveur est configuré pour afficher automatiquement le contenu statique existant.
-
Pour afficher votre projet sur le site principal, suivez les étapes suivantes :
-
Démarrer le serveur local :
- Accédez au répertoire de votre projet :
cd projet_numerologie
- Lancez un serveur HTTP avec la commande suivante :
(Ici, 1100 correspond à ma port. Pour connaître votre port utilisateur, exécutez la commandepython3 -m http.server --bind ::1 1100
id
et regardez votre uid. Il est votre numéro de port.)
- Accédez au répertoire de votre projet :
-
Vérifier le fonctionnement :
- Accédez au site principal de votre utilisateur :
Vous verrez désormais votre projet fonctionner.https://votre_utilisateur.aioli.ec-m.fr/
- Accédez au site principal de votre utilisateur :
-
Résoudre le problème de persistance :
Si vous fermez le terminal et rafraîchissez la page, l’erreur 502 réapparaîtra. Cela se produit parce que le serveur doit continuer à fonctionner même lorsque le terminal est fermé.
Pour que le site reste actif même après avoir quitté le terminal, nous utiliserons tmux (ou l’équivalent screen
). Tmux permet d’exécuter des processus en arrière-plan de manière persistante sur le serveur.
-
Créer une session tmux :
- Lancez une nouvelle session appelée
serveur_numerologie
:
Une nouvelle fenêtre tmux s’ouvrira.tmux new -s serveur_numerologie
- Lancez une nouvelle session appelée
-
Exécuter le serveur dans tmux :
- Dans la session tmux, lancez le serveur avec :
python3 -m http.server --bind ::1 1100
- Rafraîchissez le site dans votre navigateur pour vérifier qu’il fonctionne.
- Dans la session tmux, lancez le serveur avec :
-
Quitter la session sans arrêter le processus :
- Utilisez le raccourci
Ctrl + b
, suivi ded
pour détacher la session tmux tout en gardant le serveur actif.
- Utilisez le raccourci
-
Lister les sessions actives :
- Exécutez cette commande pour afficher les sessions tmux actives :
Vous verrez toutes les sessions en cours, y compristmux ls
serveur_numerologie
.
- Exécutez cette commande pour afficher les sessions tmux actives :
Voici une cheat sheet des commandes et raccourcis utiles pour tmux :
Avec ces étapes, vous avez mis votre premier site en ligne ! Ce projet est simple et entièrement en frontend. La prochaine étape consistera à intégrer un backend et à comprendre les ajustements nécessaires pour un site complet.
Projet : Partie 2
Avec l’ajout du backend, notre projet a maintenant la structure suivante :
.
├── back
│ └── numérologie.js
├── index.js
├── package.json
└── static
├── index.html
└── main.css
Nous allons commencer de la même manière que pour le projet précédent. Téléchargez le projet sur GitHub et nommez-le projet_numerologie2
. Ensuite, nous retirerons l’accent sur le fichier numérologie.js
et nous procéderons aux mêmes étapes que précédemment : compresser le dossier, le transférer sur le serveur aioli et le décompresser.
Ensuite, accédez au dossier du projet en exécutant cd projet_numerologie2
et installez les dépendances nécessaires avec la commande :
npm install
Ajustements dans le fichier index.js
Il y a quelques ajustements à faire dans le fichier index.js
pour pouvoir l’exécuter correctement sur le serveur. Exécutez la commande suivante pour éditer le fichier :
nano index.js
Voici les modifications à apporter dans le fichier :
-
Changez la ligne
const hostname = '127.0.0.1'
par :const hostname = '::1';
-
Changez la ligne
const port = 3000
par :const port = '1100'; // Notez que 1100 est le nombre de ma port, il est différent pour chacun.
-
Modifiez la ligne
app.use("/static", express.static(path.join(__dirname, '/static')))
par :app.use("/numerologie", express.static(path.join(__dirname,'static')));
Une fois ces modifications effectuées, vous pouvez enregistrer le fichier et tenter d’exécuter la commande :
node index.js
Cependant, si cela ne fonctionne pas, il est probable que vous ayez un problème, car la port est déjà utilisée par votre site précédent. C'est dû au fait que tmux est en cours d'exécution et que le serveur de la partie 1 utilise déjà cette port. Pour résoudre ce problème, suivez ces étapes :
Résoudre le problème de la port occupée
-
Se connecter à la session tmux existante :
Exécutez la commande suivante :tmux a
-
Fermer la session tmux en cours :
- Appuyez sur
Ctrl + c
pour arrêter le serveur. - Puis, appuyez sur
Ctrl + d
pour quitter tmux.
- Appuyez sur
Maintenant, vous pouvez de nouveau exécuter le serveur avec :
node index.js
Cela devrait démarrer le serveur et l’afficher sur le site à l’adresse suivante :
https://votre_utilisateur.aioli.ec-m.fr/numerologie/
Cependant, comme précédemment, si vous fermez le terminal, le site cessera de fonctionner. Pour le maintenir en ligne, suivez à nouveau la procédure avec tmux :
Garder le serveur en ligne avec tmux
-
Créer une nouvelle session tmux :
- Lancez une nouvelle session avec le nom
serveur_numerologie
:
Une nouvelle fenêtre tmux s’ouvrira.tmux new -s serveur_numerologie
- Lancez une nouvelle session avec le nom
-
Exécuter le serveur dans tmux :
- Dans la session tmux, exécutez le serveur avec :
node index.js
- Rafraîchissez la page de votre site pour vérifier que le projet fonctionne correctement.
- Dans la session tmux, exécutez le serveur avec :
-
Quitter la session sans arrêter le serveur :
- Pour détacher la session tmux et la laisser tourner en arrière-plan, appuyez sur
Ctrl + b
, puis surd
.
- Pour détacher la session tmux et la laisser tourner en arrière-plan, appuyez sur
Une fois cela fait, le projet fonctionnera en permanence, même si vous fermez votre terminal.
Ainsi, la deuxième partie du projet est terminée. Vous avez réussi à mettre en ligne un projet avec un backend fonctionnel. Vous pouvez maintenant passer à l’étape suivante du projet.
Projet : Partie 3
Dans la troisième partie du projet, nous avons ajouté une base de données SQLite. Après les modifications apportées au code, la nouvelle structure du projet est la suivante :
.
├── back
│ └── numérologie.js
├── db.init.js
├── db.js
├── index.js
├── package.json
├── readme.md
└── static
├── index.html
├── main.css
└── prénoms.html
Nous allons commencer de la même manière que dans les parties précédentes :
- Télécharger le projet depuis GitHub ;
- Modifier le code pour retirer l'accent du nom du fichier
numérologie.js
et effectuer les corrections nécessaires suite à cette modification ; - Compresser le dossier du projet, le transférer vers le serveur souhaité, puis le décompresser.
Ensuite, nous effectuerons les mêmes ajustements que dans la partie précédente :
-
Modifiez la ligne
const hostname = '127.0.0.1'
par :const hostname = '::1';
-
Modifiez la ligne
const port = 3000
par :const port = '1100'; // Notez que 1100 est le nombre de ma port, il est différent pour chacun.
-
Modifiez la ligne
app.use("/static", express.static(path.join(__dirname, '/static')))
par :app.use("/numerologie", express.static(path.join(__dirname,'static')));
Une fois ces étapes initiales terminées, nous allons exécuter la commande npm install
pour installer toutes les dépendances nécessaires, puis exécuter la commande npm run init
pour initialiser la base de données. Enfin, lancez le projet en exécutant :
node index.js
N'oubliez pas de fermer les autres sessions tmux utilisées pour les autres parties du projet afin de libérer le port pour ce projet actuel. Maintenant, si vous accédez à votre site à l'adresse https://votre_utilisateur.aioli.ec-m.fr/numerologie/
, vous verrez que, lors du calcul du chiffre associé à votre nom, le site affiche également une phrase décrivant les caractéristiques des personnes portant ce nom.
Une fois encore, pour maintenir le site en ligne de manière indéfinie, nous utiliserons tmux :
Garder le serveur en ligne avec tmux
-
Créer une nouvelle session tmux :
Lancez une nouvelle session tmux appeléeserveur_numerologie
:tmux new -s serveur_numerologie
Une nouvelle fenêtre tmux s’ouvrira.
-
Exécuter le serveur dans tmux :
Dans la session tmux, lancez le serveur avec :node index.js
Rafraîchissez la page de votre site pour vérifier que le projet fonctionne correctement.
-
Quitter la session sans arrêter le serveur :
Pour détacher la session tmux et laisser le serveur tourner en arrière-plan, appuyez surCtrl + b
, puis surd
.
Ainsi, la troisième partie du projet est terminée. Vous avez réussi à mettre en ligne un projet avec une base de données. Vous pouvez maintenant passer à l’étape suivante du projet.
Projet : Partie 4
Après les modifications, la structure finale du projet est la suivante :
.
├── back
│ └── numérologie.js
├── db.init.js
├── db.js
├── index.js
├── modèles
│ ├── prénoms.js
│ └── signification.js
├── package.json
├── readme.md
├── routes
│ ├── api
│ │ └── index.js
│ └── signification.js
└── static
├── index.html
├── main.css
└── prénoms.html
Bien que de nombreuses modifications importantes aient été apportées à la structure et à la maintenance du code, très peu de choses ont changé concernant la manière de mettre ce site en ligne.
Ainsi, nous allons suivre exactement le même processus que dans la Partie 3, avec une seule différence : au lieu d'exécuter node index.js
, nous allons désormais utiliser la commande npm start
.
OBS: Le github du projet
Cela conclut la quatrième partie du projet. Vous avez maintenant un projet fonctionnel avec une structure plus complexe et des routes pour gérer différentes parties de l'application. Vous pouvez continuer à l'étendre ou ajouter de nouvelles fonctionnalités.