Ravidhu Dissanayake

Deployer des containers Docker en Ssh avec Gitlab

Le pré requis :

  • avoir un compte et un projet sur Gitlab.
  • Avoir une clé Ssh privée et publique.
  • Connaître les commandes Docker.
  • Une machine hôte pour l’application avec Docker installé.

Création de l’accès Ssh sur la machine hôte

Créer un utilisateur sur le serveur distant et déployer la clé publique sur le compte avec les commandes suivantes :

Ouvrez la configuration de serveur Ssh :

Modifiez le fichier avec les règles suivantes :

Configuration du déploiement Gitlab

Créer un fichier .gitlab-ci.yml à la racine de votre projet. Nous commençons ce fichier par déclarer les stages :

Ces stages représentent les étapes du déploiement. Chaque étape peut avoir plusieurs tâches. Une étape n’est valide que lorsque l’ensemble des tâches sont bien réalisées. Ensuite nous allons déclarer une variable :

Cela va indiquer le driver par défaut d’accès au stockage. Ce driver overlay2 est plus performant pour gérer les fichiers des images Docker. Ensuite, nous allons mettre en place notre première tâche :

Ici on build une application NodeJS. On commence par indiquer à quelle étape se situe cette tâche. On précise par la suite l’image dans laquelle on veut exécuter les commandes. Ainsi dans l’exemple, chaque ligne de « script » est lancée dans le container NodeJS en version 12. On peut imaginer rajouter une autre tâche, il faudra juste préciser le stage à test. Nous passons ensuite à l ‘étape suivante, la création du container :

Ici nous utilisons l’image docker pour créer un image et l’envoyer sur le registre de Gitlab. On voit ici un des multiples avantages de Gitlab : un registre Docker privé ! le service docker:dind permet d’avoir un environnement propre pour le build de l’image docker ( pour avoir plus de détail, c’est par ici ). Enfin nous terminons par l’étape du déploiement sur la machine hôte :

La variable $SSH_PRIVATE_KEY est déclarée dans Gitlab dans la section Settings > CI/CD > Variables de votre projet . Dans l’exemple, le port 8080 est choisi de manière complètement arbitraire, à vous d’en définir un pour votre application. Ici l’application écoute sur le port 8000 dans le container et sera accessible à l’adresse XX.XXX.XXX.XX:8080.

Enjoy !

Voilà il ne vous reste plus qu’à personnaliser le fichier .gitlab-ci.yml pour l’adapter à vos besoins en déploiements. Attention, cette configuration est très basique et va lancer le déploiement de votre application à chaque fois que vous poussez un commit dans le dépôt Git.

Je vous encourage donc à configurer plus finement le lancement du déploiement. La documentation complète du fichier .gitlab-ci.yml est accessible ici. Enfin, pour en savoir plus sur les variables propres à Gitlab CI, comme $CI_REGISTRY_IMAGE, vous pouvez trouver la documentation complète ici.

Leave a Comment