🗒️ Notice : environnement de déploiement

Un serveur vous est mis à disposition comme environnement de déploiement pour apprendre à y déployer des logiciels, et pour expérimenter l’usage du moteur de conteneurisation Podman. Sur le réseau interne de la faculté des sciences et techniques, il est accessible sous le nom d’hôte “podman” .

Quelques caractéristiques importantes de cet environnement d’accueil :

  • On ne peut accéder à ce serveur que depuis le réseau interne de l’université. Vous ne pouvez notamment pas vous y connecter depuis l’extérieur de l’université (sauf via eduVPN).

  • On ne peut pas y ouvrir de session graphique, et la seule manière de s’y connecter est au travers du protocole SSH, via un terminal et à l’aide d’un clavier. Voir Section 1.

  • Le moteur de conteneurisation Podman y est installé. C’est dans cet environnement que vous apprendrez à manipuler des images et à déployer des conteneurs.

  • Votre répertoire étudiant habituel n’est pas accessible depuis ce serveur. Vous possédez à la place un répertoire utilisateur uniquement pour ce serveur, non partagé avec votre répertoire étudiant habituel. Cela permet d’éviter que vos expériences de déploiement aillent altérer ou détruire vos données utilisateur habituelles.

  • On ne peut accéder à ce serveur que par les ports réseau 8080 à 9089 (sans compter le port 22 utilisé par SSH). Ainsi, vos déploiements devront toujours écouter sur des ports de cette intervalle, et plus précisément sur les ports d’un intervalle qui vous sera attribué individuellement, voir Section 2.1.

Quelques détails supplémentaires

Même si cela n’est pas utile pour les TPs, vous pouvez noter que :

  • Ce serveur est une machine virtuelle exécutée sur une machine physique du Service Commun Informatique (SCI) de l’université.

  • Le système d’exploitation installé est la distribution Linux appelée Debian, en version 13. C’est un système d’exploitation utilisé de manière très courante pour un immense nombre de serveurs à travers le monde.

1. Se connecter au serveur de déploiement

Le protocole SSH est un protocole réseau standardisé permettant de se connecter de manière sécurisée à un environnement Linux distant. Même si différents outils existent pour créer une connexion SSH, le plus fréquent est d’utiliser l’utilitaire ssh du même nom. Cet utilitaire s’utilise uniquement via une interface textuelle depuis un terminal.

Le serveur de déploiement auquel on souhaite se connecter est accessible par le nom d’hôte podman.

1.1. Se connecter avec mot de passe

Pour se connecter par SSH au serveur de déploiement, il faut appeler l’outil ssh en lui indiquant qu’on souhaite se connecter sur l’environnement podman à l’aide du même identifiant que son compte université habituel :

[sur votre poste de travail local]
$ ssh EXXXXXX@podman

en remplaçant EXXXXXX par son identifiant étudiant habituel.

Il est nécessaire d’écrire votre identifiant étudiant en MAJUSCULES.

Si c’est la première fois que vous vous connectez, vous aurez un message similaire à celui-ci :

The authenticity of host 'podman.ensinfo.sciences.univ-nantes.prive (172.16.129.149)' can't be established.
ED25519 key fingerprint is SHA256:WF+uCve0uqbVBlnsIB9vMGj/4p1Pihlxtfz79KjpYEs.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])?

Ce message est parfaitement normal : il permet (si besoin) de vérifier l’identité du serveur SSH auquel vous vous connectez, et de confirmer explicitement en saisissant yes que c’est bien le bon serveur.

Une fois ce message vu une première fois, il ne s’affichera plus par la suite, car le serveur SSH sera mémorisé comme "sûr".

Il faut alors saisir votre mot de passe dans une boîte de texte invisible, puis valider.

Mais on peut observer que vous êtes normalement déjà connecté⋅e avec un compte utilisateur eXXXXXX sur la machine de TP que vous utilisez. On peut donc simplifier la commande précédente en omettant l’identifiant de connexion à utiliser, car EXXXXXX sera utilisé par défaut :

[sur votre poste de travail local]
$ ssh podman
podman ssh
Figure 1. Exemple de connexion SSH au serveur de déploiement

Une fois la connexion établie, vous verrez que votre invite de commande (aussi appelé prompt) aura changé de couleur, et ressemble désormais à :

[sur l’environnement de déploiement distant]
EXXXXXX@podman:~$

