Fleche retour aux articles de blogAutomatisation de la mise en place de l'infrastructure de serveurs

Lorsque l’on lance un nouveau serveur, il y a une étape indispensable : l’installation et la configuration de tous les outils nécessaires à son bon fonctionnement. Une solution est de réaliser une liste de ces outils, de leurs étapes d’installations et de configuration, et de la suivre pour chaque nouveau serveur, mais cela entraîne le risque d'oublier certaines parties.

Mots clés :

web

optimisations

Pour pallier au risque d'erreurs lors de la configuration de nouveaux serveurs pour les sites webs et les applications mobiles que nous réalisons, nous utilisons Ansible, un outil d’aide à la configuration, qui nous permet de créer un schéma à suivre puis de lancer automatiquement toutes les opérations nécessaires !

Grâce à ce mode de fonctionnement, nous gagnons en sécurité, mais aussi en productivité. Mettre en place Ansible la première fois peut prendre un peu de temps, mais permettra d'en gagner beaucoup pour chaque nouveau serveur. Au niveau des performances, Ansible étant idempotent, pas de soucis à se faire : les opérations ne s'exécutent pas si elles ont déjà été réalisées une fois. Donc si vous souhaitez ajouter des outils, il vous suffira de modifier votre script originel et de le ré-exécuter, sans impact sur votre installation existante !

Il est aussi possible de le lancer sur plusieurs serveurs en même temps !

Avant de passer sur un serveur de production, nous souhaitons bien tester nos installations localement. Afin de lancer les tests dans des conditions similaires à la production, nous avons mis en place un environnement qui permet d’utiliser Ansible directement sur un conteneur Docker en local sur nos ordinateurs.

Notre configuration

Dans notre configuration, nous avons mis en place plusieurs rôles que nous avons tendance à utiliser partout :

  • Oh-my-zsh : Si vous avez l’habitude à travailler sous Linux (ou même MacOs peut être) ce terminal doit vous parler. Il permet d'effectuer de nombreuses actions directement en écrivant des commandes sans passer par toutes les fenêtres du système.
    A l’origine Unix passe par SH. Par la suite une amélioration à été faite : BASH (Born Again SHell) qui ajoute pas mal de fonctionnalités et est maintenant installé par défaut sur la plupart des systèmes Linux.
    Nous nous servons beaucoup du terminal et donc nous cherchons encore plus de fonctionnalités, c’est pour ça que nous utilisons OhMyZsh.
    Ce plugin ajoute de nombreuses fonctionnalités et permet de personnaliser entièrement l’outil. Comme ils le disent sur leur page GitHub : Oh My Zsh will not make you a 10x developer...but you may feel like one.

  • Docker : Il fût un temps où la modification de fichiers pouvait se faire sans accro sur n’importe quel ordinateur, avant d’être transposé via FTP sur un serveur. Mais aujourd’hui, le monde de la tech évolue très rapidement et selon les versions des serveurs nos fichiers ne seront pas interprétés de la même façon : cela peut créer des bugs sur le serveur alors que tout semble fonctionner sur un des ordinateurs utilisé pour le développement.
    C’est pour cela que nous utilisons des “Machines Virtuelles”, identiques au serveur en terme de configuration, sur nos ordinateurs pour être certains que tout sera interprété de la même façon ( Docker créé des conteneurs et pas des machines virtuelles mais l'idée est la même, en moins énergivore et donc plus rapide).

  • Traefik : Un serveur à une adresse par défaut, son adresse IP, mais parfois nous avons besoin d’héberger plusieurs outils sur un seul serveur, pour optimiser nos ressources. Traefik nous permet d’y arriver en agissant comme un aiguilleur du ciel (ou un facteur si vous préférez) : tous les paquets qui arrivent à l’adresse du serveur sont ensuite redirigés au bon destinataire. Il nous permet également de sécuriser toutes les demandes en passant automatiquement les requêtes HTTP (Hyper Text Transfer Protocol) en HTTPS (Hyper Text Transfer Protocol Secure) ce qui évite les attaques de type Man in the Middle.

  • Portainer : Des containers par-ci, des containers par-là, un pour chaque site, un pour les bases de données, un pour gérer les outils d’analyse… On croule vite sous les instances de Docker dans nos serveurs. Or, même si nous sommes des experts de la navigation au clavier et à la ligne de commande, une interface utilisateur plus graphique ça a parfois du bon, notamment pour connaître en un coup d’oeil l’état de tous nos projets ! C’est exactement ce que fait Portainer : via une interface web il nous permet de rapidement voir tous nos containers Docker et ainsi que leurs états. Petit plus pratique : il permet également de lancer des commandes dans ces containers directement depuis le navigateur !

  • MariaDB: Une base de données ! Si MySQL reste un grand acteur du domaine, nous avons une préférence pour sa petite soeur MariaDB. Presque littéralement d’ailleurs, car ces deux technologies ont le même père : Michael Widenius ! Même plus, elles portent le nom de ses deux (vraies) filles : My et Maria.
    Au départ, l’idée derrière MariaDB était d’être entièrement compatible et au même niveau que MySQL tout en restant Open-Source. De nos jours il va encore bien au-delà grâce aux clusters qui nous permettent de mettre plusieurs serveurs de base de données en relation, pour optimiser la redondance des données et donc la sécurité de celles-ci, en nous assurant d’en avoir plusieurs copies synchronisées dans des endroits différents.

Si vous voulez tester tout ça nous avons créés une base publique sur GitHub.