Table des matières

Contribuer / Tester l'environnement de l'AMIPO en local sur son poste de dev

Environnement de dev

L'environnement de dev repose sur l'utilisation de machine virtuelles (VM). Pour nous simplifier la tache, nous utilisons le logiciel Vagrant, qui nous permet d'automatiser la création de VM.

Il faut donc installer Vagrant. La procédure est décrite dans le README.md du projet ici : https://framagit.org/amipo/amipo-infra.

Ensuite, le déploiement sur tous nos environnements du Developpement, au Staging à la Produciton est automatisé avec le logiciel Ansible.

Vagrant

Nous utilisons Vagrant pour construire l'environnement de Dev. L'environnement de Dev doit est déployable par chaucun sur son propre ordinateur personnel, de façon homogène, standard et automatisée. Pour cela, Vagrant créé et gère des Machines Virtuelles sur lesquels sera déployé l'environnement de Dev.

Liste des VMs :

Synoptique du déploiement

  1. Création de la VM Controller avec Debian Stretch
  2. Ajout de l'IP de la VM Controller dans le fichier /etc/hosts de la machine hote
  3. Provisionnement de l'environnement du Controller avec l'environnement Ansible fournit par Vagrant (Ansible provisioner)
  4. Création d'un volume disk autonome séparé pour la VM Amipo1 pour la (pas détruit à la destruction de la VM)
  5. Création de la VM Amipo1 avec Debian Stretch
  6. Ajout de l'IP de la VM Amipo1 dans le fichier /etc/hosts de la machine hote
  7. Bootstrap d'Ansible sur Amipo1 pour que la machine soit accessible via Ansible (avec un script, il faudrait voir si il serait pas mieu de faire tourner un provisioner ansible à vide dessus qui pourrait peut etre avoir le meme effet)
  8. Provisionnement de l'environnement d'Amipo1 avec l'environnement Ansible du Controller

Provisionnement de la VM Controller

  1. Installation des packages dnsmasq et vim
  2. Installation de l'environnement shell
  3. Configuration de l'environnement dans le fichier .profile
  4. Génération de la clé ssh de provisionnement
  5. Création du fichier ~/.ssh/config
  6. Génération de la “personnal_root_ac”, clé privé et certificat pour créé une Autorité de Certification propre aà chaque environnement de Dev.

Provisionnement de la VM Amipo1

  1. Installation de vim et cie …
  2. Installation de l'environnement shell
  3. Securisation du serveur (firewall, …)
  4. Installation de certbot
  5. Installation de nginx
  6. Configuration de l'architecture web
  7. Déploiement de la homepage amipo
  8. Installation du serveur prometheus
  9. Installation du node-exporter prometheus
  10. Installation de grafana

Gestion des clés ssh dans l'environnement de Dev

Pour se connecter sur les VM, par défaut Vagrant utilise une clé ssh nommé “insecure private key”. Il y a plusieurs clés ssh à distinguer :

Pour le moment nous utilisons la meme clé pour tous les usages. En dev, seule la clé insecure_private_key de vagrant est utilisée, et dans les autres environnements c'est la clé ssh de l'administrateur qui est utilisée.

Actuellement, pour des raisons de simplicité, la clé ssh de provisionnement sur l'environnement de dev est la clé “insecure private key”. Pour corriger cela, il faut ajouter une étape de distribution de la “clé de provisionnement” qui est à réfléchir.

Gestion des credentials ssh pour les differents environnements

Playbooks ansible

Pour automatiser le déploiement des outils sur tous les environnements, nous allons créer des playbooks ansible. Buts :

Liste des playbooks ansible à réaliser en adéquation avec la cible fin 2018 :

Points difficiles :

Installation et configuration du frontal nginx

Configuration de l'architecture web

Le principe est de découpler la configuration de nginx et la configuration relative à l'archi web. Ce playbook ne touche pas aux fichiers de config de nginx, il se contente d'ajouter des fichiers dans conf.d

Idée :

Generation des certificats ssl

Idée :

En dev avec openssl

En prod avec certobt

Déploiement de la homepage

Un playbook de déploiment des release

Un playbook de déploiement du workspace en cours de dev

Sécurisation du serveur

Création d'un playbook / script de provisioning minimal

Idée:

Grafana / Prometheus

MQTT

Je vois 2 implémentations de broker opensource :

VerneMQ implémente le protocol MQTT v5.0

Installation de VerneMQ

Le compte sansible sur ansible galaxy propose des roles pour installer Mosquitto, VerneMQ et le mqtt-exporter:

Le role VerneMQ install vernemq sur debian, mais le fichier service est mauvais et ne permet pas de lancer le serveur VerneMQ. A creuser.

Pousser les messages MQTT dans InfluxDB

Pour plug MQTT sur InfluxDB, nous allons construire un poller en python. Ce poller sera un daemon qui utilisera la librairie python prometheus_client pour poller les queues MQTT.

Formats de données

Idées :

Générateurs de messages

Idées :