Vous êtes désormais en connexion à distance sur le serveur de déploiement ! Toutes les commandes que vous exécutez ici se produiront sur ce serveur distant, et non sur le poste devant lequel vous vous trouvez.

Par exemple si vous exécutez la commande :

[sur l’environnement de déploiement distant]
$ ls

vous pourrez observer que les fichiers ne sont pas identiques à ceux de votre répertoire étudiant habituel.

De même, si vous exécutez la commande :

[sur l’environnement de déploiement distant]
$ firefox

vous aurez en retour le message commande introuvable, car Firefox n’est pas installé sur le serveur de déploiement.

Par contre, si vous exécutez la commande :

[sur l’environnement de déploiement distant]
$ podman --version

vous aurez alors un retour vous indiquant la version installée de Podman.

Enfin, pour quitter la session SSH, faire simplement la commande :

[sur l’environnement de déploiement distant]
$ exit

1.2. Se connecter avec une clé SSH

Avec la méthode présentée plus haut, il est nécessaire de saisir un simple mot de passe à chaque connexion SSH. Pour rendre plus sûres et plus rapides vos connexions SSH, il est possible d’activer la connexion par clé SSH, qui remplace alors la connexion par mot de passe.

Pour cela vous devez avoir au préalable généré votre clé SSH personnelle comme indiqué dans la section dédiée de la notice infrastructure.

Si cela est déjà fait, la commande suivante permet de mettre en place la connexion par clé SSH au serveur de déploiement (à ne faire qu’une seule fois) :

[sur votre poste de travail local]
$ ssh-copy-id podman

Il faut alors saisir votre mot de passe utilisateur, nécessaire pour ouvrir une brève connexion SSH pour copier la clé.

Et normalement tout est désormais bon ! Pour tester, faites :

[sur votre poste de travail local]
$ ssh podman

et la connexion se fera à l’aide de votre clé SSH et sans nécessiter votre mot de passe de connexion.

2. Utiliser le serveur de déploiement

Une fois connecté sur le serveur, on peut utiliser Podman comme présenté dans le cours dans les chapitres 📘 Conteneuriser (manuellement) un logiciel en image de conteneur et 📘 Créer et manipuler des conteneurs.

D’autres points techniques vous sont expliqués ci-après.

2.1. Usage discipliné des ports disponibles

Comment évoqué précédemment, les seuls ports réseaux que nous avons le droit d’utiliser sur le serveur de déploiement sont les ports 8080 à 9089. Étant donné que ce serveur sera partagé par tous les étudiants, il est nécessaire de faire preuve d’une certaine discipline pour partager ces ports entre tous les usagers du serveur.

Une liste intitulée "Attribution par étudiant⋅e des ports réseaux du serveur de déploiement" est disponible sur Madoc, et attribue à chaque étudiant⋅e un intervalle de ports. Il vous est demandé de ne pas faire de publications de ports avec Podman en dehors de votre intervalle.

Il ne sera pas possible de facilement vérifier que chaque étudiant⋅e respecte cette règle, c’est pourquoi nous comptons sur votre rigueur et votre courtoisie pour ne pas aller utiliser des ports réservés à vos camarades !

2.2. Créer et éditer un fichier

Lors de votre travail avec Podman sur le serveur de déploiement, il peut arriver que vous ayez besoin de créer ou modifier un fichier dans cet environnement, par exemple un fichier Containerfile ou compose.yml. Or, comme évoqué précédemment, cet environnement ne possède pas d’interface graphique, et on ne peut y agir que par le terminal.

Il est possible à la place d’utiliser un éditeur de texte sans interface graphique, en utilisant un utilitaire console comme nano.

Pour créer ou ouvrir un fichier avec nano, depuis un terminal :

[sur l’environnement de déploiement distant]
$ nano monfichier

On arrive alors dans un éditeur de texte basique où tout doit se faire au clavier. On promène un indicateur de position dans le texte à l’aide des flèches directionnelles, et on écrit là on l’indicateur se situe.

nano
Figure 2. Exemple d’écriture de fichier avec nano

On peut voir en bas de l’écran un ensemble de raccourcis écrits sous la forme ^W ou ^X. Le symbole ^ signifie qu’il faut utiliser la touche clavier CTRL pour réaliser le raccourci. Par exemple, ^X signifie qu’il faut faire CTRL + x pour exécuter l’action correspondante.

