Infrastructure DevOps clé en main

Un serveur pour développer et tester en toute sérénité

Yo !
Je voulais vous parler de ma dernière mission en freelance dans une entreprise du secteur bancaire. En dix jours, j’ai eu l’occasion de travail sur pas mal de trucs : du CI/CD, de l’infra, des réseaux et même un peu de dev. C’était une super expérience pour monter en compétences et voir des trucs techniques sous un autre angle !

En quelques mots : poser les bases d’une infra DevOps sécurisée et scalable avec GitLab, Docker, Traefik, et OpenVPN dans un environnement entièrement distant.

Introduction

Une boîte du secteur bancaire m’a contacté pour une mission de Tech Lead. Le but ? Former leurs développeurs sur ReactJS et NestJS, mettre en place un process de dev qui tienne la route, participer aux réunions SCRUM, et les aider à bien cerner leurs besoins. Mais en arrivant, je me rends compte qu’il n’y avait aucun environnement technique : pas d’outil de versioning pour travailler à plusieurs, pas de serveur pour que le Product Owner puisse tester les features.

Problématique

Il fallait poser rapidement les bases d’une infra solide pour soutenir les projets techniques et booster la productivité de l’équipe. Petit détail qui change de mes anciennes missions : tous les développeurs bossent à distance, mais les serveurs doivent rester inaccessibles publiquement pour des raisons de sécurité. Un vrai challenge pour trouver le bon équilibre entre accessibilité et protection des données.

Je n’avais encore jamais eu l’occasion de monter un environnement complet de A à Z, donc j’ai tout de suite vu ça comme une super opportunité. Avec les défis techniques, surtout côté sécurité des données, je me suis proposé pour m’en occuper. Ça m’a permis de relever un défi pa$$ionnant et d’apporter une vraie solution durable pour l’équipe.

Analyse

La plupart des besoins étaient assez classiques : un outil de versioning et un serveur de test pour déployer les solutions développées. Mais là où ça se complique, c’est avec la contrainte d’inaccessibilité depuis le réseau public, tout en ayant des développeurs à distance. En général, ce genre de problème se règle en travaillant directement sur le réseau local. Alors pourquoi pas un VPN ?

Ayant une deadline courte et un budget limité, j’ai décidé de m’orienter vers des solutions existantes qui ont fait leurs preuves :

Proxmox

Un outil super puissant qui permet de déployer rapidement des machines virtuelles via une interface graphique simple et intuitive. Idéal pour gagner du temps et centraliser la gestion des VMs sans prise de tête.

Gitlab

Avec ses fonctionnalités comme la gestion des Merge Requests, le Container Registry, et la CI/CD, il s’impose comme un incontournable. Sa grosse communauté en fait une référence, et honnêtement, je n’ai jamais vu un autre outil utilisé en entreprise pour ce genre de tâches.

OpenVPN

Une solution open source ultra populaire pour mettre en place un VPN sécurisé. Facile à configurer et compatible avec presque toutes les plateformes, c’est l’outil idéal pour connecter des utilisateurs distants tout en protégeant les données sensibles. Sa fiabilité en fait un choix de référence dans de nombreuses entreprises.

Docker

Un outil super pratique pour exécuter des conteneurs. Il permet d’emballer une app avec tout ce qu’il faut pour qu’elle soit compatible sur tout les environnements que ce soit en dev, en test ou en prod. Simple, flexible, et clairement devenu un must-have pour travailler efficacement.

Alpine

Une distribution hyper légère, parfaite pour monter une VM dédiée à une seule tâche. Simple, rapide, et ça consomme presque rien en ressources. Idéal quand on veut aller droit au but.

Résultat

OpenVPN

J’ai installé OpenVPN sur une VM Alpine. Cette VM héberge aussi un serveur DNS, qui distribue des noms de domaine cohérents aux utilisateurs connectés au VPN. Pour renforcer la sécurité, j’ai mis en place une double authentification pour les utilisateurs. Chose vraiment facile avec cette solution. Certes, on y perd un peu en flexibilité, mais ici, c’était un choix nécessaire pour garantir une meilleure protection.

HTTPS

