Les logiciels

Pour développer les logiciels MytinyDC, j’utilise l’IDE “Visual Studio Code” la suite de développement opensource de Microsoft. L’intégralité du code source est écrit en Bash et Javascript. La partie serveur est confiée à Nodejs (Javascript), le contrôle qualité est assuré par SonarQube, les tests unitaires exécutés avec  Mocha (fonctions client et serveur) et Selenium (navigation). Le code est stocké sur un Gitlab, doté de toutes les fonctionnalités de travail en équipe. La documentation originale est été rédigée sur LibreOffice et actuellement en cours de conversion GitLab-Wiki (markdown).

J’ai choisi un modèle monolithique à base de plugins. Chaque fonctionnalité du Datacentre est représentée par un plugin (DNS, DHCP, Firewall, répartiteur de charge,…). Ceci permet une souplesse tant en terme d’utilisation que de codage. Les fonctions d’un plugin peuvent être utilisées par un autre. La partie serveur répond aux normes “Rest API”, les connexions aux différents serveurs à gérer, se font au travers d’un canal SSH par échange de clés.
** Avril 2019 : Changement de cap, j’ai décidé de redévelopper l’UI avec ReactJS et Bootstrap, en conservant la partie backend (API).

La gestion du Datacentre

J’ai démarré les développements logiciels mi 2017. J’ai commencé par des ” proof of concept (POC)” en PHP, puis réécrit en JavaScript pour générer application NodeJS. Tout ceci m’a permis d’assurer la faisabilité du cahier des charges de chaque plugin. Le cahier des charges est fait pour énoncer les fonctionnalités du programme, ainsi que ses limites. Les POC concernent les services : DNS, DHCP/BOOT, OpenVPN, Monitoring, Haproxy pour la répartition de charge, lecture un contenu d’un fichier de log, Firewall/Routeur (iptables), d’outils permettant la mise en place automatisée des hébergements de sites avec WordPress, d’une instance Nextcloud, la provision automatique de nouveaux serveurs grâce à BOOTP.

Je réalise les développements qui permette l’intégration de toutes ces fonctionnalités. Mon choix s’est porté sur les langages Bash et Javascript. Simples à apprendre pour les novices, très puissants pour les experts, et supportés tant côté client, que côté serveur (Javascript). L’avantage majeur de ce type de développement est d’éviter le “Switch” entre différents langages. Vous pouvez de plus partager les développements entre la partie serveur, la partie cliente.

La première étape consiste à paramétrer le réseau du Datacentre, j’ai démarré par la gestion du DNS. Le second Plugin sera DHCP/Bootp. Le POC (proof of concept) BOOT/DHCP me permet de provisionner un serveur vierge en moins de 4 mn de manière automatisée. L’intégralité de ce processus est écrit en langage Bash. Les serveurs Raspberry ou Rock64 ont la possibilité de démarrer à partir du réseau (BOOTP/DHCP/NFS/TFTP) et leur lecteur de carte SD est “hotplug”. C’est une fonctionnalité importante pour un Datacentre.

Le développement d’un plugin consiste à réaliser un module permettant de construire le ou les fichiers de configuration d’un service et de les présenter à l’administrateur. Qui décidera ou pas de leur mise en production. Cette méthode pédagogique permet de mieux comprendre le contenu des fichiers de configuration d’un service logiciel.

Le graphique ci-dessous représente les plugins en cours de développement

L’application MYTINYDC-IM

Le tronc applicatif, n’est qu’un container à plugins. Il contient les fonctions d’authentification, et les libraires partagées à tous les plugins. Le paquet de livraison (DEBIAN) contiendra les plugins :

  • DNS – Configuration du service Bind9
  • DHCP/BOOTP/Installation automatisée (provision automatique d’un nouveau serveur). Mutualisation d’un seul et même plugin
  • FIREWALL – Configuration iptables IPV4
  • LOGSTREAM – Consulter les logs d’un serveur en streaming via une websocket/SS

Pour installer la version 1.0 de Mytinydc-IM – cliquez ici
Cette version fonctionne, je l’utilise fréquemment, la version 2 est en cours d’écriture et comportera un module de gestion HAPROXY pour la partie Layer7.

Solution finale souhaitée

L’application MYTINYDC-Openvpn

Vous trouverez ici la présentation de ce logiciel : https://www.mytinydc.com/index.php/mytinydc-openvpn/

L’application MYTINYDC-Automation

Cette application permet de créer des automates ré-exécutables. La syntaxe d’écriture est celle utilisée pour écrire les shells Bash, donc très explicite pour un administrateur système. Voici un exemple d’automate, concernant la mise à jour d’un serveurs Debian. L’automate tient en 4 lignes de commande :

apt-get update
export DEBIAN_FRONTEND=noninteractive
apt-get -y upgrade
apt-get -y autoremove

Exécutez l’interpréteur qui prendra en paramètres, le script ci-avant et les adresses et/ou noms de serveur concerné. Une fois l’exécution de l’automate terminée, un rapport d’automatisation est présenté. L’exécution des traitements sur chaque serveur concerné est parallélisée.
Les automates disponibles à cet instant sont :

  • Création d’une base de données et utilisateur pour Mysql/MariaDB,
  • installation d’une application wordpress avec son Vhost pour apache2,
  • installation d’un serveur apache2 et Php7.3,
  • mise à jour d’un système Debian,
  • installation du service Nodejs version LTS,

Le projet “Mytinydc-automation” c’est ici (accès au Gitlab).