Les raccourcis les plus importants sont les suivants :

  • CTRL + o : enregistrer le fichier (faire Entrée pour valider le nom du fichier)

  • CTRL + w : rechercher dans le fichier

  • CTRL + k : supprime la ligne actuelle

  • CTRL + x : quitte l’éditeur

Pour copier et coller du texte sélectionné dans un terminal, la bonne manipulation est CTRL+SHIFT+c (pour copier), et CTRL+SHIFT+v (pour coller).

2.3. Transférer des fichiers

Comme évoqué précédemment, le serveur de déploiement n’a pas directement accès à votre répertoire étudiant habituel. Il peut cependant être utile de copier des fichiers depuis votre répertoire étudiant vers le serveur, ou inversement depuis le serveur vers votre répertoire étudiant.

Voyons deux méthodes très différentes pour faire de tels transferts de fichiers.

2.3.1. Via scp

L’utilitaire scp est capable de copier des fichiers d’une machine à une autre à l’aide du protocole SSH.

Pour des raisons de sécurité, il est conseillé de ne pas utiliser une version de scp antérieure à la version 9.0 de OpenSSH. Si ce n’est pas possible, il faut privilégier l’utilitaire rsync en lieu et place.

Pour copier un fichier vers le serveur de déploiement depuis un poste Linux :

[sur votre poste de travail local]
$ scp monfichier podman:~
Pour rappel, le symbole ~ est un raccourci qui signifie répertoire utilisateur, et que dans cette commande cela fait référence à votre répertoire utilisateur sur le serveur podman.

Si on souhaite copier le fichier dans un sous-répertoire appelé mon_repertoire_distant, on peut faire :

[sur votre poste de travail local]
$ scp monfichier podman:~/mon_repertoire_distant

Pour copier un répertoire vers le serveur de déploiement depuis un poste Linux :

[sur votre poste de travail local]
$ scp -r mon_repertoire podman:~

On notera l’usage de l’option -r qui signifie "copie récursive" et qui est nécessaire pour copier un répertoire.

Pour télécharger un fichier situé sur le serveur de déploiement, vers le répertoire actuel d’un poste Linux :

[sur votre poste de travail local]
$ scp podman:~/monfichier .
Pour rappel, le point (.) est un raccourci qui signifie "répertoire courant".

2.4. Gérer ses données et son espace disque sur le serveur

Comme expliqué précédemment, chaque utilisateur du serveur de déploiement possède son propre espace de stockage sur ce dernier. Cet espace peut être utilisé pour effectuer des déploiements de logiciels, mais est également utilisé par Podman pour stocker toutes les données dont il a besoin.

En particulier, Podman utilise votre espace sur le serveur afin de stocker :

  • toutes les images de conteneurs téléchargées ou créées,

  • tous les conteneurs créés.

L’espace utilisé peut donc monter très très vite ! Pour ne pas dépasser votre quota, il vous est recommandé, à la fin de chaque séance de TP ou de chaque période de travail, de faire les commandes suivantes :

Première chose simple faire, vous pouvez stopper tous vos conteneurs :

[sur l’environnement de déploiement distant]
$ podman container stop --all

Puis vous pouvez supprimer tous vos conteneurs stoppés :

[sur l’environnement de déploiement distant]
$ podman container prune

Ainsi que vos réseaux virtuels désormais non utilisés :

[sur l’environnement de déploiement distant]
$ podman network prune

Enfin, vous pouvez supprimer toutes les images de conteneurs que vous avez téléchargées lors de vos créations de conteneurs :

[sur l’environnement de déploiement distant]
$ podman image prune --all

Il est également possible de remettre entièrement les données de Podman (images, conteneurs, réseaux, etc.) à zéro à l’aide de la commande suivante :

[sur l’environnement de déploiement distant]
$ podman system reset

Vous avez créé un certain nombre de répertoires et de fichiers pour vos conteneurs, et ces derniers ont également créé de nouveaux fichiers au sein de des répertoires que vous leur avez fourni par montage.

Cependant, si vous souhaitez supprimer toutes les données créées par vos conteneurs, par exemple à l’aide de la commande rm -rf <mon répertoire>, vous ferez parfois face à des erreurs de permission !

Pour bien comprendre ce qu’il se passe, et pour résoudre ce problème, se référer à la section correspondante du chapitre sur l’exécution de conteneurs.