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 serveurs, à gérer, se font au travers d’un canal SSH par échange de clés.
Mon projet,  étant à seul but éducatif, j’ai par conséquent volontairement fait le choix de ne pas implémenter de framework, tels Bootstrap. Ce choix m’oblige à produire plus de lignes de codes, mais permet de démontrer le fonctionnement d’un processus de A à Z. J’implémente Jquery et le framework W3school pour la partie CSS. La documentation “développeur” est enrichie selon le cycle de développement.
(** Avril 2019) Changement de cap, j’ai décidé de redévelopper l’UI avec ReactJS et Bootstrap, en conservant la partie backend (API). Toute la documentation “développeurs” est donc obsolète. J’en profite pour réorganiser l’ensemble du projet (API, module npm, etc…) et de réaliser une nouvelle documentation

Diagramme de séquences

J’ai développé un outils permettant de générer le diagramme de séquences d’un processus exécuté sur le navigateur. Son utilisation est simple : une ligne de code dans la partie client (navigateur), où vous souhaitez, en indiquant un “container” de l’IHM. Lors de son exécution, ce programme intercepte la pile d’exécution, et ajoute un bouton dans le container IHM indiqué. En cliquant sur ce dernier, un appel serveur (Rest Api), suivi de la pile, en paramètre, génère et présente le diagramme de séquences dans un nouvel onglet. Cette fonctionnalité présente deux intérêts : mettre à jour la documentation plus rapidement, et obtenir une représentation très explicite de la pile d’exécution. Son implémentation côté serveur (NodeJS) est envisagée…

 

Diagramme de séquences

 

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 instannce 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 Javascript et Bash. Simples à apprendre pour les novices, très puissant pour les experts, et supporté tant côté client, que côté serveur. L’avantage majeur de ce type de développement est d’évite 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). C’est une fonctionnalité importante pour un Datacentre.

Le développement d’un plugin consiste à réaliser un module permettant de construire les fichiers de configuration d’un service et de les présenter à l’administrateur. Qui décidera ou pas leur mise en production. Cette méthode pédagogique permet de comprendre, avec la documentation d’administration, 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) contient 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

Solution finale souhaitée

Documentation développeur

Pour vous assister dans le développement d’un plugin, j’ai créé une documentation “développeur”. Cette procédure permet de prendre en main rapidement le framework, et surtout de rendre homogène l’application (code couleur, explication de certaines fonctions, etc..). La documentation sous forme de Wiki est disponible ici.

L’application MYTINYDC-Openvpn

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

Les images systèmes (en cours de fabrication) – Obsolète

  1. Image Raspberry PI – Permettant la mise en place du démarrage par le réseau (carte SD).
  2. Image Rock64 – Permettant la mise en place du démarrage par le réseau (carte SD).
  3. Image Raspberry PI – Serveur DNS/DHCP-BOOTP Permettant de créer le flux de démarrage d’une unité par le réseau (carte SD).

Post-installation : login pi/mytinydc – apt update – apt upgrade – dkpg-reconfigure tzdata – reboot – passer root : sudo bash