L’idée d’utiliser des noms de domaine me plaisait bien, mais je voulais aussi que les communications avec les différentes solutions passent par le protocole HTTPS. Pour ça, il faut des certificats SSL. Comme rien ne devait transiter sur le réseau public, il n’était pas question d’utiliser un serveur web publique pour répondre à un challenge HTTP-01. Du coup, pourquoi pas des certificats auto-signés ? Ou même aller plus loin et mettre en place ma propre autorité de certification (CA).

Dans les deux cas, cela nécessitait une configuration supplémentaire pour chaque utilisateur : les navigateurs web n’auraient pas reconnu ces certificats sans injecter manuellement soit les certificats eux-mêmes, soit l’autorité de certification. Mais j’ai trouvé une solution bien plus viable : le DNS-01 challenge. Ce mécanisme permet de générer un certificat SSL en modifiant les entrées DNS du domaine.

J’ai donc installé Traefik et lui ai donné accès à l’API permettant de gérer la zone DNS associée au nom de domaine. Grâce à cela, Traefik obtenait automatiquement des certificats signés par Let’s Encrypt pour mes noms de domaines privés. Bonus : les certificats se renouvellent automatiquement tous les X mois, sans aucune intervention manuelle. Une solution simple, propre et efficace.

Gitlab

GitLab a également été installé sur sa propre VM Alpine, le tout tournant sous Docker. Les runners sont eux aussi déployés dans des conteneurs. Docker offre une flexibilité précieuse : il permet de scaler facilement en fonction des besoins et de déplacer toute l’infrastructure rapidement si nécessaire.

J’ai mis en place un projet ReactJS de test pour configurer la CI/CD. L’idée était de valider chaque commit des développeurs en exécutant une série de tests. Plusieurs outils ont été installés pour s’assurer que le code respecte les bonnes pratiques, comme ESLint, Prettier et Jest.

J’ai donc configuré plusieurs jobs dans le pipeline pour vérifier automatiquement que ces outils confirment la validité du code du dernier commit. Une manière efficace de maintenir une qualité de code constante tout en automatisant les contrôles.

Imaginez : Vous êtes développeur, vous envoyez votre code. Quelques minutes plus tard, vous recevez une notification qui vous annonce que votre code n’est pas correctement formaté et que vos tests unitaires ne passent pas. Tout ça… un vendredi soir, juste avant de partir en week-end. Le rêve, non ? 😅

CEPENDANT ! Une fois que votre branche respecte tous les critères définis, il vous suffit de cliquer sur un seul bouton. Et là, magie : votre commit est automatiquement déployé sur un serveur de développement, accessible via les environnements GitLab, le tout sécurisé par un certificat SSL récupéré grâce à Traefik.

On va pas se mentir, quand tous les checks passent au vert, il y a une vraie satisfaction. Ce moment où vous savez que tout roule, c’est clairement le petit kiff du développeur. 😌

Le Product Owner peut maintenant déployer n’importe quelle version du code de ses développeurs, sans connaissances techniques ni de faire appel à un technicien. Il peut aussi supprimer facilement un environnement en un clic. Un vrai gain en autonomie et en réactivité pour gérer les tests et validations.

Conclusion

L’utilisation de Docker avec Traefik a été un vrai atout. Les étapes de déploiement se résument à manipuler des conteneurs Docker avec des tags spécifiques. Ces tags permettent à Traefik d’automatiser la génération des certificats SSL et de rediriger les requêtes vers les bons conteneurs. Une solution simple et efficace pour gérer les déploiements en toute tranquillité.

Une super mission, vraiment intéressante. Pas mal de cheveux arrachés en cours de route, j’ai dû recommencer plusieurs fois les installations pour atteindre mes objectifs sans faire de compromis. Mais ça en valait la peine !

Il y a encore des pistes d’amélioration : on pourrait peaufiner le système et ajouter des services supplémentaires pour renforcer la sécurité. C’est un projet qui a du potentiel pour aller encore plus loin.

Cette mission m’a permis non seulement de relever des défis techniques, mais surtout d’apporter une vraie valeur ajoutée à l’équipe : des outils fiables, une autonomie accrue pour le Product Owner, et un processus de développement fluide. Une expérience riche qui ouvre la porte à de futures améliorations encore plus ambitieuses.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut