===== Hébergement LXC =====
[[wiki:hebergement:hebergement_lxc:tldr| L'infra en 1 page]]
Les membres sur le projet:
**manwefm**, **no_pseudo**, **gerox**
{{ :wiki:hebergement:25_rapport.pdf |Notre rapport cassiopee }}
{{ :wiki:hebergement:25_poster.pdf | Notre poster }}
Schéma représentant le fonctionnement des infra logique et physique :
{{:wiki:hebergement:hosting2.png?800|}}
{{:wiki:hebergement:diagramme_infra.png?800|}}
Un utilisateur peut accéder à sa LXC :
* via l'interface web où il peut start/stop/restart/ajouter et supprimer une redirection de port/ajouter une clé ssh
* via le revproxy qui redirige l'entrée de son nom de domaine vers son LXC sur le port 80
*via ssh sur un port entre 40000 et 50000
==== L'infra physique ====
Il y a 3 serveurs :
* margherita : Héberge les services (revproxy, passerelle, base de données, dns, site web etc.) sur des KVM avec Libvirt
* hypnotika : Héberge les LXC des utilisateurs
* extravaganzza : Le SAN relié en ISCSI over Infiniband à hypnotyka
==== Fonctionnement général ====
Les boutons sur lesquels l'utilisateur clique sur l'interface web écrivent dans des tables temporaires. Des crons écritent en python, sur la VM ansible, récupérent ses données et effectuent l'action demandée.
==== Choix techniques ====
=== Pourquoi LXC ===
Nous n'avions pas les ressources serveurs nécessaires pour proposer des KVM à des dizaines de personnes. C'est pourquoi nous sommes partis sur la conteneurisation.
Plusieurs techno s'offraients à nous : LXC, LXC, Docker et OpenVZ.
{{:wiki:hebergement:choix_lxc.png?400|}}
Pour résumer le tableau :
* OpenVZ était vieux, non libre, nécessitait un noyau patché, n'était pas dans les dépôt Debian et Ansible n'avait pas de module Ansible pour OpenVZ.
* Docker était plutôt pour une infra Saas et ne proposait pas des conteneurs non privilégiés
* LXD n'était pas encore dans les dépôts Debian et son API était galère pour scripter
=== Pourquoi SAN/ISCI/LVM et pas NAS/NFS/ZFS ===
ZFS était encore trop récent sur Debian et OpenIndiana sur un serveur custom bien capricieux...
De plus NFS ne gérait pas simplement les quotas. ISCSI permet à hypnotika de voir les 24 disques d'extravaganzza comme 2 disques de ~4To et de facilement les découper avec des volumes logiques lvm.
=== Pourquoi Ansible ===
On n'a pas vraiment étudié les différentes possibilités, Ansible possédait tout ce dont on avait besoin.
=== Pourquoi postgresql ===
Pour faire plaisir à M.Guerson (super cool) qui était notre tuteur de Cassiopée pour ce projet. Il devait nous aider à sécuriser correctement la bdd mais on n'a pas eu le temps...
=== Pourquoi Django ===
ADH6 était entrain d'être dev la même année avec django et on préferrait python à php
=== Pourquoi pas d'ipv6 ===
On n'a pas eu le temps mais c'est un petit projet sympa.
==== Et maintenant ? ====
L'infra n'est pas finie, voici quelques idées d'amélioration en vrac :
* script pour mettre à jour les CT si pas maj tous les 15 jours
* logrotate propre pour backup la bdd
* utiliser un certificat wildcard letsencrypt
* passer sur LXC 2.1 ou +
* monitorer l'infra
* verifier ce qu'il se passe après 1 an
* maj noms de domaine bannis
* checker ce qu'apport django 2.0 niveau sécu
* template openvpn et docker
* écrire plus de test pour les cron et django
* passer de iptables à nftables
* développer un outil d'administration en ligne de commande pour remplacer l'application web django si elle tombe
* développer l'interface d'administration django pour gérer les adhérents et les LXC en clic-clic et pour éviter de toucher directement à la bdd
* compléter le wiki django encore plus parce que les adhérents...
* compléter le wiki minet encore plus parce que nous ...
* backuper les vms quelquepart
* backuper les LXC quelquepart
* proposer une/plusieurs ipv6 par LXC
==== TODO ====
* script pour mettre à jour les CT si pas maj tous les 15 jours, commence par le faire sur ton ct => => => => crontab ajoutée sur les CT ?
* sauvegarde propre du dump postgresql sur la vm database (faut dump les databases django et django_test, celle de test bougera pas mais faut la backup) => => => check nettoyage.sh dans /root
* upgrade de jessie vers stretch sur
* passerelle => => EN COURS / FAIT
* revproxy => => EN COURS / FAIT
* dhcp => => probleme depot.minet.net et accès aux depots debian
* ansible => => probleme depot.minet.net et accès aux depots debian
* database => => C'est la vm qui héberge la bdd utilisée par django et les cron pythons
* nsh1 => => FAIT
* website => => déjà fait
* on fera les serveurs physiques après => =>
* monitoring => =>
==== TODO manwefm ====
* revoir le stockage et sa doc
* monitoring log ansible